我认为add_rewrite_tag() 不需要,可以替换为直接将变量添加到公共查询变量:
// Either directly (in your init hook):
$wp->add_query_var( \'var1\' );
$wp->add_query_var( \'var2\' );
// Or via a filter:
add_filter( \'query_vars\', \'wpse12965_query_vars\' );
function wpse12965_query_vars( $query_vars )
{
$query_vars[] = \'var1\';
$query_vars[] = \'var2\';
return $query_vars;
}
此外,您当前允许前面有一个或两个斜杠,但后面没有斜杠。我想你想把
/? 到正则表达式的末尾。这个
[a-zA-Z-] slug的部分有时也写为
[^/] (除了斜线以外的所有东西),但在这种情况下,可能不会有什么不同。
我会这样写重写规则:
add_action( \'init\', \'wpse12065_init\' );
function wpse12065_init()
{
add_rewrite_rule(
\'carpage(/([^/]+))?(/([^/]+))?/?\',
\'index.php?pagename=carpage&var1=$matches[2]&var2=$matches[4]\',
\'top\'
);
}
The
(/([^/]+))? 使整个组都是可选的,因此
/carpage,
/carpage/honda 和
/carpage/honda/finland 应该可以,末尾有一个可选的斜杠。因为我们需要一个额外的小组
/, 变量在下一个捕获组中,那么
$matches[1] 成为
$matches[2] 和
$matches[2] 成为
$matches[4].
如果要调试重写规则,我建议my Rewrite analyzer plugin, 它允许您使用URL并查看结果查询变量。