简体   繁体   English

Wordpress PageNavi插件不适用于category.php

[英]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. 我有一个问题, PageNavi显示126页(126个帖子 - 这部分几乎是正确的),但不是分解10(期望13页)它显示每个页面中的所有帖子。 If I change 'numberposts' => 5 it shows the same 5. 如果我改变'numberposts' => 5它会显示相同的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(); ?>

When you use get_posts you're doing a query by your own, and not using the default query vars generated by WordPress. 当您使用get_posts您正在进行自己的查询,而不是使用WordPress生成的默认查询变量。 PageNavi plugin won't work out of the box on custom loops. PageNavi插件无法在自定义循环中开箱即用。

As pointed by rbaier4 , you have to use the paged variable. 正如rbaier4指出的 ,你必须使用paged变量。 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. 希望能帮助到你。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM