検索キーワードを入力
カテゴリーを選択

WordPressログインURLを変更してセキュリティ強化する実装方法(サンプルコード付き)

投稿日:2025年02月21日(金)
WordPressログインURLを変更してセキュリティ強化する実装方法(サンプルコード付き)|UMENOKI|すぐに仕事で使えるIT技術情報メディア

みなさんこんにちは!エンジニアの高澤です!

今回は、WordPressログインURLを変更してセキュリティ強化する実装方法を徹底解説していきたいと思います。

ここでいうログインURLとは、WordPressの管理画面を開くときに必ず最初に必要になるログインのページのURLのことを言います。

WordPressではこのログインページのURLが「https://sample.com/wp-admin/」と言うように決まっておりますが、当記事ではこのURLを変更することが可能です。

セキュリティを強化したい方は必見な内容となっておりますので、よろしければぜひ当記事をご活用ください。

今回実装する内容

まずは事前に今回実装する内容を確認しておきたいと思います。

WordPressでは通常、以下のURLで管理画面へログインすることができます。

URL説明
https://example.com/wp-login.php通常のログインページ
https://example.com/wp-admin/管理画面(未ログイン時はログインページへリダイレクト)

上記URLをブラウザでアクセスすると、下図のようにログイン画面が表示されるかと思います。

当記事で解説する実装をおこなえば、通常のログインURLでアクセスしたときに下図のように「ページが見つかりません」と言うページへリダイレクトされるようにできます。

そして、下図のように独自のURLでログインページを開くことができるようにできます。

今回の例では「https://sample.com/wp-custom-login/」でログインページへアクセスできるようにしております。

ログイン後、通常通りに管理画面を開くことができます。

ログインURLを変更するメリット

WordPressのデフォルトのログインURLは「/wp-login.php」もしくは「/wp-admin/」ですが、これを変更することでセキュリティや利便性が向上します。

最大のメリットは不正アクセス対策です。WordPressは世界的に利用されているため、悪意のあるボットやハッカーがログインページを狙うことが一般的です。URLを変更することで、総当たり攻撃(ブルートフォースアタック)や不正ログインのリスクを大幅に減らせます。

また、管理者以外のユーザーにログインさせたくない場合にも有効です。例えば、特定のクライアントやチームメンバーのみにログインURLを共有することで、不要なアクセスを制限できます。

さらに、サイトのブランディングにも役立ちます。「/wp-custom-login/」などの独自URLを設定することで、より洗練されたログイン体験を提供できます。これにより、企業や会員制サイトの信頼性を向上させることも可能です。

このように、ログインURLを変更することは、セキュリティ強化と利便性向上の両方にメリットがあります。

ログインURLを変更する実装方法

それでは早速、ログインURLを変更する実装方法について解説いたします。

実装するには、以下のコードをfunctions.phpへコピー&ペーストしてください。

<?php
if (!class_exists('Login_Security')) :

    class Login_Security
    {
        // デフォルトのログインページ名を設定
        const DEFAULT_LOGIN_NAME = 'wp-default-login';
  
        public function __construct()
        {
            // フックを登録
            $this->initialize_hooks();
        }
  
        private function initialize_hooks()
        {
            // ユーザーがログインページへアクセスしようとしたときのリダイレクト処理
            add_action('template_redirect', [$this, 'redirect_login']);
            // 直接 wp-login.php へアクセスした場合のブロック処理
            add_action('login_init', [$this, 'block_default_login_url']);
            // サイト内のログインURLを変更
            add_filter('site_url', [$this, 'modify_login_url'], 10, 2);
            // リダイレクト時のURLを変更
            add_filter('wp_redirect', [$this, 'modify_login_redirect']);
        }
  
        // 直接 wp-login.php へアクセスした場合は404エラーを返す
        public static function block_default_login_url()
        {
            if (!defined('LOGIN_CHANGE') || sha1('page_changed') !== LOGIN_CHANGE) {
                global $wp_query;
                $wp_query->set_404();
                status_header(404);
                get_template_part(404);
                exit;
            }
        }
  
        // ログインURLをカスタムURLに変更
        public static function modify_login_url($url, $path)
        {
            $login_name = apply_filters('login_endpoint_name', self::DEFAULT_LOGIN_NAME);
  
            // wp-login.php へのリンクをカスタムURLに置き換える
            if (strpos($path, 'wp-login.php') !== false && (is_user_logged_in() || strpos($_SERVER['REQUEST_URI'], $login_name) !== false)) {
                return str_replace('wp-login.php', $login_name, $url);
            }
            return $url;
        }
  
        // ログインリダイレクト時のURLを変更
        public static function modify_login_redirect($location)
        {
            $login_name = apply_filters('login_endpoint_name', self::DEFAULT_LOGIN_NAME);
  
            // リダイレクトURLの wp-login.php をカスタムURLに変更
            if (strpos($_SERVER['REQUEST_URI'], $login_name) !== false) {
                return str_replace('wp-login.php', $login_name, $location);
            }
            return $location;
        }
  
        // ユーザーがカスタムログインページへアクセスした場合、ログインページを表示
        public static function redirect_login()
        {
            $current_url = (is_ssl() ? 'https' : 'http') . '://' . $_SERVER["HTTP_HOST"] . strtok($_SERVER["REQUEST_URI"], '?');
            $login_name = apply_filters('login_endpoint_name', self::DEFAULT_LOGIN_NAME);
  
            // 指定されたカスタムログインURLの場合、WordPressのログイン画面を表示
            if ($current_url === home_url('/') . $login_name) {
                header("HTTP/1.1 200 LOGIN PAGE");
                define('LOGIN_CHANGE', sha1('page_changed'));
                require_once(ABSPATH . '/wp-login.php');
                exit;
            }
        }
    }
  
    // クラスのインスタンスを作成して適用
    new Login_Security;
  
