2026年9月5日
2026年9月5日
WordPressでメールアドレスでログインする方法|標準機能の仕組みとログインできないときの確認
WordPressは、バージョン4.5から、ログイン画面でユーザー名の代わりにメールアドレスを入力してもログインできるようになっています。ログイン画面の入力欄の名前が「ユーザー名またはメールアドレス」になっているのはこのためです。メールアドレスでログインできるようにするためのプラグインは必要ありません。
この記事では、この標準機能の仕組み、メールアドレスでログインできないときの確認方法、ログイン方法をメールアドレスだけ(またはユーザー名だけ)に制限する方法を説明します(WordPress 6.9 のソースコードで確認、2026年10月時点)。
標準のログインの仕組み
WordPressのログイン処理は、authenticate フィルターに登録された関数が順に、入力された値を確かめる仕組みです。WordPress本体は、次の関数を登録しています(wp-includes/default-filters.php)。
<?php
add_filter( 'authenticate', 'wp_authenticate_username_password', 20, 3 );
add_filter( 'authenticate', 'wp_authenticate_email_password', 20, 3 );
add_filter( 'authenticate', 'wp_authenticate_application_password', 20, 3 );
add_filter( 'authenticate', 'wp_authenticate_spam_check', 99 );
wp_authenticate_username_password:入力をユーザー名として調べるwp_authenticate_email_password:入力がメールアドレスの形式なら、メールアドレスとして調べるwp_authenticate_application_password:REST API や XML-RPC で使うアプリケーションパスワードを調べる
WordPressは、同じメールアドレスを複数のユーザーに登録できないようにしているので、メールアドレスから1人のユーザーが決まります。ユーザーのメールアドレスを変えると、ログインに使えるメールアドレスも変わります。
メールアドレスでログインできないときの確認
1. そのメールアドレスが登録されているか
管理画面の「ユーザー」→「ユーザー一覧」で、ユーザーのメールアドレスを確認します。WP-CLI が使える場合は、メールアドレスからユーザー名を調べられます。
wp user get user@example.com --field=user_login
ユーザーが見つからない場合はエラーになります。ログイン画面でも、登録されていないメールアドレスを入力すると「不明なメールアドレスです」という趣旨のエラーが表示されます(英語では Unknown email address. Check again or try your username.)。
2. メールアドレスでのログインが無効にされていないか
プラグインやテーマのコードが wp_authenticate_email_password を外していると、メールアドレスではログインできません。次のコマンドで、登録されているかを確認できます。
wp eval 'var_dump( has_filter( "authenticate", "wp_authenticate_email_password" ) );'
int(20) と表示されれば有効です。bool(false) の場合は、どこかで外されています。セキュリティ系のプラグインの設定に、メールアドレスでのログインを禁止する項目がないかを確認し、見つからなければプラグインを1つずつ無効にして原因を探します。
3. 使っているログインフォームが対応しているか
ここで説明しているのは、WordPress標準のログイン画面(wp-login.php)の動きです。テーマやプラグインが用意した独自のログインフォームは、作り方によってはメールアドレスを受け付けないことがあります。標準のログイン画面ではメールアドレスでログインできるのに、独自のフォームではできない場合は、そのフォームのテーマやプラグインの説明を確認します。
メールアドレスだけでログインさせる
ユーザー名を入力させず、メールアドレスだけでログインさせたい場合は、ユーザー名で確かめる関数を外します。テーマに依存しないように mu-plugin(置くだけで常に読み込まれるプラグイン)にします。wp-content/mu-plugins/ フォルダーを作り(なければ)、次の内容で email-only-login.php を置きます。
<?php
/**
* Plugin Name: メールアドレスだけでログイン
* Description: ユーザー名でのログインを止め、メールアドレスだけを受け付ける。
*/
remove_filter( 'authenticate', 'wp_authenticate_username_password', 20 );
// ログイン画面の入力欄の名前を「メールアドレス」に変える
add_filter( 'gettext', function ( $translation, $text, $domain ) {
if ( 'default' === $domain && 'Username or Email Address' === $text ) {
return 'メールアドレス';
}
return $translation;
}, 10, 3 );
remove_filter() は、登録したときと同じ優先度(20)を指定しないと外れません。入力欄の名前の変更は見た目だけで、実際の制限は1行目の remove_filter() が行っています。
この設定のあとでユーザー名を入力すると、ログインは失敗します。アプリケーションパスワードの確認(wp_authenticate_application_password)は外していないので、REST API などでアプリケーションパスワードを使う連携には影響しません。
ユーザー名だけでログインさせる
逆に、メールアドレスでのログインを止めたい場合は、メールアドレスで確かめる関数を外します。
<?php
/**
* Plugin Name: ユーザー名だけでログイン
* Description: メールアドレスでのログインを止める。
*/
remove_filter( 'authenticate', 'wp_authenticate_email_password', 20 );
入力欄の名前は「ユーザー名またはメールアドレス」のままなので、必要なら上の gettext の例と同じ方法で「ユーザー名」に変えます。なお、パスワードを忘れたときの再設定画面では、この設定に関係なくメールアドレスでも申請できます。
ログインエラーの文言に注意する
標準のログイン画面は、間違えた内容によってエラーの文言が変わります。
- 登録されていないメールアドレス:不明なメールアドレスである旨
- 登録されていないユーザー名:そのユーザー名は登録されていない旨
- パスワードの誤り:パスワードが正しくない旨
このため、ログイン画面を何度か試せば、あるメールアドレスやユーザー名がそのサイトに登録されているかが分かります。会員サイトなどで、登録の有無を知られたくない場合は、login_errors フィルターで文言をまとめます。
<?php
add_filter( 'login_errors', function ( $error ) {
return 'メールアドレスまたはパスワードが正しくありません。';
} );
このフィルターはログイン画面のエラー表示をすべて置き換えるため、Cookieが無効なときなど、ほかの原因のエラーも同じ文言になります。問い合わせが増えたときは、ほかの文言は残すように条件を加えてください。
メールアドレスでログインできるサイトでは、メールアドレスがログインIDの役割を持ちます。メールアドレスは公開されていることも多いので、推測されにくいパスワードを使い、ログインの試行回数の制限や2段階認証も検討してください。試行回数の制限についてはWordPressのログイン試行回数を制限する方法で説明しています。
まとめ
- WordPress 4.5以降は、標準のログイン画面でメールアドレスでもログインできる。プラグインは不要
- ログインできないときは、メールアドレスの登録、
wp_authenticate_email_passwordが外されていないか、使っているログインフォームを確認する - メールアドレスだけにするなら
wp_authenticate_username_passwordを、ユーザー名だけにするならwp_authenticate_email_passwordを、優先度20でremove_filter()する - 登録の有無を知られたくない場合は、
login_errorsでエラーの文言をまとめる