0

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

但是,我不希望该用户访问仪表板,因此我想在登录后将他重定向到“我的帐户”。

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

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

add_filter('login_redirect', 'redirect_agents');

但是,我没有被重定向。但是如果我在没有 if at functions.php 的情况下使用这样的代码,如下所示:

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

add_filter('login_redirect', 'redirect_agents');

它有效,但随后所有用户都被重定向到我的帐户。任何帮助是极大的赞赏!

4

2 回答 2

1

为什么不使用 WordPress 全局 $current_user。

if(in_array('travel_agent', $current_user->roles)) {
  return '/my-account';
}
于 2013-07-30T07:33:14.813 回答
0

过滤器login_redirect接受三个参数:(redirect_to包含当前重定向值)、request(用户来自的 URL)和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执行时定义。

更多信息可在 WordPress Codex 上找到

于 2013-07-30T07:49:49.857 回答