wp_redirect和is_page_template不起作用?

时间:2017-03-23 01:18:46

标签: php wordpress if-statement redirect hook-wordpress

我正在尝试检测用户的页面,然后根据它进行重定向,现在仅用于测试目的,因为我想验证用户角色,如果他们是某个角色,他们将被重定向到页面。无论如何,尽管有研究和反复试验,但以下代码仍无效:

function wpse12535_redirect_sample() {

    if(is_page_template('list-projects.php')) {
        wp_redirect('http://url.com.au/profile');
    }

}

add_action( 'init', 'wpse12535_redirect_sample' );

2 个答案:

答案 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操作:

https://codex.wordpress.org/Plugin_API/Action_Reference

答案 1 :(得分:1)

  

注意

     
      
  1. 您应在exit()之后添加die()wp_redirect();
  2.   
  3. 使用wp代替init。这将确保您已加载模板。
  4.   
  5. 如果模板文件位于子目录下,则必须检查该部分。例如:   /wp-content/themes/my_active_theme/page-templates/list-projects.php,   然后你必须检查page-templates/list-projects.php
  6.   

以下是适合您的代码:

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文件中。
代码已经过测试并且有效。

希望这有帮助!