Предотвращение перенаправления wp_login_form() в wp-admin при ошибках
Я создал форму входа на фронтенде сайта с помощью wp_login_form(). Однако когда пользователь вводит неправильное имя пользователя/пароль, его перенаправляет на форму входа wp-admin.
Как можно вместо этого отображать сообщения об ошибках над формой входа? В идеале, я не хочу, чтобы пользователь когда-либо видел административный раздел WordPress.
Я пробовал использовать хук redirect_invalid_login(), но это, похоже, не работает?
Просто добавьте следующий код в ваш файл function.php. Он будет перенаправлять пользователя обратно на страницу, с которой была отправлена форма входа.
add_action( 'wp_login_failed', 'my_front_end_login_fail' ); // хуки для неудачного входа
function my_front_end_login_fail( $username ) {
$referrer = $_SERVER['HTTP_REFERER']; // откуда пришёл запрос на вход?
// если есть валидный реферер и это не стандартный экран входа
if ( !empty($referrer) && !strstr($referrer,'wp-login') && !strstr($referrer,'wp-admin') ) {
wp_redirect( $referrer . '?login=failed' ); // добавляем параметр (login=failed) к URL для использования в теме
exit;
}
}
как мы можем получать ошибки типа неверный пароль или неверное имя пользователя и т.д...???
vrajesh
Лучшей практикой является показ не конкретной ошибки, а чего-то вроде "неверные учетные данные". Показ "неверный пароль" означает, что пользователь существует на этом сайте, и это на одну вещь меньше для угадывания (а само знание того, что email зарегистрирован на каком-то сайте, может быть проблемой конфиденциальности). Если вы показываете "неверный пароль", то это означает, что какой-то пользователь на этом сайте использует этот пароль, что не идеально. А чтобы получить информацию о том, что произошла ошибка, вы можете проверить, если $_GET['login'] == 'failed'.
idFlood
Ты знаешь, что это исправляет проблему, но всё равно ломается, если не вводить никаких данных.
Мне очень не нравится использовать functions.php.
Хотелось бы что-то вроде index.php, но по каким-то причинам это пока невозможно. Нужно более элегантное решение.
Форма входа "Essentials Addons" для Elementor, кажется, исправляет все проблемы, если ты используешь Elementor. Это единственное, что действительно работает как надо. Хорошо, что она бесплатная.