扩展我的评论:
重写API用于重写URL,而不是重定向。因此URL不会更改。你只是告诉WordPress/testpage/
应加载page_id
81
, 但URL将保持不变/testpage/
.
无论如何,我尝试了以下方法(其中501是安装中存在的ID),它运行良好,加载了该页面的内容和模板:
function wpse_283104_rewrite() {
add_rewrite_rule(\'^testpage/?\', \'index.php?page_id=501\', \'top\');
}
add_action( \'init\', \'wpse_283104_rewrite\' );
确保你
flushing rewrite rules 尽管如此。除非你这样做,否则它不会起作用。
如果你只是想重定向,那么.htaccess or a plugin 可能是最好的选择。
如果您确实想对重定向使用重写规则,那么您需要做的是重写URL以设置自定义查询变量,然后在template_redirect
钩住,并执行重定向。
首先,我们将创建一个名为wpse_283104_redirect. A query var is a query string that WordPress recognises. We need to tell WordPress to see
?wpse\\U 283104\\U重定向=1in a rewrite so that we can check it later. This is done by filtering the
查询变量数组:
function wpse_283104_query_vars( $vars ) {
$vars[] = \'wpse_283104_redirect\';
return $vars;
}
add_filter( \'query_vars\', \'wpse_283104_query_vars\' );
接下来是重写规则:
function wpse_283104_rewrite() {
add_rewrite_rule( \'^testpage/?\', \'index.php?wpse_283104_redirect=1\', \'top\' );
}
add_action( \'init\', \'wpse_283104_rewrite\' );
现在
/testpage/
将加载主页,但自从我们注册
wpse_283104_redirect
我们可以看看我们是否在
/testpage/
(或无论重写的URL是什么)使用[
get_query_var()][2]
.
所以在template_redirect
钩子我们将执行此检查并重定向:
function wpse_283104_redirect() {
if ( get_query_var( \'wpse_283104_redirect\' ) == \'1\' ) {
wp_redirect( \'http://example.com\' );
exit;
}
}
add_action( \'template_redirect\', \'wpse_283104_redirect\' );