WordPress短码实现自定义文章类型分类分页遇404问题求助
自定义分类术语分页404问题解决方案
问题原因
- 你用
get_terms查询分类术语,而WordPress的分页系统默认是为文章主查询设计的。当点击分页链接跳转到/page/2时,WordPress会尝试加载该页面的第二页文章,但该页面本身无对应文章内容,因此返回404。 - 短码放在静态页面时,需用
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
相关产品推荐
相关产品推荐

