Отправить 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 как функцию. Короче говоря, на это нельзя доверять.

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