未设置添加_重写_规则查询_var

时间:2014-03-12 作者:MatthewLee

我不寻常地使用了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是空的。

非常感谢。

马修

1 个回复
SO网友:MatthewLee

为了响应yivi的询问,我能够通过将重定向字符串的硬代码部分放在第一位来解决问题,如下所示:

add_rewrite_rule(
    "{$list_view_template}/(.*)?",
    \'index.php?mlscrit=/list-view/$matches[1]&pagename=\' . $list_view_template,
    \'top\'
   );
谢谢!

结束

相关推荐