分页不适用于类别帖子

时间:2015-07-20 作者:Hussain Ansari

我正在使用WP-PageNavi 分页,由于某些原因,我将“博客页面最多显示”设置为100,我无法减少它。

我在一个类别中总共有30个帖子。我想在每个页面上显示10篇文章,但它不显示分页;仅当类别的帖子数超过100篇时,才会显示。代码如下:

$cat_id = get_query_var( \'cat\' ); 
$paged = ( get_query_var( \'paged\' ) ) ? get_query_var( \'paged\' ) : 1;
$found_posts = array(
    \'posts_per_page\'      => 10,
    \'cat\'                 => $cat_id,
    \'meta_key\'            => "custom_key",  
    \'meta_value\'          => \'\',
    \'meta_compare\'        => \'!=\',
    \'ignore_sticky_posts\' => 1,
    \'orderby\'             => \'meta_value_num\', // or \'meta_value_num\'
    \'order\'               => "DESC",
    \'paged\'               => $paged
);
$loop = new WP_Query( $found_posts );
while( $loop->have_posts() ): $loop->the_post();
    global $post;

    // Loop Here

endwhile; 
wp_reset_query();
if ( function_exists( \'wp_pagenavi\' ) ) { 
    wp_pagenavi(); 
}

2 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

不要在主页和任何类型的存档页上运行自定义查询来代替主查询。这总是会引起问题。如果需要更改主查询,请使用pre_get_posts 这样做。

要解决此问题,您需要从类别页面中删除代码并返回默认循环。您的分类页面中应该只包含以下内容

if ( have_posts() ) {
    while ( have_posts() ) {
    the_post();
        // YOUR MARKUP AND TEMPLATE TAGS
     }
}
这将导致您在按发布日期排序的类别帖子上看到所有类别帖子。正如我所说,您现在需要使用pre_get_posts 更改类别页面上的主查询以设置自定义排序和分页

您需要在中添加以下内容functions.php

add_action( \'pre_get_posts\', function ( $q )
{
    if (    !is_admin() // Only target the front end queries
         && $q->is_main_query() // Targets the main query only
         && $q->is_category() // Only target category pages
    ) {
        $q->set( \'posts_per_page\', 10 );
        $q->set( \'meta_key\', \'custom_key\' );
        $q->set( \'meta_value\', \'\' );
        $q->set( \'meta_compare\', \'!=\' );
        $q->set( \'orderby\', \'meta_value_num\' );
        $q->set( \'ignore_sticky_posts\', 1 );
    }
});
你不应该看到每页10篇文章meta_value_num 从自定义字段custom_key 在您的分类页面上从高到低排序

SO网友:T.Todua

除了“选定答案”,可能还需要:

$q->set( \'post_type\', get_post_types() );

结束

相关推荐

Pagination - not progressing

好的,我添加了以下分页标记:<?php next_posts_link( \'Older posts\' ); ?> <?php previous_posts_link( \'Newer posts\' ); ?> 我可以在地址栏中看到查询字符串正在正确更改e、 g.localhost:8888/wordpress/?页码=3但是,页面结果保持不变(显示最初的前10个结果)。我这里出了什么问题?编辑:下面是代码(没有任何HTML):<!--Latest Po