WordPress子主题分页异常:所有页码显示相同文章
WordPress分页失效修复指南
核心问题原因
点击页码内容不变,基本都是自定义查询未正确传递分页参数,或是主查询被错误修改导致分页逻辑断裂。
分步修复方案
1. 修复自定义查询的分页参数
如果用WP_Query做文章列表查询,必须加入paged参数,否则分页无法生效:
// 获取当前页码,首页默认1 $paged = get_query_var('paged') ?: 1; // 静态首页改用page参数 // $paged = get_query_var('page') ?: 1; $args = [ 'post_type' => 'post', 'posts_per_page' => 10, // 和后台「设置-阅读」的数值保持一致 'paged' => $paged // 关键:传递分页参数 ]; $custom_query = new WP_Query($args);
2. 不要用query_posts()破坏主查询
query_posts()会完全覆盖主查询的分页逻辑,改用pre_get_posts钩子修改主查询:
function adjust_posts_per_page($query) { // 只修改前台主查询,不影响后台 if ($query->is_main_query() && !is_admin() && $query->is_archive()) { $query->set('posts_per_page', 10); } } add_action('pre_get_posts', 'adjust_posts_per_page');
3. 使用原生分页函数
不要自己写分页链接,用WordPress原生的the_posts_pagination(),它会自动处理页码参数:
// 自定义查询后调用分页 if ($custom_query->max_num_pages > 1) { the_posts_pagination([ 'mid_size' => 2, 'prev_text' => '上一页', 'next_text' => '下一页' ]); wp_reset_postdata(); // 重置查询,避免影响后续内容 }
4. 排查缓存干扰
临时禁用缓存插件(如WP Rocket、W3 Total Cache)测试,部分插件会把分页页面缓存成首页。如果是缓存问题,在插件设置里排除/page/*路径的缓存。
5. 检查模板文件位置
确保分页代码放在对应模板里:
- 博客列表:
index.php/archive.php - 自定义文章类型:
archive-{post_type}.php - 静态首页:
front-page.php
额外排查动作
- 逐一禁用插件,测试是否是插件干扰了查询逻辑
- 确认后台「设置-阅读」的「博客页面最多显示」数值,和代码里的
posts_per_page一致,避免冲突
内容的提问来源于stack exchange,提问作者JasonDamisch
相关产品推荐
相关产品推荐

