我需要为我的网站添加一些重写规则。我需要链接此友好URL:
www.example.com/site-tool-calendar
到
www.example.com/site-tool?tool=calendar
/site-tool
已经是WordPress内部的永久链接,并且正在运行
我在我的functions.php
function custom_rewrite( $wp_rewrite ) {
$feed_rules = array(
\'^site-tools-(^/.]+)/$\' => \'site-tools/?tool=\' . $wp_rewrite->preg_index(1),
);
$wp_rewrite->rules = $feed_rules + $wp_rewrite->rules;
}
add_filter( \'generate_rewrite_rules\', \'custom_rewrite\' );
在此之前
functions.php
我将param“tool”添加到查询变量中:
function wpd_query_vars( $query_vars ){
$query_vars[] = \'tool\';
return $query_vars;
}
add_filter(\'query_vars\', \'wpd_query_vars\');
我刷新了admin Permalink页面中的规则,并尝试测试URL,但尽管我的规则被添加到
$wp_rewrite->wp_rewrite_rules()
列表,它从不匹配。
它始终与以下通用规则相匹配:
([^/]+)(?:/([0-9]+))?/?$
我调试了它,并检查了我的规则是否出现在规则列表的开头,但从未执行过。
如果我做错了什么,有人能帮我再检查一遍吗?我尝试了很多替代方案,但都把我带到了同样的情况:规则出现了,但从未执行过。
最合适的回答,由SO网友:Ahmed Fouad 整理而成
请试试这个。
首先使用此函数添加所需的重写规则
add_action( \'init\', \'rewrite_site_tools_page\' );
function rewrite_site_tools_page() {
add_rewrite_rule(
\'^site-tools-([^/]+)$\',
\'index.php?pagename=site-tools&tool=$matches[1]\',
\'top\');
}
假设页面名称为site tools。
现在将该工具添加为query var
add_filter(\'query_vars\', \'wpd_query_vars\');
function wpd_query_vars( $query_vars ){
$query_vars[] = \'tool\';
return $query_vars;
}
保存永久链接。
现在如果您访问hxxp://yourdomain.com/site-tools-calculator/它应该可以工作(计算器可以是其他任何东西)
如果要调试它,可以通过以下函数转储查询变量“tool”:
add_action(\'template_redirect\', \'test_my_queryvar\', 999 );
function test_my_queryvar() {
die( var_dump( get_query_var( \'tool\' ) ) );
}