我正在尝试检测用户的页面,然后根据它进行重定向,现在仅用于测试目的,因为我想验证用户角色,如果他们是某个角色,他们将被重定向到页面。无论如何,尽管有研究和反复试验,但以下代码仍无效:
function wpse12535_redirect_sample() {
if(is_page_template('list-projects.php')) {
wp_redirect('http://url.com.au/profile');
}
}
add_action( 'init', 'wpse12535_redirect_sample' );
答案 0 :(得分:2)
在wp_redirect的末尾添加一个退出:
function wpse12535_redirect_sample() {
if(is_page_template('list-projects.php')) {
wp_redirect('http://url.com.au/profile');
exit;
}
}
add_action( 'init', 'wpse12535_redirect_sample' );
请参阅https://developer.wordpress.org/reference/functions/wp_redirect/#description
注意:wp_redirect()不会自动退出,并且几乎总是会跟着调用退出;
编辑:Raunak的回答是正确的,您需要将挂钩从init更改为wp或template_redirect操作:
答案 1 :(得分:1)
注意强>
- 您应在
exit()
之后添加die()
或wp_redirect()
;- 使用
wp
代替init
。这将确保您已加载模板。- 如果模板文件位于子目录下,则必须检查该部分。例如:
醇>/wp-content/themes/my_active_theme/page-templates/list-projects.php
, 然后你必须检查page-templates/list-projects.php
以下是适合您的代码:
function wh_redirect_sample()
{
if (basename(get_page_template()) == 'list-projects.php')
{
wp_redirect('http://url.com.au/profile');
exit(); //always remember to add this after wp_redirect()
}
}
add_action('wp', 'wh_redirect_sample');
<小时/> 替代方法:
function wh_redirect_sample()
{
//if list-projects.php is under sub directory say /wp-content/themes/my_active_theme/page-templates/list-projects.php
if (is_page_template('page-templates/list-projects.php'))
{
wp_redirect('http://url.com.au/profile');
exit();
}
//if list-projects.php is under active theme directory say /wp-content/themes/my_active_theme/list-projects.php
if (is_page_template('list-projects.php'))
{
wp_redirect('http://url.com.au/profile');
exit();
}
}
add_action('wp', 'wh_redirect_sample');
代码进入活动子主题(或主题)的function.php文件。或者也可以在任何插件php文件中。
代码已经过测试并且有效。
希望这有帮助!