2026年10月5日

2026年10月5日

WordPressでメールアドレスログインを有効化・メールアドレス専用にする方法

WordPress は 4.5 以降、標準のログイン画面でユーザー名とメールアドレスのどちらでもログインできます。そのため「有効化する」作業は多くの場合不要で、実際に必要なのは「メールアドレスで入れない原因を直す」か「ユーザー名でのログインを止めてメールアドレス専用にする」のどちらかです。この記事では、標準の仕組み、使えないときの確認手順、メールアドレス専用にするコードと、そのときに合わせて行うべき安全対策を説明します。

標準ではどう動いているか

ログイン処理は wp_authenticate() が authenticate フィルターを呼び出し、そこに登録された認証関数が順に判定する仕組みです。コアが登録している主な関数は次のとおりです。WordPress 6.x 系(2026年10月現在)の実装にもとづいています。

  • wp_authenticate_username_password:ユーザー名とパスワードで判定する
  • wp_authenticate_email_password:入力に「@」が含まれ、メールアドレスとして妥当なら、メールアドレスでユーザーを探して判定する
  • wp_authenticate_cookie:既存のログイン Cookie で判定する
  • wp_authenticate_spam_check:マルチサイトでスパム扱いのユーザーを弾く
  • wp_authenticate_application_password:REST API などでアプリケーションパスワードを判定する

標準のログイン画面の入力欄が「ユーザー名またはメールアドレス」と表示されているのは、この仕組みがあるからです。wp_signon() を使って作られたプラグインのログインフォームも、同じ authenticate フィルターを通るため、通常はメールアドレスで入れます。

メールアドレスで入れないときの確認手順

上から順に、起きやすい原因です。

1. 入力したメールアドレスが登録内容と違う

まず「ユーザー」画面で、そのユーザーのメールアドレスを確認します。複数のメールアドレスを使い分けている人は、登録時と別のアドレスを入れていることがよくあります。ユーザー名では入れてメールアドレスでは入れない場合は、ほぼこれが原因です。

2. ログインフォームが独自の認証をしている

会員プラグインやテーマが独自のログインフォームを持ち、ユーザー名だけで get_user_by( 'login', ... ) のように検索している場合、メールアドレスは通りません。標準の wp-login.php で同じメールアドレスを試し、そちらで入れるならフォーム側の問題です。プラグインの設定に「ユーザー名またはメールアドレス」を選ぶ項目がないか確認し、なければ作者へ問い合わせます。

3. プラグインがメールアドレス認証を外している

セキュリティ系のプラグインには、ユーザー名のみ、またはメールアドレスのみでのログインに制限する機能を持つものがあります。設定画面で該当する項目を探すか、ステージング環境でプラグインを1つずつ無効化して切り分けます。コードで外している場合は、テーマや mu-plugin に remove_filter( 'authenticate', 'wp_authenticate_email_password' という記述がないか検索してください。

4. ログイン試行の制限に引っかかっている

何度か失敗したあとに入れなくなった場合、ログイン試行回数の制限が働いている可能性があります。この場合、正しいメールアドレスを入れても一定時間はロックされます。プラグインのログで自分の IP がロックされていないか確認します。

メールアドレス専用にする方法

ユーザー名は投稿者アーカイブの URL などから推測されやすい一方、メールアドレスは公開されていないことが多いため、ログイン ID をメールアドレスに限定したいという要望はよくあります。ユーザー名側の認証関数を外せば実現できます。

<?php
/**
 * Plugin Name: メールアドレス専用ログイン
 * 配置先: wp-content/mu-plugins/email-only-login.php
 */

// ユーザー名での認証を外す(メールアドレスでの認証は残る)
add_action( 'init', function () {
    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)を指定しないと外れません。表記の変更は見た目だけの話なので、なくても動作に影響はありません。

wp_login_form() で自作のログインフォームを出している場合は、引数の label_username で表記を変えられます。

専用にする前に確かめること

  • 全ユーザーにメールアドレスが登録されているか:古いサイトでは、空や無効なアドレスのユーザーが残っていることがあります。そのユーザーはログインできなくなります
  • 管理者が締め出されない経路を用意する:コードを mu-plugin に置いておけば、FTP やファイルマネージャーでファイルを削除・リネームするだけで元に戻せます。作業前に接続できることを確認してください
  • アプリケーションパスワードや XML-RPC:外部ツールからのログインは別の認証経路を通ります。連携しているツールがユーザー名を使っている場合は、変更後に動作を確認します

あわせて行いたい安全対策

ログイン ID をメールアドレスにしても、パスワードが弱ければ守れません。次の対策と組み合わせてください。

エラーメッセージからの情報漏れを抑える

WordPress の標準のエラー表示は、登録されていないメールアドレスと、パスワードの間違いとで文言が異なります。これを手がかりに、どのメールアドレスが登録済みかを調べられるおそれがあります。login_errors フィルターで文言を統一できます。

add_filter( 'login_errors', function () {
    return esc_html( 'メールアドレスまたはパスワードが正しくありません。' );
} );

この変更でほかのエラー(Cookie が無効など)も同じ文言になるため、トラブルの切り分けがしにくくなる点は理解しておいてください。

ログイン試行回数を制限する

WordPress コアには試行回数の制限がありません。Limit Login Attempts Reloaded や Wordfence など、保守が続いているプラグインで制限をかけます。制限が強すぎると自分も締め出されるので、管理者の IP を許可リストに入れられるかも確認しておきます。

二段階認証を入れる

メールアドレスとパスワードだけでは、パスワードが漏れたときに防げません。管理者や編集者には二段階認証を設定するのがおすすめです。認証の仕組みは自作せず、Two Factor や WP 2FA など保守されているプラグインを使ってください。

メールアドレスは個人情報として扱う

ログイン ID にしたメールアドレスは、画面やログに出さないよう注意します。ログイン失敗の記録を取る場合も、保存期間と閲覧できる人を決め、プライバシーポリシーに記載します。

まとめ

  • WordPress 4.5 以降は、標準でメールアドレスでもログインできる。「有効化」は通常不要
  • 入れないときは、登録アドレスの違い、独自ログインフォーム、プラグインによる制限、試行回数制限の順に確認する
  • メールアドレス専用にするには wp_authenticate_username_password を優先度20で外す。mu-plugin に置いて戻せるようにする
  • エラー文言の統一、試行回数の制限、二段階認証を組み合わせて守る
  • 作業前にバックアップを取り、ステージングで連携ツールも含めて確認する

お気軽にご相談ください

お見積りへ お問い合わせへ
▲