You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WordPress主分类无分页时限制单页显示文章总数

解决WordPress指定分类页面显示固定数量文章且禁用分页的问题

你的代码核心问题是同时设置了posts_per_page和nopaging=true,这两个参数互斥——nopaging=true的作用是取消所有分页限制,强制加载该分类下的全部文章,会直接覆盖posts_per_page的设置,所以无法实现只显示9篇的需求。

要实现“显示指定数量文章+禁用分页”,只需要保留posts_per_page,配合几个辅助参数确保分页逻辑完全失效,修正后的代码如下:

function target_main_category_query_with_conditional_tags( $query ) {
    if ( ! is_admin() && $query->is_main_query() ) {
        if ( is_category( array( 45, 49 ) ) ) {
            // 设置要显示的文章数量
            $query->set( 'posts_per_page', 9 );
            // 跳过总文章数计算,提升性能(无需分页时不需要统计总数)
            $query->set( 'no_found_rows', true );
            // 禁用分页参数,避免URL分页参数触发额外查询
            $query->set( 'paged', false );
            $query->set( 'page', false );
        }
    }
}
add_action( 'pre_get_posts', 'target_main_category_query_with_conditional_tags' );

关键修改说明

  • 移除nopaging=true:该参数会强制加载所有文章,是导致需求失效的根本原因。
  • 添加no_found_rows=true:当不需要分页时,让WordPress跳过数据库中总文章数的统计查询,减少服务器负载,提升页面加载速度。
  • 设置paged和page为false:确保即使URL中带有分页参数(比如?paged=2),也不会触发分页逻辑,始终只显示设置的9篇文章。

额外检查项

如果修改后仍不生效,需要确认你的主题分类模板(比如category.php)是否使用了自定义WP_Query查询——如果主题硬编码了新的查询实例,pre_get_posts对主查询的修改不会影响自定义查询,这时需要直接修改自定义查询的参数,或者改用主查询的循环结构(即if ( have_posts() ) : while ( have_posts() ) : the_post(); ... endwhile; endif;)。

内容的提问来源于stack exchange,提问作者Wanderlust Consulting

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 02:57:49