wordpress中默認中能是英文用戶名登錄了,以前有介紹過修改它可以中文用戶名,下面我再來介紹幾種修改可以是郵箱登陸的例子,都是在functions.php函數(shù)中處理.
在functions.php里加入下面的代碼:
- function email_address_login($username) {
- $user = get_user_by_email($username);
- if(!emptyempty($user->user_login))
- $username = $user->user_login;
- return $username;
- }
- add_action('wp_authenticate','email_address_login');
這樣就大功告成了,但是由于wp登陸頁面中的提示文本是輸入用戶名,所以同時你總得讓你網(wǎng)站的注冊用戶知道你現(xiàn)在支持郵箱登陸了吧,打開'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 (emptyempty($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內(nèi)就可以了.
另一個方法:將下面的代碼添加到當前主題的 functions.php 文件即可:
- //讓WordPress支持用戶名或郵箱登錄
- function dr_email_login_authenticate( $user, $username, $password ) {
- if ( is_a( $user, 'WP_User' ) )
- return $user;
- if ( !emptyempty( $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' );
新聞熱點
疑難解答
圖片精選