我希望使用电子邮件登录,而不是使用用户名WordPress前端

时间:2015-10-06 作者:user3811650

对于登录,我希望允许用户使用电子邮件而不是用户名。到目前为止,我得到的是:

remove_filter(\'authenticate\', \'wp_authenticate_username_password\', 20);
function login_with_email_address($username) {
    $user = get_user_by_email($username);
    if(!empty($user->user_login))
        $username = $user->user_login;
    return $username;
}
add_action(\'wp_authenticate\',\'login_with_email_address\');
其结果是出现以下错误消息:

“用户名或密码无效。请重试!”

1 个回复
SO网友:Ravinder Kumar

您的代码有一些问题:

您正在使用不推荐使用的函数get_user_by_emailwp_authenticate您可以使用此插件https://wordpress.org/plugins/wp-email-login/

您可以使用此代码

function wpsc_authenticate_user_by_email( $user, $username, $password ) {


    // Bailout
    if( ! is_frontend_login_form() ){
       return $user;
    }

    $login_page  = strtok( $_SERVER["HTTP_REFERER"], \'?\' );

    //check for valid inputs
    if( $username == "" || $password == "" ) {
        wp_redirect( $login_page . "?login=empty" );
        exit;
    }

    // get user by email
    if ( is_email( $username ) ) {
        $user =  get_user_by( \'email\', $username );

        // validate user
        if ( $user && wp_check_password( $password, $user->user_pass, $user->ID ) ) {
            return $user;
        }else{
            wp_redirect( $login_page . \'?login=failed\' );
            exit;
        }
    }else{
        wp_redirect( $login_page . \'?login=failed\' );
        exit;
    }


    return $user;
}

add_filter( \'authenticate\', \'wpsc_authenticate_user_by_email\', 1, 3 );
在中定义条件is_frontend_login_form() 检查用户是否来自前端表单。

相关推荐

如何筛选/钩入检索密码()以筛选$_POST[‘USER_LOGIN’]?

我正在开发一个网站,其中用户名是一个文件编号,称为CPF(将其视为国家ID),该网站具有以下掩码:000.000.000-00 我将用户名存储为普通数字,但我们所有的表单都必须有上面的掩码,这反过来使其_POST[\'user_login\'] 总是带着破折号和圆点。这是用户登录/用户名的示例:$_POST[\'user_login\'] = \'123.456.789-00\' $actual_username_ondb = \'12345678900\' 这对于登录来说不