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

如何阻止WordPress归档页面分页并返回404?

解决WordPress自定义文章类型归档分页禁用及分页路径404问题

你的代码问题在于未精准定位目标归档页面,也未处理分页路径的404返回逻辑。以下是可行的解决方案:

1. 精准禁用目标归档的分页

修改pre_get_posts钩子函数,仅针对services自定义文章类型的主查询禁用分页:

function disable_services_pagination($query) {
    // 仅针对主查询 + services自定义文章类型归档页面生效
    if ($query->is_main_query() && $query->is_post_type_archive('services')) {
        $query->set('nopaging', true);
        // 强制设置posts_per_page为-1,确保所有内容一次性加载
        $query->set('posts_per_page', -1);
    }
}
add_action('pre_get_posts', 'disable_services_pagination');

2. 拦截分页路径并返回404

添加template_redirect钩子,当用户访问/services/page/2/及后续分页路径时,直接返回404页面:

function block_services_pagination_paths() {
    // 检查是否为services归档页面,且分页参数大于1
    if (is_post_type_archive('services') && get_query_var('paged') > 1) {
        // 触发404状态
        global $wp_query;
        $wp_query->set_404();
        status_header(404);
        get_template_part(404);
        exit;
    }
}
add_action('template_redirect', 'block_services_pagination_paths');

关键说明

  • 必须加上is_main_query()判断,避免影响侧边栏、自定义查询等其他页面查询逻辑
  • posts_per_page设为-1是为了确保nopaging生效后,所有文章都被加载,不会出现隐性分页
  • template_redirect在页面模板加载前触发,能及时拦截无效分页请求并返回404

将以上两段代码添加到主题的functions.php文件中即可解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 17:25:00