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

WordPress CPT归档页与分类法slug重写规则配置咨询

WordPress 自定义文章类型省略分类法标识的URL重写方案

现有代码问题说明

你当前的重写规则存在两个核心问题:

  1. 规则明确匹配了location/industry作为URL的组成部分,自然无法实现省略分类法标识的效果
  2. 规则中存在拼写错误,将industry写为indudtry,也会导致规则匹配失败

具体实现步骤

1. 新增重写规则匹配无分类法标识的URL

function custom_staff_rewrite_rules() {
    // 匹配两个分类项嵌套的格式:staff/[term1]/[term2]/
    add_rewrite_rule(
        '^staff/([^/]+)/([^/]+)/?$',
        'index.php?post_type=staff&staff_term1=$matches[1]&staff_term2=$matches[2]',
        'top'
    );
    // 匹配单个分类项的格式:staff/[term]/
    add_rewrite_rule(
        '^staff/([^/]+)/?$',
        'index.php?post_type=staff&staff_term1=$matches[1]',
        'top'
    );
}
add_action('init', 'custom_staff_rewrite_rules');

2. 注册自定义查询变量

让WordPress可以识别我们自定义的URL参数:

function add_staff_query_vars($vars) {
    $vars[] = 'staff_term1';
    $vars[] = 'staff_term2';
    return $vars;
}
add_filter('query_vars', 'add_staff_query_vars');

3. 解析查询参数映射到对应分类法

通过pre_get_posts钩子判断传入的分类别名属于哪个分类法,动态修改主查询参数:

function parse_staff_terms($query) {
    // 仅对前台staff归档的主查询生效
    if (!is_admin() && $query->is_main_query() && is_post_type_archive('staff')) {
        $term1 = get_query_var('staff_term1');
        $term2 = get_query_var('staff_term2');
        
        $tax_query = ['relation' => 'AND'];
        
        if ($term1) {
            $term_obj = get_term_by('slug', $term1, ['location', 'industry']);
            if ($term_obj) {
                $tax_query[] = [
                    'taxonomy' => $term_obj->taxonomy,
                    'field' => 'slug',
                    'terms' => $term_obj->slug
                ];
            }
        }
        
        if ($term2) {
            $term_obj = get_term_by('slug', $term2, ['location', 'industry']);
            if ($term_obj) {
                $tax_query[] = [
                    'taxonomy' => $term_obj->taxonomy,
                    'field' => 'slug',
                    'terms' => $term_obj->slug
                ];
            }
        }
        
        if (!empty($tax_query)) {
            $query->set('tax_query', $tax_query);
        }
    }
}
add_action('pre_get_posts', 'parse_staff_terms');

4. 修改筛选表单提交逻辑

调整你页面上的两个筛选下拉框的提交逻辑,不要用默认的GET参数提交方式,改为用户选中分类项后,直接把选中的分类别名拼接成/staff/[term1]/[term2]/格式的URL跳转即可。

注意事项

  • 所有代码修改完成后,必须进入WordPress后台【设置】-【固定链接】页面点击「保存更改」,刷新重写规则后新规则才会生效
  • 请确保location和industry两个分类法下没有重复的分类别名(slug),否则会出现分类法识别错误的问题
  • 如果需要自动输出对应格式的分类链接,可以额外挂载term_link钩子修改分类项的默认链接输出,无需手动拼接

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:15:03