让WordPress支持用Email登录

日期: 标签:WordPress教程 39 条留言
如需帮忙改代码,或者WordPress二次开发、PHP网站建设等需求,可联系我购买付费服务:  点此联系我

默认状态下,WordPress登录页面只支持使用用户名进行登录。如果想让用户用Email也可以登录,那就将以下代码复制到当前主题的functions.php中:

// 修改WordPress用户名过滤机制,通过Email获取用户名
function ludou_allow_email_login($username, $raw_username, $strict) {
  if (filter_var($raw_username, FILTER_VALIDATE_EMAIL)) {
    $user_data = get_user_by('email', $raw_username);
    
    if (empty($user_data))
      wp_die(__('<strong>ERROR</strong>: There is no user registered with that email address.'), '用户名不正确');
    else
      return $user_data->user_login;
  }
  else {
    return $username;
  }
}

// 修改登录界面的文字,"用户名"改成"用户名或邮箱"
function ludou_change_text() {
  echo '<script type="text/javascript">
                var user_login_node = document.getElementById("user_login");
                var old_username_text = user_login_node.parentNode.innerHTML;
                user_login_node.parentNode.innerHTML = old_username_text.replace(/用户名/, "用户名或邮箱");
      </script>';
}

if (in_array($GLOBALS['pagenow'], array('wp-login.php')) && strpos($_SERVER['REQUEST_URI'], '?action=register') === FALSE && strpos($_SERVER['REQUEST_URI'], '?action=lostpassword') === FALSE && strpos($_SERVER['REQUEST_URI'], '?action=rp') === FALSE ) {
  add_filter('sanitize_user', 'ludou_allow_email_login', 10, 3);
  add_action('login_footer', 'ludou_change_text');
}

     注意:以上代码只对登录页面有效,效果如下:

让WordPress支持用Email登录

-- 完 --

本文采用 「CC BY-NC-SA 4.0」创作共享协议,转载请标注以下信息:
原文出处:露兜博客 https://www.ludou.org/wordpress-login-with-usernam-or-email.html
露兜
kaapass@outlook.com  QQ 825533758

业余编程爱好者,主业是淘宝店主,卖些工艺品,感兴趣可以到我的淘宝店看看(旺旺不提供技术咨询):西西弗sisyphe

39 条留言

点此留言
1 2 584
  1. 有事没事百度一下

    大神你好,我想要实现用户名、邮箱、电话任意一个可以登录(电话是自己加的一个字段phone,存在usermeta里)
    //登录
    function user_login_action(){
    $account=$_REQUEST['account']; //用户名|邮箱|电话
    $password=$_REQUEST['password'];
    if(!is_user_logged_in()){
    $login_data = array();
    $login_data['user_login']=$account;
    $login_data['user_password']=$password;
    $login_data['remember'] = 'true';
    $user_verify = wp_signon($login_data, false);
    if (is_wp_error($user_verify)) {
    echo 0;
    } else {
    echo 1;
    wp_set_auth_cookie($user_verify->ID);
    }
    die();
    }
    }

    • 露兜

      @有事没事百度一下 通过编写SQL来查询usermeta中电话号码对应的user id,进而获取到user_login字段值,然后在你那个函数中传递到 $login_data['user_login']

1 2

发表留言