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('« Newer posts') ?>
<?php next_posts_link('Older posts »') ?>
</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('« Newer posts') ?>
<?php next_posts_link('Older posts »') ?>
</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 »', $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('« Newer posts') ?>
<?php next_posts_link('Older posts »') ?>
</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('« Newer posts') ?>
<?php next_posts_link('Older posts »') ?>
</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 »', $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 |2 Answers
Reset to default 13Please 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( '« Newer posts' );
next_posts_link( 'Older posts »', $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
}
next_posts_link('Older posts »', $query->max_num_pages)
– Howdy_McGee ♦ Commented Sep 4, 2014 at 13:50