最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

wp query - Pagination on a WP_query not showing navigation links

programmeradmin0浏览0评论

I'm having trouble adding pagination to a page. I'm using WP_query and would like to pull back 4 posts per page. The basic query seems to work OK but I must be missing something regarding pagination.

// The query for 4 posts
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$query = new WP_Query();
$query->query('showposts=4'.'&paged='.$paged);

if ( $query->have_posts() ) : 
    while ( $query->have_posts() ) : $query->the_post(); ?>
    <div class="post">
      <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
      <p class="author">by <?php the_author(); ?></p>
    </div>
    <?php endwhile; ?>
    <!-- end of the loop -->
    <nav>
        <?php previous_posts_link('&laquo; Newer posts') ?>
        <?php next_posts_link('Older posts &raquo;') ?>
    </nav>

        <?php wp_reset_postdata();

        // If no results appear
        else : ?>
            <p><?php _e( 'Sorry, no posts matched your criteria.' ); ?></p>
        <?php endif; ?>

I've set the var for the pagination at the top as such:

$query->query('showposts=4'.'&paged='.$paged);

Am including the pagination nav as such:

<nav>
    <?php previous_posts_link('&laquo; Newer posts') ?>
    <?php next_posts_link('Older posts &raquo;') ?>
</nav>

But I just get empty HTML <nav></nav> - but no errors, and I can't work out what I am missing.

Edit: As per the suggestion I have updated as:

        $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
        $args = array(
            'posts_per_page' => 4,
            'paged'          => $paged,
        );
        $query = new WP_Query( $args );

and updated the button link to:

<?php next_posts_link( 'Older posts &raquo;', $query->max_num_pages ); ?>

I am still not seeing a pagination link.

I'm having trouble adding pagination to a page. I'm using WP_query and would like to pull back 4 posts per page. The basic query seems to work OK but I must be missing something regarding pagination.

// The query for 4 posts
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$query = new WP_Query();
$query->query('showposts=4'.'&paged='.$paged);

if ( $query->have_posts() ) : 
    while ( $query->have_posts() ) : $query->the_post(); ?>
    <div class="post">
      <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
      <p class="author">by <?php the_author(); ?></p>
    </div>
    <?php endwhile; ?>
    <!-- end of the loop -->
    <nav>
        <?php previous_posts_link('&laquo; Newer posts') ?>
        <?php next_posts_link('Older posts &raquo;') ?>
    </nav>

        <?php wp_reset_postdata();

        // If no results appear
        else : ?>
            <p><?php _e( 'Sorry, no posts matched your criteria.' ); ?></p>
        <?php endif; ?>

I've set the var for the pagination at the top as such:

$query->query('showposts=4'.'&paged='.$paged);

Am including the pagination nav as such:

<nav>
    <?php previous_posts_link('&laquo; Newer posts') ?>
    <?php next_posts_link('Older posts &raquo;') ?>
</nav>

But I just get empty HTML <nav></nav> - but no errors, and I can't work out what I am missing.

Edit: As per the suggestion I have updated as:

        $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
        $args = array(
            'posts_per_page' => 4,
            'paged'          => $paged,
        );
        $query = new WP_Query( $args );

and updated the button link to:

<?php next_posts_link( 'Older posts &raquo;', $query->max_num_pages ); ?>

I am still not seeing a pagination link.

Share Improve this question edited Aug 6, 2019 at 13:18 Arsen Kazydub 1467 bronze badges asked Sep 4, 2014 at 13:23 FrancescaFrancesca 3052 gold badges7 silver badges16 bronze badges 2
  • 1 Try this: next_posts_link('Older posts &raquo;', $query->max_num_pages) – Howdy_McGee Commented Sep 4, 2014 at 13:50
  • You might want to take a look at How to fix pagination for custom loops?. – Nicolai Grossherr Commented Sep 4, 2014 at 14:17
Add a comment  | 

2 Answers 2

Reset to default 13

Please do not use showposts it got replaced by posts_per_page ages ago.

Personally I would add the arguments to the WP_Query like shown below, additionally pagination should work like shown below:

$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$args = array(
    'posts_per_page' => 4,
    'paged'          => $paged,
);
$the_query = new WP_Query( $args );

global $wp_query;
// Put default query object in a temp variable
$tmp_query = $wp_query;
// Now wipe it out completely
$wp_query = null;
// Re-populate the global with our custom query
$wp_query = $the_query;

if ( $the_query->have_posts() ) : 
    while ( $the_query->have_posts() ) : $the_query->the_post();
        // loop code
    endwhile;

    previous_posts_link( '&laquo; Newer posts' );
    next_posts_link( 'Older posts &raquo;', $the_query->max_num_pages );
    wp_reset_postdata();

else :
    // no post found code 
endif;

// Restore original query object
$wp_query = null;
$wp_query = $tmp_query;

Which is the same as the Q&A How to fix pagination for custom loops? I linked you to by @ChipBennett.

Another note, if this in a page template working as static front page, you have to use the query variable page instead of paged:

$paged = ( get_query_var( 'page' ) ) ? get_query_var( 'page' ) : 1;

A good thing to do, get the posts_per_page value from wordpress. You can change this value in wordpress admin menu.

$page = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
if(!$page)
    $page = ( get_query_var( 'page' ) ) ? get_query_var( 'page' ) : 1;

$posts_per_page = get_option( 'posts_per_page' );

$query = new WP_Query( array(
    'posts_per_page' => $posts_per_page,
    'paged'          => $page,
    'post_status'    => 'publish',
    'orderby'        => 'title',
    'order'          => 'ASC',
) );

while ( $query->have_posts() ) {
    $query->the_post();

    // Code for Output
}
发布评论

评论列表(0)

  1. 暂无评论