Created
August 9, 2014 14:01
-
-
Save waqasjamal-zz/78400cfa4bb32b538016 to your computer and use it in GitHub Desktop.
WooCommerce shortcode pagination fix for pages
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 | |
/* Code for Pagination on the Books Page */ | |
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*/ | |
?> |
Hello waqasjamal,
I am facing a problem that on home page pagination is showing but now working. It's redirecting on same url and same things is working with another page.
I tried same things with disable the plugin also.
Please help me out.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi, where exactly should I place this code? I tried in page.php and saw the pagination show up on my page with Woocommerce category (exciting) but unfortunately the pagination only took me to http://mydomain/myshortcodepage/page/2. I feel like I'm almost there...can you help? Thanks :)