Tusk
Tusk

Reputation: 723

Wordpress PageNavi Plugin Doesn't Work on category.php

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

Answers (1)

vmassuchetto
vmassuchetto

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

Related Questions