带查询字符串的WordPress URL转友好格式时筛选失效问题排查
问题原因及解决方案
核心问题:未注册自定义查询变量
WordPress默认仅识别内置查询变量,filter_cms属于WooCommerce自定义筛选参数,若未通过query_vars钩子注册,即使重写规则将URL映射到该参数,WordPress也会在查询过程中忽略它,直接导致筛选功能无法触发。
另外需注意:新添加的重写规则必须刷新才能生效(你提到分类能正常显示,大概率已完成此步骤,但仍需确认)。
修复步骤
1. 注册自定义查询变量
添加以下代码,让WordPress认可filter_cms参数:
add_filter('query_vars', function($vars) { $vars[] = 'filter_cms'; return $vars; });
2. 确认重写规则的分类参数(可选)
你的重写规则中product_cat=theme如果与子分类的slug完全匹配,这部分无需修改;若后续分类slug调整,需同步更新此处参数。
3. 刷新重写规则
- 进入WordPress后台 → 设置 → 固定链接
- 无需修改任何设置,直接点击「保存更改」,WordPress会自动刷新重写规则缓存。
完整可运行代码
add_action('init', function () { add_rewrite_rule('^c/web/theme/([a-z]+)/?$', 'index.php?product_cat=theme&filter_cms=$matches[1]', 'top'); }); add_filter('query_vars', function($vars) { $vars[] = 'filter_cms'; return $vars; });
修改完成后,site.com/c/web/theme/wp/即可正确触发filter_cms=wp的属性筛选功能。
内容的提问来源于stack exchange,提问作者Monoor
相关产品推荐
相关产品推荐

