wordpress用户名允许使用邮箱登陆方法

有两种方法呢,

当然,我是肯定只说用代码的那种啦~

在'functions.php'里加入下面的代码

 代码如下 复制代码

function email_address_login($username) {
$user = get_user_by_email($username);
if(!empty($user->user_login))
$username = $user->user_login;
return $username;
}
add_action('wp_authenticate','email_address_login');

这样就大功告成了

但是由于wp登陆页面中的提示文本是输入用户名

所以同时你总得让你网站的注册用户知道你现在支持邮箱登陆了吧

打开'wp-login.php'

搜索代码

 代码如下 复制代码

<p>
<label for="user_login"><?php _e('用户名') ?><br />
<input type="text" name="log" id="user_login" class="input" value="<?php echo esc_attr($user_login); ?>" size="20" tabindex="10" /></label>
</p> www.111cn.net

 把它修改成

<p>
<label for="user_login"><?php _e('用户名或邮箱地址') ?><br />
<input type="text" name="log" id="user_login" class="input" value="<?php echo esc_attr($user_login); ?>" size="20" tabindex="10" /></label>
</p>

 大功告成啦。

只是唯一的缺点就是你一旦升级就会覆盖修改后的'wp-login.php'文件。

嘛。上面的做法其实可以用一段代码来代替

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

 同样,添加到functions.php内就可以了~

方法三  将下面的代码添加到当前主题的 functions.php 文件即可

 代码如下 复制代码

//让WordPress支持用户名或邮箱登录
function dr_email_login_authenticate( $user, $username, $password ) {
 if ( is_a( $user, 'WP_User' ) )
  return $user;
 
 if ( !empty( $username ) ) {
  $username = str_replace( '&', '&', stripslashes( $username ) );
  $user = get_user_by( 'email', $username );
  if ( isset( $user, $user->user_login, $user->user_status ) && 0 == (int) $user->user_status )
   $username = $user->user_login;
 }
 
 return wp_authenticate_username_password( null, $username, $password );
}
remove_filter( 'authenticate', 'wp_authenticate_username_password', 20, 3 );
add_filter( 'authenticate', 'dr_email_login_authenticate', 20, 3 );
 
//替换“用户名”为“用户名 / 邮箱”
function username_or_email_login() {
 if ( 'wp-login.php' != basename( $_SERVER['SCRIPT_NAME'] ) )
  return;
 
 ?><script type="text/javascript">
 // Form Label
 if ( document.getElementById('loginform') )
  document.getElementById('loginform').childNodes[1].childNodes[1].childNodes[0].nodeValue = '<?php echo esc_js( __( '用户名/邮箱', 'email-login' ) ); ?>';
 
 // Error Messages
 if ( document.getElementById('login_error') )
  document.getElementById('login_error').innerHTML = document.getElementById('login_error').innerHTML.replace( '<?php echo esc_js( __( '用户名' ) ); ?>', '<?php echo esc_js( __( '用户名/邮箱' , 'email-login' ) ); ?>' );
 </script><?php
}
add_action( 'login_form', 'username_or_email_login' );

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值