我想为我在网站中使用的自定义功能创建url友好url。我在我的主题目录中添加了一个自定义模板。
url重写函数如下所示:
function starts_rewrite_rule() {
add_rewrite_rule(\'^cities-starting-with-([^/]*)/?\',\'index.php?page_id=340&start_letter=$matches[1]\',\'top\');
}
add_action(\'init\', \'starts_rewrite_rule\', 10, 0);
url变为:
site.com/cities-starting-with-a/
从函数中正确读取所有良好和参数。当访问的永久链接更改为
site.com/cities-starting-with-pa/
sql查询更改为“ab”。
更新永久链接后(单击永久链接上的保存)。我想扩展功能并添加另一个url重写规则。我添加了更高的优先级,因为url模式是相同的(除了新的url重写规则有一个额外的参数。所以我复制粘贴相同的函数并添加额外的参数。
function x_letter_cities_starts_rewrite_rule() {
add_rewrite_rule(\'^([^/]*)-letter-words-starting-with-([^/]*)/?\',\'index.php?page_id=340&length=$matches[1]&start_letter=$matches[2]\',\'top\');
}
add_action(\'init\', \'x_letter_cities_starts_rewrite_rule\', 14, 0);
url应为:site。com/7-number-cities-start-with-pa/
但WordPress重写函数似乎无法正确检测额外的参数(7),。因此,结果与访问的url相同,如:site。com/以pa开头的城市/
似乎优先级没有正常工作。或者url重写规则忽略第一部分“7-number”,只读取url“城市以pa/开头”的第二部分模式,因为它们以相同的模式结尾。
在这种棘手的情况下,有人能帮我吗。我感谢你的帮助/线索/想法。
谢谢你,shoku i petrit。
最合适的回答,由SO网友:nmr 整理而成
您正在尝试匹配7-number-cities-starting-with-pa
URL到^([^/]*)-letter-words-starting-with-
第二条规则中的模式。
这些规则应该有效:
add_action( \'init\' , \'se336474_rewrite_rules\', 5 );
add_filter( \'query_vars\', \'se336474_query_vars\' );
function se336474_rewrite_rules()
{
// single pattern for URLs:
// site.com/cities-starting-with-pa/ => start_letter=\'pa\'
// site.com/7-cities-starting-with-pi/ => start_letter=\'pi\', length=7
add_rewrite_rule( \'^(?:([0-9]+)-)?cities-starting-with-([^/]*)/?$\', \'index.php?page_id=340&start_letter=$matches[2]&length=$matches[1]\', \'top\' );
//
// OR for URLs:
// site.com/cities-starting-with-pa/
// site.com/7-number-cities-starting-with-pi/
//
//add_rewrite_rule( \'^cities-starting-with-([^/]*)/?\', \'index.php?page_id=340&start_letter=$matches[1]\', \'top\');
//add_rewrite_rule( \'^([0-9]+)-number-cities-starting-with-([^/]*)/?\', \'index.php?page_id=340&start_letter=$matches[2]&length=$matches[1]\', \'top\');
}
function se336474_query_vars( $vars )
{
$vars[] = "start_letter";
$vars[] = "length";
return $vars;
}
您可以使用
page_id=340
仅当340是
page
键入post,在其他情况下,将重定向到规范URL。
关于第一次重写规则语法[(?:([0-9]+)-)?
] 你可以阅读here.