Reputation: 723
I have a problem with PageNavi
showing 126 pages (for 126 posts -- that part is almost correct), but instead of breaking it down by 10 (expecting 13 pages) it shows all posts in every page. If I change 'numberposts' => 5
it shows the same 5.
Relevant codepart:
<?php wp_pagenavi(); ?>
<?php
$args = array( 'category' => 7, 'numberposts' => -1);
$allpost = get_posts( $args );
foreach($allpost as $post) : setup_postdata($post); ?>
<p class="datelist"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></p>
<?php endforeach; ?>
<?php wp_pagenavi(); ?>
I can't seem to figure out what's wrong.
Update (Full Code):
<?php
get_header();
?>
<div id="container">
<div id="content" role="main">
<h1>something</h1>
<?php
$args = array( 'category' => 7, 'numberposts' => -1);
$allpost = get_posts( $args );
foreach($allpost as $post) : setup_postdata($post); ?>
<p class="datelist"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></p>
<?php endforeach; ?>
</div>
</div>
<?php get_footer(); ?>
Working code:
<?php get_header(); ?>
<div id="container">
<div id="content" role="main">
<h1>something</h1>
<?php
global $paged;
if (get_query_var( 'paged' ))
$my_page = get_query_var( 'paged' );
else {
if( get_query_var( 'page' ) )
$my_page = get_query_var( 'page' );
else
$my_page = 1;
set_query_var( 'paged', $my_page );
$paged = $my_page;
}
$args = array(
'cat=7',
'paged' => $my_page,
'posts_per_page' => 10
);
$my_query = new WP_Query( $args );
while ($my_query->have_posts()) : $my_query->the_post();?>
<p class="datelist"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></p>
<?php endwhile;
wp_pagenavi( array( 'query' => $my_query ) );
wp_reset_query();
?>
</div>
</div>
<?php get_footer(); ?>
Upvotes: 4
Views: 3516
Reputation: 1569
When you use get_posts
you're doing a query by your own, and not using the default query vars generated by WordPress. PageNavi plugin won't work out of the box on custom loops.
As pointed by rbaier4, you have to use the paged
variable. Take care not not mix the default loop with your custom stuff, and to reset the variables after you're done.
global $paged;
if (get_query_var( 'paged' ))
$my_page = get_query_var( 'paged' );
else {
if( get_query_var( 'page' ) )
$my_page = get_query_var( 'page' );
else
$my_page = 1;
set_query_var( 'paged', $my_page );
$paged = $my_page;
}
// default loop here, if applicable, followed by wp_reset_query();
$args = array(
// other query params here,
'paged' => $my_page
);
$my_query = new WP_Query( $args );
// custom loop code
wp_pagenavi( array( 'query' => $my_query ) );
wp_reset_query();
Hope it helps.
Upvotes: 3