给力星

Web Developer

WordPress不同分类页面显示不同篇数文章

在使用 WordPress 搭建博客时,有时需要让不同的分类页面显示不同篇数的文章,通过设置项”博客页面至多显示x篇文章”只能设置为显示相同的篇数。虽然可以通过修改 query_string 来实现,但如果使用了 WP-PageNavi 等分页插件,还是会出现一些问题,这种情况下,可以借助 pre_get_posts 来实现我们的需求。

通过修改 query_string 可以实现显示指定篇数:

global $query_string;
$posts = query_posts($query_string.'&posts_per_page=10');
while ( have_posts() ) {
    // ...
}

但如果使用了 WP-PageNavi 等分页插件,通常会导致的一个问题是:分页数量是正确的,但访问后面的页数时,会提示 404 错误。如果要对插件进行修改,那会非常麻烦,而借助 WordPress 的 hooks/action – pre_get_posts,不同分类页面显示不同篇数文章的实现就简单多了:

function powerxing_custom_posts_per_page( $query ) {
    // 为特定分类指定显示数量,键为分类别名(可在后台的分类目录中查看),值为显示数量
    $ppp = array(
        // 比如为分类 notes 和 gallery 设置不同的显示数量
        'notes'   => 10,
        'gallery' => 15,
    );

    if ( $query->is_category() && $query->is_main_query() ) {
        // 获取当前分类别名
        $slug = $query->query_vars['category_name'];

        if ( array_key_exists($slug, $ppp) ) {
            $query->set( 'posts_per_page', $ppp[$slug] );
        }
    }
}
add_action('pre_get_posts', 'powerxing_custom_posts_per_page');

只需要将上面的代码复制到主题下的 functions.php 中,修改 $ppp 数组为你想要的设置就行了。

4条评论

发表评论

电子邮件地址不会被公开。