WP_Query pulling an extra post per page

I’m querying to get a list of all posts, 20 posts_per_page, but the result shows all posts, but with 21 posts per page. If I change posts_per_page to 19, then 20 show. One post is sticky and shows up twice; not sure if that is causing the problem.

Code:

$allposts = array( 
    'post_type'         =>  'post',
    'posts_per_page'    =>  20
    );

$wp_query = new WP_Query($allposts); ?>

<?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
<li><?php the_title(); ?></li>

<?php foo_pagination(); ?>

<?php endwhile; ?>

Related posts

Leave a Reply

1 comment

  1. Sticky posts do add to the post count rather than being included in it. You can alter your query to ignore sticky posts though.

    $allposts = array( 
        'post_type'           =>  'post',
        'posts_per_page'      =>  20,
        'ignore_sticky_posts' => true
    );
    

    But you are also missing pagination parameters.

    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    $allposts = array( 
        'post_type'           =>  'post',
        'posts_per_page'      =>  20,
        'ignore_sticky_posts' => true,
        'paged'               => $paged
    );