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

WordPress子主题isPaged()分页页面文章数量异常,如何正确调整?

WordPress分页页面多显示一篇文章的修复方案

核心问题

你之前的pre_get_posts代码没有限制仅修改主查询,导致所有页面查询(包括侧边栏、小工具的查询)都被强制改为9篇,直接破坏了页面布局。同时,首页的特殊首篇文章展示逻辑需要配合查询参数调整,才能保证分页数量正确。

正确的查询调整代码

将以下代码添加到子主题的functions.php文件中:

function my_custom_query( $query ) {
    // 仅对博客首页/归档页的主查询生效
    if ( $query->is_main_query() && ( is_home() || is_archive() ) ) {
        if ( is_paged() ) {
            // 分页页面每页显示9篇
            $query->set( 'posts_per_page', 9 );
        } else {
            // 首页显示10篇(1篇特殊样式+9篇标准样式)
            $query->set( 'posts_per_page', 10 );
        }
    }
}
add_action( 'pre_get_posts', 'my_custom_query' );

额外排查项

  1. 模板循环重复输出:检查你的模板代码,如果在主循环外单独获取并显示了首篇文章,同时主循环又包含了这篇文章,会导致首页实际显示10篇,分页时查询逻辑混乱。此时需要在主查询中排除首篇文章ID:
    // 在my_custom_query函数的非分页分支中添加
    $first_post_id = get_posts( array( 'numberposts' => 1, 'fields' => 'ids' ) )[0];
    $query->set( 'post__not_in', array( $first_post_id ) );
    
  2. 后台阅读设置:进入WordPress后台「设置-阅读」,确认「博客页面至多显示」的数值与代码设置一致,避免参数冲突。

原代码损坏页面的原因

pre_get_posts钩子会作用于所有WP_Query实例,包括侧边栏、导航菜单等小查询。如果不添加$query->is_main_query()判断,这些小查询也会被强制设置为9篇,导致页面元素错乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 13:24:57