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

WordPress多级子分类文章筛选失效问题及解决方法咨询

解决WordPress多级分类下筛选功能失效问题

问题根源

当前的重写规则仅支持单层级分类的筛选路径,正则表达式^category/([^/]+)/(.+)/?$只能捕获第一个分类节点,遇到多级分类时,后续的分类层级会被错误归到筛选参数里,导致category_name参数值不正确,最终造成筛选功能失效。

解决方案

修改重写规则的正则表达式,让它能匹配任意层级的分类路径,同时正确分离分类路径和筛选参数:

修改后的完整代码

add_action('pre_get_posts', array($this, 'filter_posts_by_custom_fields'));
add_action('init', array($this, 'register_rewrite_rules'));

public function register_rewrite_rules() {
    // 匹配任意层级分类路径 + 筛选参数的规则
    add_rewrite_rule(
        '^category/(.+)/(filter_.+)/?$',
        'index.php?category_name=$matches[1]&custom_filter=$matches[2]',
        'top'
    );
    add_rewrite_tag('%custom_filter%', '([^&]+)');
}

public function filter_posts_by_custom_fields($query) { 
    if (!$query->is_main_query() || !is_category() || !$query->get('custom_filter')) return;

    $custom_filter = $query->get('custom_filter');
    $filters = explode('-and-', $custom_filter);

    $meta_query = ['relation' => 'AND'];
    foreach ($filters as $filter) {
        if (strpos($filter, 'filter_') === 0) {
            list($key, $value) = explode('-', $filter, 2);

            $values = explode('-plus-', $value);

            $meta_query[] = [
                'key' => $key,
                'value' => count($values) > 1 ? $values : $value,
                'compare' => count($values) > 1 ? 'IN' : '='
            ];
        }
    }
    $query->set('meta_query', $meta_query);
}

关键修改说明

新的正则表达式^category/(.+)/(filter_.+)/?$:

  • (.+) 会完整捕获多级分类的路径(比如child-category-1/child-category-2),直接传给category_name参数(WordPress原生支持斜杠分隔的多级分类路径)
  • (filter_.+) 精准捕获以filter_开头的筛选参数,确保筛选逻辑能正确拿到参数

最后必做步骤:刷新重写规则

修改代码后,登录WordPress后台,进入设置 → 固定链接,无需修改任何设置,直接点击「保存更改」,让WordPress加载新的重写规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 20:55:14