Pagination on custom wp_query in WordPress takes to 404 error page
Solution 1
Had a hard time with it too :) Was easier to search when I realized it's wrong calculated post per page number, and here is a magic trick: (to be added to functions.php)
function my_post_count_queries( $query ) {
if (!is_admin() && $query->is_main_query()){
if(is_home()){
$query->set('posts_per_page', 1);
}
}
}
add_action( 'pre_get_posts', 'my_post_count_queries' );
Solution 2
Had same problem with custom post type. I had a query on 'page-template' where the pagination came with 404. I guess the main problem here is the 'slug' of custom post type identical to 'page-template' url. For example if you have a custom post type slug 'portfolio' and a page with the same name, pagination on that page gives a 404. So I just changed 'slug' to 'archives-portfolio' and it helped
Related videos on Youtube
Dom
Updated on June 04, 2022Comments
-
Dom almost 2 years
Im have a loop with wp_query with the following code:
<?php $temp = $wp_query; $wp_query= null; $wp_query = new WP_Query(); $wp_query->query("showposts=2&paged=$paged"); ?> <?php if ($wp_query->have_posts()) : while ($wp_query->have_posts()) : $wp_query->the_post(); ?> <?php the_title() ?> <?php endwhile; ?> <?php else: ?> <article> <h2><?php _e( 'Sorry, nothing to display.', 'theme' ); ?></h2> </article> <?php endif; my_pagination(); wp_reset_query()?>
with standard pagination :
<?php function my_pagination() { global $wp_query; $big = 999999999; echo paginate_links(array( 'base' => str_replace($big, '%#%', get_pagenum_link($big)), 'format' => '?paged=%#%', 'current' => max(1, get_query_var('paged')), 'prev_text' => __('<i class="fa fa-chevron-left"></i>'), 'next_text' => __('<i class="fa fa-chevron-right"></i>'), 'total' => $wp_query->max_num_pages, )); } ?>
The pagination is showing correctly on the page, but whenever I click on the pagination link it takes me to the error page.
Tried everything now and have no idea what can be the reason for it.
Amy help much apprecieated
-
MLK.DEV almost 8 yearsAs per the official docs: codex.wordpress.org/Class_Reference/WP_Query ... posts_per_page (int) - number of post to show per page (available since Version 2.1, replaced showposts parameter). Use 'posts_per_page'=>-1 to show all posts (the 'offset' parameter is ignored with a -1 value). Set the 'paged' parameter if pagination is off after using this parameter. Note: if the query is in a feed, wordpress overwrites this parameter with the stored 'posts_per_rss' option. To reimpose the limit, try using the 'post_limits' filter, or filter 'pre_option_posts_per_rss' and return -1
-
Mariusz over 2 yearsBest answer i found :) Thanks !!