Last active
August 29, 2015 14:24
-
-
Save lkoudal/90e152b1a85e45e9afcc to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* | |
This code shows pagination for WooCommerce shortcodes when it's embeded on single pages. | |
Include into functions.php. DO NOT include the first line <?php twice in function.php (line 33) otherwise this will break the code | |
*/ | |
if ( ! is_admin() ) { | |
// ---------------------- FRONTPAGE ------------------- | |
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(); | |
} | |
}/*woocommerce*/ | |
}/*frontpage*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment