Как показать ошибки в форме входа?
Форма входа из ядра, но на кастомной странице
<?php $args = array( 'echo' => true, 'redirect' => site_url( $_SERVER['REQUEST_URI'] ), 'form_id' => 'loginform', 'label_username' => __( "Nom d'utilisateur ou email" ), 'label_password' => __( 'Password' ), 'label_remember' => __( 'Remember Me' ), 'label_log_in' => __( 'Log In' ), 'id_username' => 'user_login', 'id_password' => 'user_pass', 'id_remember' => 'rememberme', 'id_submit' => 'wp-submit', 'remember' => false, 'value_username' => NULL, 'value_remember' => false ); wp_login_form( $args );?> |
<?php $args = array( 'echo' => true, 'redirect' => site_url( $_SERVER['REQUEST_URI'] ), 'form_id' => 'loginform', 'label_username' => __( "Nom d'utilisateur ou email" ), 'label_password' => __( 'Password' ), 'label_remember' => __( 'Remember Me' ), 'label_log_in' => __( 'Log In' ), 'id_username' => 'user_login', 'id_password' => 'user_pass', 'id_remember' => 'rememberme', 'id_submit' => 'wp-submit', 'remember' => false, 'value_username' => NULL, 'value_remember' => false ); wp_login_form( $args );?>
Релиректы, чтобы при входе и выходе оставаться на той же странице
add_action('wp_logout','auto_redirect_after_logout'); function auto_redirect_after_logout(){ wp_safe_redirect( home_url('/ebibliotheque/') ); exit; } function wpdocs_my_login_redirect( $url, $request, $user ) { if ( $user && is_object( $user ) && is_a( $user, 'WP_User' ) ) { $url = home_url( '/ebibliotheque/' ); } return $url; } add_filter( 'login_redirect', 'wpdocs_my_login_redirect', 10, 3 ); 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' ); exit; } } |
add_action('wp_logout','auto_redirect_after_logout'); function auto_redirect_after_logout(){ wp_safe_redirect( home_url('/ebibliotheque/') ); exit; } function wpdocs_my_login_redirect( $url, $request, $user ) { if ( $user && is_object( $user ) && is_a( $user, 'WP_User' ) ) { $url = home_url( '/ebibliotheque/' ); } return $url; } add_filter( 'login_redirect', 'wpdocs_my_login_redirect', 10, 3 ); 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' ); exit; } }
До того, как добавить последний редирект, переносило при введении неправильного пароля на wp-login.php.
Сейчас не переносит, но мне нужно показывать ошибки, что неверный логин или пароль. Сейчас ссылка превращается в site.com/ebibliotheque/?login=failed, но ошибок вообще нет. Если форма из ядра, то можно как-то и ошибки показать из ядра? Как прописать их?
Дополнительно:
ну так Вы передали GET параметр(login=failed).... проверьте его наличие и выдайте ошибку
let url = window.location.href; if(url.includes('?login=failed')){ jQuery('.forms-wrapper.d-flex').prepend("<div id='login_error'><strong>ERREUR</strong>: Le nom d'utilisateur ou le mot de passe est incorrect. </div>"); } |
let url = window.location.href; if(url.includes('?login=failed')){ jQuery('.forms-wrapper.d-flex').prepend("<div id='login_error'><strong>ERREUR</strong>: Le nom d'utilisateur ou le mot de passe est incorrect. </div>"); }
Не знаю - так правильно или надо проверку из ядра?(если да -где ее взять?)
if ( !empty($referrer) && !strstr($referrer,'wp-login') && !strstr($referrer,'wp-admin') ) { |
if ( !empty($referrer) && !strstr($referrer,'wp-login') && !strstr($referrer,'wp-admin') ) {
проверку на некую переменную эрор, а также в самом template проверить get параметр, и, если он есть выводить разметку...
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
wp_login_form()только выводит форму. Ошибки входа он сам в шаблон не вставляет. Если форма находится на кастомной странице, нужно перехватить неудачный логин, вернуть пользователя обратно и вывести сообщение через query arg или transient.Простой вариант через редирект:
add_action('wp_login_failed', function ($username) { $redirect = wp_get_referer(); if (! $redirect) { $redirect = home_url('/login/'); } wp_safe_redirect(add_query_arg('login', 'failed', $redirect)); exit; }); add_filter('authenticate', function ($user, $username, $password) { if ($username === '' || $password === '') { $redirect = wp_get_referer() ?: home_url('/login/'); wp_safe_redirect(add_query_arg('login', 'empty', $redirect)); exit; } return $user; }, 30, 3);
В шаблоне кастомной страницы перед формой:
<?php if (isset($_GET['login']) && $_GET['login'] === 'failed') : ?> <div class="login-error">Неверный логин или пароль.</div> <?php elseif (isset($_GET['login']) && $_GET['login'] === 'empty') : ?> <div class="login-error">Заполните логин и пароль.</div> <?php endif; ?> <?php wp_login_form($args); ?>
Для безопасности не выводите пользователю точную причину «такого пользователя нет» или «пароль неверный». Это помогает подбирать логины. Лучше общее сообщение: «Неверный логин или пароль».
Также проверьте
redirectв аргументах формы. Если после успешного входа нужно вернуться на текущую страницу, используйте:'redirect' => esc_url($_SERVER['REQUEST_URI']),
Но если страница логина закрыта от авторизованных пользователей редиректом, лучше направлять в личный кабинет, чтобы не получить странный цикл переходов.