以前、同じ機能のプラグインをご紹介
したんですけど、もっと簡単なコード
で実装できるみたいなので改めて備忘
録。ログイン名を忘れてしまう方も
少なくないのでメールアドレスでも
ログイン出来ると親切ですね。

以前紹介したプラグインは下記になります。

ユーザーIDでも登録したメールアドレスでもログイン出来るようにするWordPressプラグイン・WP Email Login

今日のコードはもう少しシンプルなものになります。

コード

下記をfunctions.phpに追記します。

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

get_user_by()はユーザー情報の一部で検索してマッチしたユーザー名を返す関数です。これにメールアドレスを含める。wp_authenticateはログイン認証時に実行するアクションフックですね。

尚、検索出来るユーザー情報はID、ログイン名、メールアドレス、ユーザースラッグの4つです。

テキストも変更してあげる

メールアドレスでもログイン出来る旨をログインフォームに書いてあげないと意味が無いのでテキストを変更。

function change_username_text($text){
       if(in_array($GLOBALS['pagenow'], array('wp-login.php'))){
         if ($text == 'ユーザー名'){$text = 'ユーザー名 又は メールアドレス';}
            }
                return $text;
         }
add_filter( 'gettext', 'change_username_text' );

メールアドレスだけにしたい場合は・・IDでログインできないようにするのは危険なので以下のようにして逃げる方が安全ですね。

 if ($text == 'ユーザー名'){$text = 'メールアドレス';}

動作テスト


メールアドレスでログイン出来ました。※キャプチャはダミーアドレスです

via:bavotasan