wordpress用户名允许使用邮箱登陆方法
wordpress中默认中能是英文用户名登录了,以前有介绍过修改它可以中文用户名,下面我再来介绍几种修改可以是邮箱登陆的例子,都是在functions.php函数中处理.
在functions.php里加入下面的代码:
function email_address_login( $username ) { $user = get_user_by_email( $username ); if (! empty 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> //把它修改成 <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'文件.上面的做法其实可以用一段代码来代替,代码如下:
// 修改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 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 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' );查看更多关于wordpress用户名允许使用邮箱登陆方法 - WordPress的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did9005