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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 06:09:50