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
相关产品推荐
相关产品推荐

