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

WordPress短码实现自定义文章类型分类分页遇404问题求助

自定义分类术语分页404问题解决方案

问题原因

  1. 你用get_terms查询分类术语,而WordPress的分页系统默认是为文章主查询设计的。当点击分页链接跳转到/page/2时,WordPress会尝试加载该页面的第二页文章,但该页面本身无对应文章内容,因此返回404。
  2. 短码放在静态页面时,需用page参数获取分页值,而非paged——paged仅在归档、博客类页面生效。

修正后的完整代码

function job_taxonomy_pagination_shortcode() {
    // 静态页面用page参数获取当前页码
    $paged = get_query_var('page') ?: 1;
    $per_page = 9;

    // 获取分类术语总数(和查询参数保持一致,避免总数计算错误)
    $total_terms = get_terms([
        'taxonomy'   => 'job_taxo',
        'orderby'    => 'term_order',
        'hide_empty' => true, // 按需调整是否显示无文章的分类
        'fields'     => 'ids' // 只取ID,提升查询性能
    ]);
    $total = count($total_terms);

    $offset = ($paged - 1) * $per_page;

    // 查询当前页的分类术语
    $jobs = get_terms([
        'taxonomy'   => 'job_taxo',
        'orderby'    => 'term_order',
        'number'     => $per_page,
        'offset'     => $offset,
        'hide_empty' => true
    ]);

    ob_start();

    // 输出分类列表(修复原代码中链接的错误)
    foreach ($jobs as $job) {
        echo '<a href="' . esc_url(get_term_link($job)) . '">' . esc_html($job->name) . '</a>';
    }

    // 生成分页链接
    $big = 999999999;
    echo paginate_links([
        'base'      => str_replace($big, '%#%', esc_url(get_pagenum_link($big))),
        'format'    => 'page/%#%/', // 使用路径式分页,更友好且避免404
        'current'   => max(1, $paged),
        'total'     => ceil($total / $per_page),
        'prev_text' => '上一页',
        'next_text' => '下一页'
    ]);

    // 核心:告诉WordPress当前页面有分页,防止返回404
    global $wp_query;
    $wp_query->max_num_pages = ceil($total / $per_page);

    return ob_get_clean();
}
add_shortcode('job_tax_pagination', 'job_taxonomy_pagination_shortcode');

必做的额外操作

  • 刷新固定链接:进入WordPress后台「设置」→「固定链接」,直接点击「保存更改」(无需修改任何设置),重置重写规则,这能解决大部分分页404问题。
  • 确认分类法设置:注册job_taxo分类法时,要设置hierarchical => true,否则term_order排序不会生效。
  • 保持参数一致性:hide_empty参数在总数查询和当前页查询中要一致,不然分页总数会算错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:45:33