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' );
额外排查项
- 模板循环重复输出:检查你的模板代码,如果在主循环外单独获取并显示了首篇文章,同时主循环又包含了这篇文章,会导致首页实际显示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 ) ); - 后台阅读设置:进入WordPress后台「设置-阅读」,确认「博客页面至多显示」的数值与代码设置一致,避免参数冲突。
原代码损坏页面的原因
pre_get_posts钩子会作用于所有WP_Query实例,包括侧边栏、导航菜单等小查询。如果不添加$query->is_main_query()判断,这些小查询也会被强制设置为9篇,导致页面元素错乱。
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

