Intereting Posts
Проверка наличия почты, а затем выполнение действий Какие-либо побочные эффекты добавления apply_filters в функцию? Скрытые медиа-загрузки отображаются в Media Library Перенаправление восхитительных загрузок в wordpress login, если только участники проверены Каким файлом является тег </ body>, расположенный в теме по умолчанию Genesis? Автор сообщения url … способ получить отображаемое имя для URL-адреса вместо идентификатора пользователя? Пустая папка создается WordPress, разбивает сайт Как создать структуру моей папки тем, чтобы избежать огромного списка файлов Отсутствие навигации слайдера Meta Query не работает как ожидаемый Журнал отладки WordPress не работает Передача переменных на новую страницу Создание первой публикации более широкой, чем другие сообщения на домашней странице (по умолчанию) Проблемы с Permalink Миграция настраиваемого php мы писали из functions.php в плагин, специфичный для сайта

Отправить admin для другого входа, кроме пользователей?

Я создал отдельную страницу входа в /login/ и перенаправил туда wp-login.php – я также подключился к нескольким перехватам, связанным с WP, таких как wp_login_failed чтобы люди перенаправлялись туда.

Однако я решил, что я хочу, чтобы администраторы продолжали входить в систему со стандартного места и держать это для пользователей – здесь нет проблем, поскольку я могу просто направлять пользователей на /login/ и удалять перенаправления.

Проблема с этим в том, что пользователи /wp-login.php снова перенаправляются на /wp-login.php и если я буду перенаправлять обратно, тогда пользователи-администраторы будут перенаправлены на /login/ вместо этого.

Как справиться с этим?

Solutions Collecting From Web of "Отправить admin для другого входа, кроме пользователей?"

Вы можете сделать это, используя фильтр login_redirect .

 function my_login_redirect( $redirect_to, $request, $user ) { global $user; if ( isset( $user->roles ) && is_array( $user->roles ) ) { //check for admins if ( in_array( 'administrator', $user->roles ) ) { // redirect them to the default place //make wp-admin as your default place, if you customized it return $redirect_to; } else { return home_url('/login/'); } } else { return $redirect_to; } } add_filter( 'login_redirect', 'my_login_redirect', 10, 3 ); 

ОБНОВИТЬ

Я предполагаю, что вы используете wp_login_form для пользовательской страницы входа и уже подключены к authenticate чтобы обрабатывать пустое имя пользователя и / или пароль.

Мы можем использовать $_SERVER['HTTP_REFERER'] для проверки того, откуда пришел запрос, и переадресации.

 function wpse9845_my_awesome_login_fail( $username ) { $referrer = $_SERVER['HTTP_REFERER']; // where did the post submission come from? // if there's a valid referrer, and it's not the default wp-login.php ot wp-admin screen if ( !empty($referrer) && !strstr($referrer,'wp-login') && !strstr($referrer,'wp-admin') ) { wp_redirect( $referrer ); exit; } } add_action( 'wp_login_failed', 'wpse9845_my_awesome_login_fail' ); 

Существует плохая сторона вышеприведенного кода: $_SERVER['HTTP_REFERER'] не поддерживается всем пользовательским агентом.

Примечание ( из php.net ): HTTP_REFERER – адрес страницы (если есть), которая ссылалась на пользовательский агент на текущую страницу. Это устанавливается пользовательским агентом. Не все пользовательские агенты установят это, а некоторые предоставляют возможность изменять HTTP_REFERER как функцию. Короче говоря, на это нельзя доверять.

Лучший способ сделать это – использовать полностью пользовательскую страницу / форму входа, а также аутентификацию. Вот очень хороший учебник .