WordPress自定义分类分页点击page/2出现404错误求助
WordPress自定义分类存档页分页404问题解决
核心问题分析
- 自定义查询与WordPress主查询的分页逻辑不匹配,导致分页链接指向错误的URL结构(根目录
/page/2而非分类存档页的/ford_escort/page/2)。 $paged变量获取逻辑错误:get_query_var('ford_escort')和空参数的get_query_var("")无法正确读取当前页码。- 已添加的
pre_get_posts代码设置posts_per_page=10,但自定义查询用的是50,两者分页总数冲突,加剧了404问题。
解决方案步骤
1. 修正$paged变量获取
替换错误的$paged赋值代码:
$paged = get_query_var('paged') ? get_query_var('paged') : 1;
分类存档页中,WordPress用paged作为页码的查询变量,而非自定义分类的slug。
2. 匹配自定义查询与分类存档页条件
自定义查询需关联ford_escort分类,添加tax_query参数:
$args = array( 'post_type' => 'escort', 'posts_per_page' => 50, 'paged' => $paged, 'tax_query' => array( array( 'taxonomy' => 'ford_escort', // 确保此处是自定义分类法的注册名称,若注册时用其他名称需替换 'field' => 'slug', 'terms' => get_queried_object()->slug, // 获取当前分类的slug ), ), );
3. 修正分页链接的URL结构
paginate_links需指定base参数,确保分页链接指向分类存档页:
echo paginate_links(array( 'total' => $custom_query->max_num_pages, 'current' => $paged, 'prev_next' => true, 'prev_text' => __('« Previous'), 'next_text' => __('Next »'), 'base' => get_term_link(get_queried_object()) . '%_%', 'format' => 'page/%#%', ));
4. 统一分页逻辑(可选更优方案)
移除冲突的pre_get_posts代码,改用修改主查询的方式,无需自定义WP_Query:
// 在functions.php中添加 function modify_escort_tax_query($query) { if (!is_admin() && $query->is_tax('ford_escort') && $query->is_main_query()){ $query->set('post_type', 'escort'); $query->set('posts_per_page', 50); } } add_action( 'pre_get_posts', 'modify_escort_tax_query' );
之后页面中直接使用主循环即可:
if (have_posts()) { while (have_posts()) { the_post(); echo '<h2>' . get_the_title() . '</h2>'; } echo paginate_links(array( 'prev_text' => __('« Previous'), 'next_text' => __('Next »'), )); }
5. 刷新固定链接规则
进入WordPress后台设置 > 固定链接页面,直接点击「保存更改」,更新重写规则,确保新分页URL能被正确解析。
验证
完成后分页链接会变为http://localhost:10004/ford_escort/page/2,点击后不再触发404错误。
内容的提问来源于stack exchange,提问作者xavierx
相关产品推荐
相关产品推荐

