使用电话号码登录WordPress

时间:2018-05-12 作者:abdelrhman kouta

这是我正在使用的代码

首先,我删除了Wordpress身份验证

remove_filter(\'authenticate\', \'wp_authenticate_username_password\', 20);
然后我添加了自己的身份验证

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

    $phone = $wpdb->escape($_REQUEST[\'phone\']);
    $password   = $wpdb->escape($_REQUEST[\'password\']);

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

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

        return $error;
    }

    $user = reset(
                 get_users(
                  array(
                   \'meta_key\' => \'phone\',
                   \'meta_value\' => $phone,
                   \'number\' => 1,
                   \'count_total\' => false
                  )
                 )
                );

    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);
最后是我的HTML表单

<form id="login" name="form" action="<?php echo wp_login_url(); ?>" method="post">
    <input id="phone" type="text" placeholder="Phone Number" name="phone">
    <input id="password" type="password" placeholder="Password" name="password">
    <input id="submit" type="submit" name="submit" value="Submit">
</form>
它似乎不起作用。我输入了正确的电话号码和密码,但我只需要重新加载页面。有什么帮助或意见吗?

2 个回复
SO网友:Mark Kaplun

Wordpress“登录”过程假定给定了用户名。如果没有用户名,则无需进行身份验证,很可能根本无法访问您的代码。如果您想拥有自己的表单,只需编写自己的身份验证。

您可以遵循的另一条路径是将“normal”表单中用户字段的标签更改为“phone”,而不替换HTML本身中的任何其他内容。如果这样做,则应触发所有预期的过滤器和操作,并且代码更有可能工作。

SO网友:abdelrhman kouta

我做到了。问题是我在访问$wpdb时,没有首先在函数中全局调用它,非常感谢

结束

相关推荐

添加筛选器LOGIN_REDIRECT不包含原始请求的重定向

我链接到WP的登录页传递:redirect\\u to=play。。。ttp://www.my.com/wp-login.php/?redirect_to=play“>单击此处。。。我使用该值(在本例中为:play)作为标志,而不是实际的重定向url,因为我使用以下方法拦截重定向请求: function my_login_redirect($redirect_to, $requested_redirect_to, $user) { var_dump($redirect