Пользовательские ошибки входа Wordpress в зависимости от того, задано ли для этого пользователя расширенное настраиваемое поле. - PullRequest
0 голосов
/ 02 января 2019

У меня какая-то уникальная проблема. Я перенес веб-сайт и перестроил его на WordPress. Некоторые пользователи, которые были перенесены через пароли, не были перенесены вместе с ними. Поэтому для всех старых пользователей я добавил расширенное настраиваемое поле с именем «password_reset» и установил его значение true для всех старых пользователей.

То, что я пытаюсь сделать, это показать специальное сообщение для этих пользователей, которое говорит что-то вроде «мы обновили наш сайт, пожалуйста, оставьте свой пароль со ссылкой для сброса».

Я добавил приведенный ниже код для функции в файле functions.php

//if migrated user needs to reset password
$username = $_POST['username'];
if (username_exists( $username ) && get_field(  'password_reset', 'user_'.$uid  ) ) {

    $error= 'Please reset your password. To reset your password <a href=" '. wp_lostpassword_url( home_url() ) . ' ">click here</a>.';

}

return $error;

, поскольку пользователь еще не вошел в систему, когда ему нужно получить эту ошибку, я пытаюсь использовать username_exists (username). По сути, мне нужно определить, существует ли уже имя пользователя, и если это имя пользователя проверено в поле acf "password_reset". Пока мне не повезло, любая помощь будет высоко ценится.

ОБНОВЛЕНИЕ: вот моя последняя версия: сообщения о неверном имени пользователя и неверном пароле работают, просто не могу заставить его работать с именами пользователей, которые содержат значение acf

function my_custom_error_messages() {
global $errors;
$err_codes = $errors->get_error_codes();

// Invalid username.
if ( in_array( 'invalid_username', $err_codes ) ) {
    $error = '<strong>ERROR</strong>: Invalid username.';
}

// Incorrect password.
if ( in_array( 'incorrect_password', $err_codes ) ) {
    $error = '<strong>ERROR</strong>: The password you entered is incorrect.';

    if (username_exists( $username ) && get_field(  'password_reset', 'user_'.$uid  ) ) {

    $error= 'Please reset your password. To reset your password <a href=" '. wp_lostpassword_url( home_url() ) . ' ">click here</a>.';

    }
}

return $error;

}

add_filter ('login_errors', 'my_custom_error_messages');

1 Ответ

0 голосов
/ 03 января 2019

Я считаю, что проблема в том, что имя пользователя не передается в фильтр login_errors. Единственные данные, доступные в этом фильтре, - это сообщение об ошибке, которое передается (точных данных об учетных записях пользователей нет вообще).

Я нашел другую ссылку, которая может пролить свет на способ предоставления настраиваемого сообщения об ошибке без использования этого фильтра. Попробуйте использовать фильтр wp_authenticate_user вместо:

Ссылка на кодекс WordPress

https://codex.wordpress.org/Plugin_API/Filter_Reference/wp_authenticate_user

Справочник по применению кода

https://backups.nl/internet/wordpress-revealing-username-login-trial-error/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...