Вопрос или проблема
Я уже вошел в систему (с ролью администратора). Если я попробую войти снова через wp-login.php, форма просто начинает дрожать — сообщение об ошибке над формой остается пустым. Следуя предложению на этом форуме, я добавил следующий код в файл functions.php своей темы — это сработало:
/* Создайте сообщение об ошибке для новой попытки входа, если пользователь уже вошел в систему */
add_filter('login_errors','login_error_message');
function login_error_message($error){
//создайте сообщение об ошибке для уже вошедшего пользователя
$error = "Вы уже вошли в систему";
return $error;
}
Вместо обхода сообщения об ошибке я бы предложил проверить, вошел ли пользователь уже в систему при загрузке wp-login.php. Если пользователь вошел в систему – перенаправьте его на wp-admin. Вы даже можете добавить еще одну проверку и, например, перенаправить только администраторов на wp-admin, перенаправить подписчиков на главную страницу сайта и т.д.
add_action( 'login_head', 'wpse_redirect_login', 1 );
function wpse_redirect_login() {
if( is_user_logged_in() ) {
wp_redirect( admin_url() );
}
}
Честно говоря, это одна из тех проблем, которые меня постоянно интересуют, почему ее нет в Core.
login_errors
фильтр, который позволяет нам изменять сообщение об ошибке, отображаемое на странице входа.
Внутри функции login_error_message
мы проверяем, вошел ли пользователь уже в систему, используя функцию is_user_logged_in()
// Добавьте этот код в файл functions.php вашей темы или в пользовательский плагин
add_filter('login_errors', 'login_error_message');
function login_error_message($error) {
// Проверяем, вошел ли пользователь уже в систему
if (is_user_logged_in()) {
// Устанавливаем пользовательское сообщение об ошибке для уже вошедших в систему пользователей
$error = __('Вы уже вошли в систему.', 'text-domain');
}
return $error;
}
Вы можете определить, вошел ли текущий пользователь в систему, и перенаправить его на страницу профиля с помощью следующего кода…
add_action('wp_loaded','wp_login_redirect_logged_in_user',0);
public static function wp_login_redirect_logged_in_user(){
global $pagenow;
if ( in_array($pagenow, array('wp-login.php', 'wp-register.php') ) ) {
if( is_user_logged_in() ) {
$profile_page = get_edit_user_link( get_current_user_id() );
wp_safe_redirect( $profile_page );
die();
}
}
}
.
Ответ или решение
Когда вы пытаетесь войти в систему, но уже авторизованы, и форма просто "трясется", не отображая сообщение об ошибке, это может вызвать определенные неудобства, особенно для пользователей с ролью администратора. Давайте рассмотрим данную проблему подробнее и предложим решения, которые могут помочь улучшить пользовательский опыт.
Условия проблемы
При попытке повторного входа на страницу входа (wp-login.php
), если пользователь уже авторизован, форма может визуально "трястись", в то время как текстовое сообщение об ошибке остается пустым. Это может сбивать с толку пользователей и создавать неправильное впечатление о работе сайта.
Предложенное решение
-
Персонализированное сообщение об ошибке: Использование фильтра
login_errors
позволяет вам модифицировать сообщение, которое отображается, если пользователь пытается войти в систему, будучи уже авторизованным.Вот пример кода, добавляющего понятное сообщение об ошибке:
add_filter('login_errors', 'custom_login_error_message'); function custom_login_error_message($error) { if (is_user_logged_in()) { return __('Вы уже вошли в систему.', 'text-domain'); } return $error; }
Это сообщение более информативно и помогает избежать путаницы у пользователей.
-
Перенаправление авторизованных пользователей: Вместо того чтобы просто отображать сообщение, разумнее перенаправлять пользователей, которые уже вошли в систему, на соответствующую страницу. Таким образом, пользователи с ролью администратора могут сразу попасть в свою панель управления.
Пример кода для перенаправления:
add_action('login_head', 'redirect_logged_in_users'); function redirect_logged_in_users() { if (is_user_logged_in()) { wp_redirect(admin_url()); exit; } }
В этом коде проверяется, авторизован ли пользователь, и если это так, происходит перенаправление на админ-панель.
Расширение функционала
Вы можете дополнительно настроить логику перенаправления в зависимости от роли пользователя. Например, отправлять администраторов на панель управления, а подписчиков на главную страницу. Пример кода для этой задачи:
add_action('login_head', 'custom_redirect_based_on_role');
function custom_redirect_based_on_role() {
if (is_user_logged_in()) {
$user = wp_get_current_user();
if (in_array('administrator', (array) $user->roles)) {
wp_redirect(admin_url());
} else {
wp_redirect(home_url());
}
exit;
}
}
Вывод
На первый взгляд, проблема с повторным входом системы может показаться малозначительной, но она может существенно повлиять на пользовательский опыт. Персонализированные сообщения об ошибках и правильное перенаправление пользователей помогут значительно улучшить удобство работы с сайтом.
Мы надеемся, что предложенные решения станут вам полезны. Если проблема останется нерешенной, рассмотрите возможность обращения к разработчикам, чтобы они могли дать более детальный анализ текущей конфигурации вашего сайта.