我不寻常地使用了add\\u rewrite\\u规则(是否有常见用法?)我有一些意想不到的行为。首先,这是我的代码:
if(!empty($list_view_template))
add_rewrite_rule(
"{$list_view_template}/(.*)?",
\'index.php?mlscrit=$matches[1]/list-view/&pagename=\' . $list_view_template,
\'top\'
);
add_filter(\'init\', \'mls_declare_mls_custom_vars\');
function mls_declare_mls_custom_vars() {
add_rewrite_tag( \'%mlscrit%\', \'(.*)\' );
}
如您所见,我正在使用admin dashboard中设置的pagename作为名为$list\\u view\\u template的变量来限制重写规则。只要在更新值后刷新重写规则(我这样做),这就可以正常工作。问题在于查询变量mlscrit。当我通过Jan Fabry优秀的重写分析器运行时,
https://wordpress.stackexchange.com/a/3608/27556, 它给出了我所期望的,mlscrit=\'/列表视图/\'加上正则表达式中的任何内容,即使正则表达式是空的。
但是,如果我这样做:
add_action( \'template_redirect\', \'mls_feed_rewrite_catch\' );
function mls_feed_rewrite_catch()
{
echo \'mlscrit: \' . get_query_var(\'mlscrit\' );
}
正则表达式中有一些东西,它是有效的。但是如果regex为空,那么变量也会丢失“/列表视图/”部分,因此它是空的。
谁能向我解释一下为什么会这样?
我还应该提到,我尝试过硬编码页面名,我尝试过使用query\\u var过滤器代替add\\u rewrite\\u标记,我尝试过在一堆不同的地方获取mlscrit的值,我总是得到相同的答案,除非regex中有什么东西,否则mlscrit是空的。
非常感谢。
马修