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

WordPress分类模板分页404错误求助:短代码函数异常

解决Taxonomy模板自定义查询分页404问题

嘿,这个分页404的坑我之前踩过好多次,本质是WordPress主查询和自定义查询的分页逻辑冲突了。给你拆解下原因和解决办法:

为啥会出现这个问题?

分类模板(taxonomy.php)默认会跑主查询,拉取当前分类下的所有帖子,主查询的分页是跟着它自己的posts_per_page设置走的。比如主查询默认每页10篇,那它只会认为这个分类最多有3页(对应30篇以内的帖子)。但你的自定义查询是每页4篇,总共有8页,当你点到第4页及以后时,WordPress会觉得“主查询没这么多页啊”,直接给你扔404错误。

两种解决办法,按需选

方案1:直接改主查询(最稳妥,推荐)

如果你的自定义查询只是筛选当前分类下的特定帖子(比如你说的特色项目),那完全没必要新建一个WP_Query,直接修改主查询就行,分页逻辑会和WordPress原生完全兼容,不会出问题。

打开主题的functions.php,加这段代码:

add_action('pre_get_posts', 'adjust_taxonomy_featured_projects');
function adjust_taxonomy_featured_projects($query) {
    // 只在前台分类归档的主查询生效,后台不管
    if (!is_admin() && $query->is_main_query() && is_tax()) {
        // 设置每页显示4篇,和你需求一致
        $query->set('posts_per_page', 4);
        // 这里加你的筛选条件,比如只拉取标记为特色的项目
        // 假设你用自定义字段is_featured来标记,值为1是特色
        $query->set('meta_key', 'is_featured');
        $query->set('meta_value', '1');
    }
}

然后在taxonomy.php里用原生循环就行,不用自己写查询:

if (have_posts()) :
    while (have_posts()) : the_post();
        // 这里写你的帖子展示代码
    endwhile;
    // 原生分页函数,自动生成正确链接
    the_posts_pagination();
endif;

方案2:保留自定义查询,手动同步分页参数

如果你必须用自定义WP_Query(比如逻辑特别复杂),那得手动告诉WordPress你的自定义查询总共有多少页,不然它还是会认主查询的逻辑。

修改你的taxonomy.php代码:

// 先拿到当前页码,兼容首页的情况
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

// 自定义查询参数,必须带上paged!
$args = array(
    'post_type' => 'project', // 替换成你的自定义文章类型
    'tax_query' => array(
        array(
            'taxonomy' => get_query_var('taxonomy'),
            'field' => 'slug',
            'terms' => get_query_var('term'),
        )
    ),
    'posts_per_page' => 4,
    'paged' => $paged,
    // 其他你需要的筛选条件
);

$featured_projects = new WP_Query($args);

// 关键!把自定义查询的总页数赋值给全局$wp_query的max_num_pages
global $wp_query;
$wp_query->max_num_pages = $featured_projects->max_num_pages;

// 循环展示帖子
if ($featured_projects->have_posts()) :
    while ($featured_projects->have_posts()) : $featured_projects->the_post();
        // 帖子内容模板
    endwhile;
    // 用原生分页函数生成链接
    the_posts_pagination();
    // 记得重置查询,避免影响后续内容
    wp_reset_postdata();
endif;

最后提个小注意

别自己手动写分页URL,一定要用WordPress原生的the_posts_pagination()或者paginate_links()函数,不然很容易因为参数不对导致404。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:37:20