如何更改添加重写规则中的匹配项

时间:2013-05-14 作者:aye

其中一个示例使用add_rewrite_rule wordpress中的函数为

add_rewrite_rule(\'^nutrition/([^/]*)/([^/]*)/?\',\'index.php?page_id=12&food=$matches[1]&variety=$matches[2]\',\'top\');
我可以理解匹配项[1]和匹配项[2]的位置,但是否有任何方法可以更改这些匹配项,例如:

add_rewrite_rule(\'^nutrition/([^/]*)/([^/]*)/?\',\'index.php?page_id=12&food=\' . f1($matches[1]) . \'&variety=\' . f2($matches[2]),\'top\');
在哪里f1 是的函数matches[1]f2 是的函数matches[2]

非常感谢你。

编辑1:

这是一个非常普遍的问题,目的是了解wordpress add\\u重写规则。f1和f2函数的一个示例是

function f1($string) {
if (strpos($string, \'/america/\')) {$string .= \'-1\';}
esleif (strpos($string, \'/england/\')) {$string .= \'-2\';}
return $string;
}
f2的功能与f1相似。

2 个回复
最合适的回答,由SO网友:Matthew Boynes 整理而成

重写规则不会像您要求的那样调用函数。WordPress比这灵活得多,因为您可能希望在页面处理过程中的任意一个不受限制的点运行代码,而不局限于处理重写规则时代码中的某个特定时刻。

退一步讲,重写规则的作用就像$_GET 可以通过URL传递数据,如domain.com/?id=123. 区别在于id= 是由重写规则决定的,因此您可以有一个类似domain.com/123/. 通常我们会保留id 在URL中,例如。domain.com/id/123/ 避免与其他URL结构冲突,但这对于这个答案并不重要。

使用您的示例,假设您有一个国家的重写规则,并且您希望您的URL看起来像/nation/america//nation/england/. 下面是一个重写规则示例:

add_rewrite_rule( \'^nation/([^/]*)/?\', \'index.php?nation=$matches[1]\' );

要使用这些信息,您几乎可以actionfilter 之后parse_query. 这是设置查询变量后可用的第一个操作,因此这是您可以使用的第一个操作get_query_var. 下面是一个示例:

function wpse_99414_get_nation() {
    if ( $nation = get_query_var( \'nation\' ) ) {
        # This is the equivalent to your f1 function
        # $nation will either be \'america\', \'england\', or whatever else
        # process it however you need!
    }
}
add_action( \'parse_query\', \'wpse_99414_get_nation\' );
最后,请注意,为了像我们使用nation, 您需要注册它。下面是一个这样做的示例:

function wpse_99414_query_vars( $qv ) {
    $qv[] = \'nation\';
    return $qv;
}
add_filter( \'query_vars\', \'wpse_99414_query_vars\' );

SO网友:Rarst

函数参数是在函数调用时计算的,所以在注册重写规则时,而不是在匹配和使用重写规则时。

您需要在代码中的不同点对匹配的值进行处理。

结束

相关推荐