当前位置:首页 > CMS教程 > WordPress > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2014-06-21 13:43:39 浏览: 评论:0 

wordpress中默认中能是英文用户名登录了,以前有介绍过修改它可以中文用户名,下面我再来介绍几种修改可以是邮箱登陆的例子,都是在functions.php函数中处理.

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

  1. function email_address_login($username) { 
  2. $user = get_user_by_email($username); 
  3. if(!emptyempty($user->user_login)) 
  4. $username = $user->user_login; 
  5. return $username
  6. add_action('wp_authenticate','email_address_login'); 

这样就大功告成了,但是由于wp登陆页面中的提示文本是输入用户名,所以同时你总得让你网站的注册用户知道你现在支持邮箱登陆了吧,打开'wp-login.php',搜索代码:

  1. <p> 
  2. <label for="user_login"><?php _e('用户名') ?><br /> 
  3. <input type="text" name="log" id="user_login" class="input" value="<?php echo esc_attr($user_login); ?>" size="20" tabindex="10" /></label> 
  4. </p> 
  5. //把它修改成 
  6. <p> 
  7. <label for="user_login"><?php _e('用户名或邮箱地址') ?><br /> 
  8. <input type="text" name="log" id="user_login" class="input" value="<?php echo esc_attr($user_login); ?>" size="20" tabindex="10" /></label> 
  9. </p> 

大功告成.只是唯一的缺点就是你一旦升级就会覆盖修改后的'wp-login.php'文件.上面的做法其实可以用一段代码来代替,代码如下:

  1. // 修改WordPress用户名过滤机制,通过Email获取用户名 
  2. function ludou_allow_email_login($username$raw_username$strict) { 
  3.   if (filter_var($raw_username, FILTER_VALIDATE_EMAIL)) { 
  4.     $user_data = get_user_by('email'$raw_username); 
  5.  
  6.     if (emptyempty($user_data)) 
  7.       wp_die(__('<strong>ERROR</strong>: There is no user registered with that email address.'), '用户名不正确'); 
  8.     else 
  9.       return $user_data->user_login; 
  10.   } 
  11.   else { 
  12.     return $username
  13.   } 
  14. // 修改登录界面的文字,"用户名"改成"用户名或邮箱" 
  15. function ludou_change_text() { 
  16.   echo '<script type="text/javascript"
  17.                 var user_login_node = document.getElementById("user_login"); 
  18.                 var old_username_text = user_login_node.parentNode.innerHTML; 
  19.                 user_login_node.parentNode.innerHTML = old_username_text.replace(/用户名/, "用户名或邮箱"); 
  20.       </script>'; 
  21. 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 ) { 
  22.   add_filter('sanitize_user''ludou_allow_email_login', 10, 3); 
  23.   add_action('login_footer''ludou_change_text'); 

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

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

  1. //让WordPress支持用户名或邮箱登录 
  2. function dr_email_login_authenticate( $user$username$password ) { 
  3.  if ( is_a$user'WP_User' ) ) 
  4.   return $user
  5.  
  6.  if ( !emptyempty$username ) ) { 
  7.   $username = str_replace'&''&'stripslashes$username ) ); 
  8.   $user = get_user_by( 'email'$username ); 
  9.   if ( isset( $user$user->user_login, $user->user_status ) && 0 == (int) $user->user_status ) 
  10.    $username = $user->user_login; 
  11.  } 
  12.  
  13.  return wp_authenticate_username_password( null, $username$password ); 
  14. remove_filter( 'authenticate''wp_authenticate_username_password', 20, 3 ); 
  15. add_filter( 'authenticate''dr_email_login_authenticate', 20, 3 ); 
  16.  
  17. //替换“用户名”为“用户名 / 邮箱” 
  18. function username_or_email_login() { 
  19.  if ( 'wp-login.php' != basename$_SERVER['SCRIPT_NAME'] ) ) 
  20.   return
  21.  
  22.  ?><script type="text/javascript"
  23.  // Form Label 
  24.  if ( document.getElementById('loginform') ) 
  25.   document.getElementById('loginform').childNodes[1].childNodes[1].childNodes[0].nodeValue = '<?php echo esc_js( __( '用户名/邮箱', 'email-login' ) ); ?>'
  26.  
  27.  // Error Messages 
  28.  if ( document.getElementById('login_error') ) 
  29.   document.getElementById('login_error').innerHTML = document.getElementById('login_error').innerHTML.replace( '<?php echo esc_js( __( '用户名' ) ); ?>''<?php echo esc_js( __( '用户名/邮箱' , 'email-login' ) ); ?>' ); 
  30.  </script><?php 
  31. add_action( 'login_form''username_or_email_login' ); 

Tags: wordpress用户名 邮箱登陆

分享到: