WordPress添加自定义登录身份验证

WordPress添加自定义登录身份验证,wordpress,authentication,Wordpress,Authentication,我在注册时添加了自定义字段,允许用户输入自己的密码,还创建了代码来生成验证代码,然后通过电子邮件发送给用户。当然,用户需要单击电子邮件中的链接才能登录 这就是我被困的地方。我正在尝试添加我自己的身份验证,以在用户尝试登录时检查验证的状态 这是我的代码,它不起作用 function check_validation_status($username) { $user = get_user_by('login', $username); $userID = $user->ID;

我在注册时添加了自定义字段,允许用户输入自己的密码,还创建了代码来生成验证代码,然后通过电子邮件发送给用户。当然,用户需要单击电子邮件中的链接才能登录

这就是我被困的地方。我正在尝试添加我自己的身份验证,以在用户尝试登录时检查验证的状态

这是我的代码,它不起作用

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');
如果用户未经验证,此代码将直接成功地将其记录下来,但是它不会向用户显示任何形式的错误,用户只会直接被重定向回登录页面


让用户登录但直接退出似乎是一种草率的做法,有没有办法首先阻止登录?

我现在已经设法解决了这个问题。相反,我需要连接到wp_authenticate_user并返回wp_错误。这是我的工作代码,我希望它能在将来帮助别人

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);

我现在已经设法解决了这个问题。相反,我需要连接到wp_authenticate_user并返回wp_错误。这是我的工作代码,我希望它能在将来帮助别人

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);