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

如何解决WordPress自定义分类存档页面分页404错误

解决WordPress自定义分类存档分页404的问题

嘿,我来帮你搞定这个分页404的坑!你的问题核心在于自定义查询和WordPress主查询的分页逻辑没对齐——后台全局设置的10篇/页和你想要的1篇/页冲突,导致WordPress误以为第2页没有内容,直接返回404了。下面是具体的解决步骤,优先推荐最稳妥的方案:

一、别自己写WP_Query,改用pre_get_posts修改主查询(强烈推荐)

直接在模板里新建WP_Query会绕过WordPress原生的分页机制,这是这类404问题的头号元凶。正确的做法是用pre_get_posts钩子修改主查询的参数,让它自动处理分页:

  1. 打开你的主题functions.php,添加这段代码:
add_action('pre_get_posts', 'custom_industry_tax_pagination_fix');
function custom_industry_tax_pagination_fix($query) {
    // 只对前台的自定义分类存档生效,避免影响后台和其他页面
    if (!is_admin() && $query->is_main_query() && is_tax('industry_taxonomy')) {
        // 设置每页显示1篇
        $query->set('posts_per_page', 1);
        // 指定要包含的自定义文章类型
        $query->set('post_type', array( 'post', 'projects', 'storefronts', 'pressreleases', 'products', 'videos', 'whitepapers', 'industryopinion' ));
    }
}

注意把industry_taxonomy替换成你实际的自定义分类法名称哦。

  1. 然后在你的自定义分类存档模板(比如taxonomy-industry_taxonomy.php)里,用默认的主查询循环就行,不用再写自定义查询了:
if (have_posts()) :
    while (have_posts()) : the_post();
        // 这里放你的文章内容输出代码,比如标题、内容等
        the_title('<h2>', '</h2>');
        the_excerpt();
    endwhile;

    // 输出分页导航,WordPress会自动计算页数
    the_posts_pagination(array(
        'mid_size' => 2,
        'prev_text' => '← 上一页',
        'next_text' => '下一页 →',
    ));
else :
    echo '<p>暂时没有相关内容哦</p>';
endif;

二、刷新固定链接重写规则

修改完查询参数后,一定要刷新WordPress的重写规则,否则新的分页路径不会生效:

  • 登录后台,进入设置 > 固定链接
  • 啥都不用改,直接点保存更改按钮就行,这会自动刷新规则。

三、如果非要用自定义WP_Query(不推荐)

如果你因为特殊需求必须用自定义查询,那得手动处理分页参数,确保和主查询对齐:

  1. 在模板里先获取当前页码:
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
  1. 构建查询参数时加上分页参数:
$args = array(
    'post_type' => array( 'post', 'projects', 'storefronts', 'pressreleases', 'products', 'videos', 'whitepapers', 'industryopinion' ),
    'tax_query' => array(
        array(
            'taxonomy' => 'industry_taxonomy', // 替换成你的分类法名称
            'field'    => 'slug', // 或者'id',看你用什么匹配
            'terms'    => get_queried_object()->slug, // 获取当前存档的分类术语
        ),
    ),
    'posts_per_page' => 1,
    'paged' => $paged, // 关键:传入当前页码
    'post_status' => 'publish',
);
$custom_query = new WP_Query($args);
  1. 输出分页导航时,用paginate_links并传入正确的总页数:
if ($custom_query->max_num_pages > 1) {
    echo paginate_links(array(
        'base' => str_replace(999999999, '%#%', esc_url(get_pagenum_link(999999999))),
        'format' => '?paged=%#%',
        'current' => max(1, get_query_var('paged')),
        'total' => $custom_query->max_num_pages,
        'prev_text' => '← 上一页',
        'next_text' => '下一页 →',
    ));
}
// 记得重置查询,避免影响后续内容
wp_reset_postdata();

为啥会出现这个问题?

简单说,WordPress的分页是靠主查询的posts_per_page和found_posts来计算总页数的。你之前用自定义查询时,主查询还是按照后台的10篇/页来算,你的自定义查询有2篇、每页1篇,但主查询觉得10篇才会分页,所以它认为总页数只有1,访问第2页就返回404了。修改主查询参数后,WordPress就会用你设置的1篇/页来计算总页数,分页自然就正常了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 02:27:30