endif;
  
// ログインURLのカスタマイズ(デフォルトは 'wp-custom-login')
add_filter('login_endpoint_name', fn() => 'wp-custom-login');

上記コードについて解説いたします。

上記コードは、WordPressのログインURLを変更し、デフォルトのwp-login.phpへのアクセスをブロックすることで、セキュリティを強化するためのコードになります。

独自にLogin_Securityというクラスを作成し、WordPressのフックを利用してログインページのリダイレクト処理やカスタマイズを行っています。

まず、Login_Securityクラス内で、デフォルトのログインURL名として「wp-default-login」を定義します。次に、__construct()メソッドを用いてinitialize_hooks()メソッドを呼び出し、WordPressの各種フックを登録します。

initialize_hooks()メソッドでは、主に4つの処理をフックに登録しています。
1つ目は「template_redirect」で、ユーザーがログインページへアクセスした際のリダイレクトを行います。
2つ目は「login_init」で、デフォルトのwp-login.phpへの直接アクセスを防ぎ、404エラーを返します。
3つ目と4つ目は「site_url」と「wp_redirect」のフィルターフックで、サイト内のログインURLのリンクやリダイレクト時のURLを変更する処理を行います。

block_default_login_url()メソッドは、wp-login.phpへの直接アクセスを防ぐために使用されます。LOGIN_CHANGEという定数が正しく設定されていない場合、404エラーを発生させ、WordPressの404.phpを読み込むことで不正なログイン試行をブロックします。

modify_login_url()メソッドでは、サイト内のwp-login.phpへのリンクをカスタムURLへ変更します。ログインURLを変更した場合でも、適切なリダイレクトを行い、サイトの動作をスムーズに保つ仕組みになっています。

modify_login_redirect()メソッドでは、ログイン後のリダイレクト時にwp-login.phpの部分をカスタムログインURLへ置き換える処理を行います。これにより、ログインURLを変更しても正しく動作するようになります。

redirect_login()メソッドは、ユーザーがカスタムログインページへアクセスした際にwp-login.phpを読み込む処理を行います。リクエストされたURLが変更後のログインURLと一致する場合、wp-login.phpを呼び出し、ログインページを表示します。

最後に、「new Login_Security;」によりクラスをインスタンス化し、処理を適用します。

また、「add_filter(‘login_endpoint_name’, fn() => ‘wp-custom-login’);」によって、デフォルトのログインURLを「wp-custom-login」に変更するフィルターフックが設定されており、この部分を変更することで、自由にログインURLをカスタマイズできます。

ペーストが完了したら、管理画面からログアウトしてください。

そして以下のURLでブラウザからアクセスしてみてください。

// 例:https://sample.com/wp-custom-login/

【ご自身のサイトのドメイン】/wp-custom-login/

すると下図のようにカスタマイズされたURLでログインページを開くことができます。

ログイン後、下図のように管理画面が開くかと思います。

逆に、通常通りのログインURLでアクセスしてもログインページを開けなくなっているかと思います。

これで実装は完了です。お疲れ様でした!

これだけでも、セキュリティはだいぶ強化できたかと思います。

カスタムURLの変え方

ログインURLを変更することはできましたが、「https://sample.com/wp-custom-login/」の「wp-custom-login」の部分を変更したい場合があるかと思います。

むしろ「wp-custom-login」でログインできるコードを当記事で紹介してしまっている形になるので、ここの半角英数字の部分を変更した方が良いです。

そのため、この「wp-custom-login」の部分を変更する方法を解説いたします。

やり方は簡単です。当記事で掲載したコードの以下の部分を確認してください。

確認できたら、以下の「wp-custom-login」のコードの部分をご自身のログインURLにしたい半角英数字に変更してください。

これで「https://sample.com/(ご自身で変更した半角英数字)/」のURLのイメージでログインページが開けるかと思います。

まとめ

本記事では、WordPressのログインURLを変更し、セキュリティを強化する方法について解説しました。

WordPressのログインページは通常「https://sample.com/wp-admin/」ですが、適切にカスタマイズすることで、不正アクセスや総当たり攻撃を防ぐことが可能です。ログインURLを変更することで、より安全な管理環境を構築できるため、セキュリティを強化したい方には特におすすめです。

ぜひ本記事を参考に、適切な設定を行い、安全なWordPress運用を実現してください。

執筆者

UMENOKI編集部 高澤 翔汰

歴5年目(2024年8月以降から5年目です)のエンジニアです!
CMSでのサイト構築とWebデザイン制作を兼任して5年目になります。
自作のiOSアプリ(iPhoneアプリ)やWordPressプラグインを開発することもあり、まだまだ現在進行形で勉強中です!

お気軽に皆さんのご要望をお聞かせください!

どんなに些細なことでも構いません!よろしければ記事や当サイトへの「こんな記事があったら仕事とかで役に立つな〜」や「こうだったらもっと役に立つのに!」といったようなご要望等をお気軽にお聞かせください!今後のサービス改善にお役立てさせていただきます!

例1)Reactの技術記事を書いてほしい!
例2)WordPressの使い方とかを初心者向けに解説してほしい!...など

送信と同時にプライバシーポリシーに同意したものとします。