Wordpress自定义登录错误取决于该用户的高级自定义字段是否设置为true



我有一个独特的问题。我迁移了一个网站,并在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');

我认为问题是用户名没有传递给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/

相关内容

最新更新