我正在建立一个小型网站,我希望每当一个人使用某个链接时,他都会被重定向到frontpage,并打开一个公式。
外汇:www.homepage。com/example/-->www.homepage。com公司
过去,我使用add\\u rewrite\\u rule使用自定义变量重定向用户,只需使用以下命令即可轻松重定向用户:
add_rewrite_rule(\'^example/?\',\'index.php\',\'top\');
但我的“问题”是我需要一个静态变量,所以我想我可以这样做:
add_rewrite_rule(\'^example/?\',\'index.php?key1=123\',\'top\');
遗憾的是,我似乎无法实现这一点,而当我尝试只查询var(“key1”)时,我什么也得不到。
What am i doing wrong here?Update 1尝试将查询变量列入白名单,如注释中所述
add_action(\'init\', \'test_rewrite_rule\', 10, 0);
function test_rewrite_rule()
{
add_rewrite_rule(\'^example/?\',\'index.php?p=1&my-api=test\',\'top\');
}
//add_action(\'init\', \'test_rewrite_tag\', 10, 0);
//function test_rewrite_tag()
//{
//add_rewrite_tag(\'%my-api%\', \'([^&]+)\');
//}
add_filter( \'query_vars\', \'wpd_query_vars\' );
function wpd_query_vars( $query_vars )
{
$query_vars[] = \'my-api\';
return $query_vars;
}
并获取变量
$wp_query->query_vars[\'my-api\']
Update 2 说得很清楚,我真的不在乎它通过我的重写路径传递了什么变量,只要我能看到它被重定向了:)
最合适的回答,由SO网友:Tom J Nowell 整理而成
您不能将任意查询变量添加到重写规则中,这里有一个允许变量的白名单。
要添加查询变量,请使用query_vars
过滤器,例如,此过滤器添加my-api
作为有效的查询变量:
function wpd_query_vars( $query_vars ){
$query_vars[] = \'my-api\';
return $query_vars;
}
add_filter( \'query_vars\', \'wpd_query_vars\' );
但这只会得到查询变量,
you still need to do something with it. 重写规则将漂亮的URL映射到查询变量,仅此而已。这就是为什么重写规则
index.php
行不通。
相反,您需要编写一个钩子来查找何时定义了新的查询变量,如果是这样的话,请执行您希望该页面执行的操作。
大多数人会使用template_redirect
钩住并加载自定义模板,例如。
add_action( \'template_redirect\', \'custom_page_template_redirect\' );
function custom_page_template_redirect() {
global $wp_query;
$custom_page = $wp_query->query_vars[\'my-api\'];
if ( $custom_page == \'key\' ) {
// we\'ve found our page, call render_page and exit
echo "hooray! it works!";
exit;
}
}
您可以调用
wp_safe_redirect()
将用户重定向到您选择的目的地(或
wp_redirect
如果是场外)