WordPress基于角色的登录重定向不起作用

时间:2019-07-07 19:19:37

标签: php wordpress

我按照在线说明将功能添加到我的子主题的functions.php文件中,该功能应将某些角色的用户重定向到特定的URL。

不幸的是,这不起作用。

我已经彻底地重新分析了我的代码,并将其与各种在线解决方案进行了比较,但是,我无法使其在我的网站上生效。

我的代码:

// Custom successful login redirect based on user role
function my_login_redirect( $redirect_to, $request, $user ) {
    // is there a user to check?
    global $user;
    if (isset($user->roles) && is_array($user->roles)) {
        // check for 'company' user role and redirect in case
        if (in_array('company', $user->roles)) {
          $redirect_to = home_url('/arbeitskraft-finden/');
        // check for 'worker' user role and redirect in case
        } elseif (in_array('worker', $user->roles)) {
          $redirect_to = home_url('/wp-admin/chat/');
        // otherwise, redirect to wp-admin
        } else {
          $redirect_to = home_url('/wp-admin/');
        }
    } else {
      return $redirect_to;
    }
}

add_filter( 'login_redirect', 'my_login_redirect', 10, 3 );
// END Custom successful login redirect based on user role

预期结果:

  • 具有“公司”角色的用户将重定向到/ arbeitskraft-finden /
  • 具有“工作者”角色的用户将被重定向到/ wp-admin / chat /
  • 具有其他角色的
  • 用户将重定向到/ wp-admin /

2 个答案:

答案 0 :(得分:1)

我回到了我使用过的最初信息源,即WordPress Codex:Link to the Codex

我意识到变量$user并未在该函数内部全局定义。我不知道在我的代码中是怎么回事。

在删除它之后,并且在为第一条else删除了第二个if之后,代码也可以正常工作,并且看起来像这样:

// Custom successful login redirect based on user role
function my_login_redirect( $redirect_to, $request, $user ) {
  // is there a user to check?
  if (isset($user->roles) && is_array($user->roles)) {
      // check for 'company' user role and redirect in case
      if (in_array('company', $user->roles)) {
        $redirect_to = home_url('/arbeitskraft-finden/');
      // check for 'worker' user role and redirect in case
      } elseif (in_array('worker', $user->roles)) {
        $redirect_to = home_url('/wp-admin/chat/');
      // otherwise, redirect to wp-admin
      } else {
        $redirect_to = home_url('/wp-admin/');
      }
  } 
  return $redirect_to;
}

add_filter( 'login_redirect', 'my_login_redirect', 10, 3 );
// END Custom successful login redirect based on user role

答案 1 :(得分:0)

您需要在 else 条件之外返回变量 $ redirect_to ,因为当您检查是否设置了用户角色时,您只会为该变量分配一个值。不退还。请尝试此代码

// Custom successful login redirect based on user role
function my_login_redirect( $redirect_to, $request, $user ) {
    // is there a user to check?
    global $user;
    if (isset($user->roles) && is_array($user->roles)) {
        // check for 'company' user role and redirect in case
        if (in_array('company', $user->roles)) {
          $redirect_to = home_url('/arbeitskraft-finden/');
        // check for 'worker' user role and redirect in case
        } elseif (in_array('worker', $user->roles)) {
          $redirect_to = home_url('/wp-admin/chat/');
        // otherwise, redirect to wp-admin
        } else {
          $redirect_to = home_url('/wp-admin/');
        }

    } 
      return $redirect_to;

}

add_filter( 'login_redirect', 'my_login_redirect', 10, 3 );
// END Custom successful login redirect based on user role