Pagination on custom wp_query in WordPress takes to 404 error page

12,909

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

Share:
12,909

Related videos on Youtube

Dom
Author by

Dom

Updated on June 04, 2022

Comments

  • Dom
    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
    MLK.DEV almost 8 years
    As 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
    Mariusz over 2 years
    Best answer i found :) Thanks !!