我想在 wordpress 中使用用户名、电子邮件 ID 和电话号码登录

Har*_*rsh 3 php ajax wordpress

我想用用户名、电子邮件 ID 和电话号码登录 wordpress。我在用户注册时在 User meta 中插入电话号码。是否有任何钩子可以访问用户元并使用登录密码验证它。 https://wordpress.org/plugins/wp-email-login/
我开始知道这个插件用于登录时的用户名和电子邮件 ID 验证。因此,我可以使用用户名和电子邮件 ID 登录,但我的主要问题是用户元表中的电话号码。

Pra*_*Rao 6

试试这个:

我们需要做的第一件事是删除默认的身份验证权限。将以下代码段添加到您的 functions.php 文件中:

//remove wordpress authentication
remove_filter('authenticate', 'wp_authenticate_username_password', 20);
Run Code Online (Sandbox Code Playgroud)

接下来,我们将添加我们自己的身份验证。为此,我们将使用 add_filter。

将以下代码添加到您的 functions.php 文件中:

add_filter('authenticate', function($user, $email, $password){

    //We shall SQL escape all inputs
    $user_phone = $wpdb->escape($_REQUEST['user_phone']);
    $password   = $wpdb->escape($_REQUEST['password']);

    //Check for empty fields
        if(empty($user_phone) || empty ($password)){        
            //create new error object and add errors to it.
            $error = new WP_Error();

            if(empty($user_phone)){ //No email
                $error->add('empty_phone', __('<strong>ERROR</strong>: Phone field is empty.'));
            }
            if(empty($password)){ //No password
                $error->add('empty_password', __('<strong>ERROR</strong>: Password field is empty.'));
            }

            return $error;
        }

        //Check if user exists in WordPress database
        //$user = get_user_by('email', $email);
        //Instead of the above one use this 
        $user = reset(
                     get_users(
                      array(
                       'meta_key' => 'user_phone',
                       'meta_value' => $user_phone,
                       'number' => 1,
                       'count_total' => false
                      )
                     )
                    );

        //bad email
        if(!$user){
            $error = new WP_Error();
            $error->add('invalid', __('<strong>ERROR</strong>: Either the phone or password you entered is invalid.'));
            return $error;
        }
        else{ //check password
            if(!wp_check_password($password, $user->user_pass, $user->ID)){ //bad password
                $error = new WP_Error();
                $error->add('invalid', __('<strong>ERROR</strong>: Either the phone or password you entered is invalid.'));
                return $error;
            }else{
                return $user; //passed
            }
        }
}, 20, 3);
Run Code Online (Sandbox Code Playgroud)

这次的表格应该是:

当然,如果你想要一个输入字段,那么它可以完成。但是您需要决定如何选择要执行的验证电话号码、电子邮件地址或用户名

<form id="login" name="form" action="<?php echo home_url(); ?>/login/" method="post">
        <input id="user_phone" type="text" placeholder="Phone Number" name="user_phone">
        <input id="password" type="password" placeholder="Password" name="password">
        <input id="submit" type="submit" name="submit" value="Submit">
</form>
Run Code Online (Sandbox Code Playgroud)