Wordpress:如果用户角色是“旅行社”重定向到“我的帐户”

时间:2013-07-30 06:24:08

标签: php wordpress

我在主题functions.php中使用add_role( 'travel_agent', 'Travel Agent', array( 'book_hotel' ) );创建了一个名为“旅行社”的自定义角色

但是,我不希望此用户有权访问仪表板,因此我希望在登录后将其重定向到“my-account”。

我在wp-login.php / functions.php上使用此代码没有任何运气:

function redirect_agents() {
  if ( current_user_can('book_hotel') ){
      return '/my-account';
  }
}

add_filter('login_redirect', 'redirect_agents');

但是,我没有被重定向..但是如果我使用这样的代码而没有If在functions.php这样:

 function redirect_agents() {
          return '/my-account';
    }

add_filter('login_redirect', 'redirect_agents');

虽然有效,但所有用户都会被重定向到我的帐户。非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

为什么不使用WordPress global $ current_user。

if(in_array('travel_agent', $current_user->roles)) {
  return '/my-account';
}

答案 1 :(得分:0)

login_redirect过滤器接受三个参数:redirect_to(包含当前重定向值),request(用户来自的网址)和user(用户已作为WP_User对象登录。)

您可以使用函数内的user参数来确定是否重定向:

add_filter( "login_redirect", "custom_login_redirect", 10, 3 );

function custom_login_redirect( $redirect_to, $request, $user )
{
    if ( in_array( "role_name", $user -> roles ) )
    {
        return "/hello-world";
    }

    // Remember to return something just in case,
    // as filters can possibly block execution if
    // they do not return anything.
    else
    {
        return $redirect_to;
    }
}

您可能还想验证$user是否是正确的WP_User对象,以确保正确执行。

您可以尝试使用$ current_user全局变量,但在执行login_redirect时可能会定义也可能不定义。

More information is available at the WordPress Codex