如何解决WordPress自定义分类存档页面分页404错误
解决WordPress自定义分类存档分页404的问题
嘿,我来帮你搞定这个分页404的坑!你的问题核心在于自定义查询和WordPress主查询的分页逻辑没对齐——后台全局设置的10篇/页和你想要的1篇/页冲突,导致WordPress误以为第2页没有内容,直接返回404了。下面是具体的解决步骤,优先推荐最稳妥的方案:
一、别自己写WP_Query,改用pre_get_posts修改主查询(强烈推荐)
直接在模板里新建WP_Query会绕过WordPress原生的分页机制,这是这类404问题的头号元凶。正确的做法是用pre_get_posts钩子修改主查询的参数,让它自动处理分页:
- 打开你的主题
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替换成你实际的自定义分类法名称哦。
- 然后在你的自定义分类存档模板(比如
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(不推荐)
如果你因为特殊需求必须用自定义查询,那得手动处理分页参数,确保和主查询对齐:
- 在模板里先获取当前页码:
$paged = (get_query_var('paged')) ? get_query_var('paged') : 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);
- 输出分页导航时,用
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
相关产品推荐
相关产品推荐

