我在注册时添加了自定义字段,允许用户输入自己的密码,并创建代码以生成验证码,然后通过电子邮件发送给用户。当然,用户需要先点击电子邮件中的链接才能登录。
这里是我被困的地方。我正在尝试添加自己的身份验证,以便在用户尝试登录时检查验证状态。
这是我的代码,它不起作用;
function check_validation_status($username) {
$user = get_user_by('login', $username);
$userID = $user->ID;
$status = get_user_meta($userID, 'verified', true);
if($status == '0') {
return;
}
}
add_action('wp_authenticate', 'check_validation_status');
不幸的是,这段代码似乎没有做任何事情。我也尝试过以下内容(挂钩进行不同的操作)
function check_validation_status($username) {
$user = get_user_by('login', $username);
$userID = $user->ID;
$status = get_user_meta($userID, 'verified', true);
if($status == '0') {
wp_logout(); // works but doesn't show an error :(
}
}
add_action('wp_login', 'check_validation_status');
如果用户未经过验证,此代码会成功记录用户,但是如果用户没有显示任何形式的错误,他们只会直接重定向到登录页面。
记录用户但直接退出似乎是一种草率的方式,有没有办法防止首先登录?
答案 0 :(得分:4)
我现在设法解决了这个问题。我需要挂钩到wp_authenticate_user并返回一个WP_Error。这是我的工作代码,我希望将来可以帮助某人。
function check_validation_status($user, $password) {
$userID = $user->ID;
$status = get_user_meta($userID, 'verified', true);
if($status == '0') {
$errors = new WP_Error();
$errors->add('title_error', __('<strong>ERROR</strong>: This account has not been verified.', 'podium'));
return $errors;
}
return $user;
}
add_action('wp_authenticate_user', 'check_validation_status', 10, 2);