Перенаправление входа в систему на основе ролей WordPress не работает - PullRequest
0 голосов
/ 07 июля 2019

Я следовал инструкциям в Интернете, чтобы добавить в мой 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 ]

1 голос
/ 09 июля 2019

Я вернулся к исходному источнику информации, который я использовал, коду WordPress: Ссылка на Кодекс

Я понял, что переменная $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
0 голосов
/ 08 июля 2019

вам нужно вернуть переменную $ redirect_to за пределами условия else , потому что когда вы проверяете, установлена ​​ли роль пользователя или нет, вы только присваиваете значение этой переменной.Не вернуть его.пожалуйста, попробуйте этот код

// 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...