WordPress中get_query_var返回错误值,重写规则参数映射异常求助
问题分析与解决办法
你的代码存在两个关键问题,导致所有变量都返回thanks:
1. 正则分组与匹配索引错误
你的重写规则正则表达式里,嵌套分组导致$matches的索引对应完全错误:
add_rewrite_rule( '^shop/((thanks))/([0-9]+)/([0-9]+)$', 'index.php?pagename=shop&shop_endpoint=$matches[1]&ref=$matches[2]&key=$matches[3]', 'top' );
((thanks))是外层分组(索引1),内部的(thanks)是子分组(索引2),所以$matches[1]和$matches[2]都会匹配到thanks- 第一个数字段
([0-9]+)是索引3,第二个数字段是索引4,你用$matches[3]对应key,实际应该用$matches[4]
另外注意:正则里的是拼写错误,正确的单词边界转义字符是\b,否则无法实现预期的单词匹配逻辑。
修正后的两种写法
保留内层分组的写法
add_rewrite_rule( '^shop/(\b(thanks)\b)/([0-9]+)/([0-9]+)$', 'index.php?pagename=shop&shop_endpoint=$matches[2]&ref=$matches[3]&key=$matches[4]', 'top' );
更简洁的写法(去掉不必要的内层分组)
add_rewrite_rule( '^shop/(\bthanks\b)/([0-9]+)/([0-9]+)$', 'index.php?pagename=shop&shop_endpoint=$matches[1]&ref=$matches[2]&key=$matches[3]', 'top' );
2. get_query_var调用的拼写错误
你调用的get_query_var('schop_endpoint')多了一个字母c,正确的变量名是shop_endpoint,拼写错误会导致无法获取到对应值。
修正后的调用代码:
get_query_var('shop_endpoint'); get_query_var('ref'); get_query_var('key');
最后一步:刷新重写规则
修改重写规则后,必须进入WordPress后台的设置→固定链接页面,直接点击「保存更改」按钮(无需修改任何设置),让WordPress刷新重写规则缓存,新规则才能生效。
内容的提问来源于stack exchange,提问作者RickB
相关产品推荐
相关产品推荐

