How to display pagination with shortcodes in woocommerce, such as [Product_Category]

3

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

But the problem is that this shortcode does not give option to display pagination, that is if I configure to only display 12 products per page and I have more than 12 products, the other products simply will not be shown.

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

    
asked by anonymous 26.07.2015 / 09:51

1 answer

1

I would like to share this solution with you, the solution was given by [klihelp no github]: link What worked for me was to put the following code in the file funcions.php of my child-theme:

/**
* 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
    
26.07.2015 / 09:59