How to view paging with shortcodes in Woocommerce, such as [Product_category]

Asked

Viewed 1,046 times

3

I am using the shortcode [Product_category] to display the products in the store for the ease of combining categories, I can display for example only the products that belong at the same time to the categories ERGOMETRIA and PROFESSIONAL and NEW (if you want to know how it does this ask me).

But the problem is that this shortcode gives no option to display paging, ie if I set to display only 12 products per page and I have more than 12 products, the other products will simply not be shown.

After much searching I found a SOLUTION that worked to solve this and I will post as answer because many people may be suffering from it.

1 answer

1

I would like to share this solution with you, the solution was given by [klihelp on github]: https://gist.github.com/klihelp/7810337 What worked for me was to put the following code in the funcions.php file of my theme-Child:

/**
* This code shows pagination for WooCommerce shortcodes when it's embeded on single pages.
* Include into functions.php.
*/
if ( defined('WC_VERSION') ) {
// ---------------------- WooCommerce active -------------------
/**
 * Set Pagination for shortcodes custom loop on single-pages.
 * @uses $woocommerce_loop;
 */
add_action( 'pre_get_posts', 'kli_wc_pre_get_posts_query' ); 
function kli_wc_pre_get_posts_query( $query ) {
    global $woocommerce_loop;

    // Get paged from main query only
    // ! frontpage missing the post_type
    if ( is_main_query() && ( $query->query['post_type'] == 'product' ) || ! isset( $query->query['post_type'] ) ){

      if ( isset($query->query['paged']) ){
        $woocommerce_loop['paged'] = $query->query['paged'];
      }
    }

    if ( ! $query->is_post_type_archive || $query->query['post_type'] !== 'product' ){
        return;
    }

    $query->is_paged = true;
    $query->query['paged'] = $woocommerce_loop['paged'];
    $query->query_vars['paged'] = $woocommerce_loop['paged'];
}

/** Prepare Pagination data for shortcodes on pages
 * @uses $woocommerce_loop;
 */
add_action( 'loop_end', 'kli_query_loop_end' ); 
function kli_query_loop_end( $query ) {

    if ( ! $query->is_post_type_archive || $query->query['post_type'] !== 'product' ){
        return;
    }

    // Cache data for pagination
    global $woocommerce_loop;
    $woocommerce_loop['pagination']['paged'] = $woocommerce_loop['paged'];
    $woocommerce_loop['pagination']['found_posts'] = $query->found_posts;
    $woocommerce_loop['pagination']['max_num_pages'] = $query->max_num_pages;
    $woocommerce_loop['pagination']['post_count'] = $query->post_count;
    $woocommerce_loop['pagination']['current_post'] = $query->current_post;
}
/**
 * Pagination for shortcodes on single-pages 
 * @uses $woocommerce_loop;
 */
add_action( 'woocommerce_after_template_part', 'kli_wc_shortcode_pagination' ); 
function kli_wc_shortcode_pagination( $template_name ) {
    if ( ! ( $template_name === 'loop/loop-end.php' && is_page() ) ){
        return;
    }
    global $wp_query, $woocommerce_loop;
    if ( ! isset( $woocommerce_loop['pagination'] ) ){
        return;
    }
    $wp_query->query_vars['paged'] = $woocommerce_loop['pagination']['paged'];
    $wp_query->query['paged'] = $woocommerce_loop['pagination']['paged'];
    $wp_query->max_num_pages = $woocommerce_loop['pagination']['max_num_pages'];
    $wp_query->found_posts = $woocommerce_loop['pagination']['found_posts'];
    $wp_query->post_count = $woocommerce_loop['pagination']['post_count'];
    $wp_query->current_post = $woocommerce_loop['pagination']['current_post'];

    // Custom pagination function or default woocommerce_pagination()
    kli_woocommerce_pagination();
}   
/**
 * Custom pagination for WooCommerce instead the default woocommerce_pagination()
 * @uses plugin Prime Strategy Page Navi, but added is_singular() on #line16
 */
remove_action('woocommerce_after_shop_loop', 'woocommerce_pagination', 10);
add_action( 'woocommerce_after_shop_loop', 'kli_woocommerce_pagination', 10);
function kli_woocommerce_pagination() {
    woocommerce_pagination(); 
}
}// END WOOCOMMERCE
  • cool. After putting this code in works.php where I should call to work in the page?

Browser other questions tagged

You are not signed in. Login or sign up in order to post.