我认为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并查看结果查询变量。