WordPressのログインページ(/wp-login.phpや/wp-admin)は、URLが公開されているため、不正ログインのリスクがあります。

ログインページのURLを変更できるプラグインもありますが、

「プラグインを増やしたくない」
「プラグインが使えない、うまく機能しない」
「コードで管理したい、カスタマイズしたい」

といった場合もあるでしょう。

そこで今回は、プラグインを使わずにログインページを独自URLに変更する方法をご紹介します。
コードはそのままコピペ可能で、あなたのサイトでもすぐご活用いただけます。

WordPressテーマ「GLUE」
WordPressテーマ「GLUE」
無料で高機能なWordPressテーマが手に入る。

独自のログインページをつくる手順

プラグイン無しでWordPressのログインページをつくる手順は、次の3ステップです。

  1. 独自URLのログインページを作成
  2. 公開URL(デフォルトログインページ)へのアクセス制限
  3. .htaccessでサーバー側からもアクセス制限

ひとつずつ見ていけば、複雑なことはありませんし、基本的にはコピペで済みます。

1. 独自URLのログインページを作成

まずは、独自URLのログインページをつくります。

以下をお手元のテキストエディタにコピペして、「任意のURL.php」という形で保存してください。ここで決めたファイル名がそのままログインページのURLになります。

/**
 * /login.php
 * WP標準ログインを独自URLで表示
 */

require_once __DIR__ . '/wp-load.php';

// 既にログイン済みなら管理画面へ
if (is_user_logged_in()) {
    wp_redirect(admin_url());
    exit;
}

// wp-login.php に直接アクセスされた場合はトップにリダイレクト
// ただし、ログインフォーム送信時は例外
if (isset($_SERVER['REQUEST_URI']) && basename($_SERVER['REQUEST_URI']) === 'wp-login.php') {
    if (empty($_POST['log'])) {
        wp_redirect(home_url('/'));
        exit;
    }
}

// 標準ログインページを読み込む
require_once ABSPATH . 'wp-login.php';

上記は一例ですので、ログインURLはお好みに変更してください。例:/staff-login.phpなど

2. 公開URL(デフォルトログインページ)へのアクセス制限

次に行うのは、公開URLへのアクセス制限です。以下の2つのURLへのアクセスを制限します。

  • /wp-login.php
  • /wp-admin

今回は、それぞれトップページにリダイレクトさせる書き方です。上記URLにアクセスしても、ログインページの代わりにトップページが表示されるようになります。

テーマのfunctions.phpを直接編集するのではなく、プラグイン「Code Snippets」をお使いいただくのが便利で安心です。下記をコピペして使えます。

// wp-admin に未ログインアクセスした場合はトップへリダイレクト
add_action('admin_init', function() {
    if (!is_user_logged_in()) {
        wp_redirect(home_url('/'));
        exit;
    }
});

// wp-login.php への直接アクセスを遮断(ログアウト・モーダル・再認証は例外)
add_action('login_init', function() {
    $request = $_SERVER['REQUEST_URI'] ?? '';

    // 各種例外処理
    $is_logout  = isset($_GET['action']) && $_GET['action'] === 'logout';
    $is_interim = isset($_GET['interim-login']) && $_GET['interim-login'] == 1; // モーダルログイン
    $is_reauth  = isset($_GET['action']) && $_GET['action'] === 'reauth';       // 再認証
    $has_post   = !empty($_POST['log']); // POST送信(ログインフォーム送信時)

    // 独自ログインページ(例:login.php)以外からのアクセスを遮断(例外を除く)
    if (
        strpos($request, 'wp-login.php') !== false
        && basename($request) !== 'login.php'
        && ! $is_logout
        && ! $is_interim
        && ! $is_reauth
        && ! $has_post
    ) {
        wp_redirect(home_url('/'));
        exit;
    }
});
/wp-login.phpを完全に制限してしまうとログアウト不可になりますが、↑の書き方であれば、正常にログアウト可能ですので、ご安心ください。

3. .htaccessでサーバー側からもアクセス制限

最後に、非ログインユーザーが、/wp-adminに直接アクセスできないようサーバー側で制御します。

下記記述を、.htaccessの一番上にコピペしてください。.htaccessは、非常に重要なファイルなので、必ずバックアップしてから行ってください。

サーバーファイルを編集するのが不安な方は、こんなプラグインもありますので、ぜひお試しください。

# BEGIN Custom Admin Restriction

RewriteEngine On

# /wp-admin への未ログインアクセスをトップにリダイレクト(Cookie判定)
RewriteCond %{REQUEST_URI} ^/wp-admin [NC]
RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in_.*$ [NC]
RewriteRule ^.*$ / [R=302,L]

# END Custom Admin Restriction
PHPのみで制御しても、ブラウザから直接ページにアクセスされると防げない場合があるので、サーバー側(.htaccess)でも二重に防止するという作業になります。

設定後は挙動を確認しよう

編集を加えた後は、必ずサイトの挙動を確認しましょう。今回の場合、確認すべきは以下3点です。

  • 設定したURLにアクセスしたときのみ、ログインページが表示されるか
  • /wp-login.phpや/wp-adminにアクセスすると、トップページにリダイレクトされるか
  • 正常にログインできた場合、ログアウトも可能か

複数人運営のサイトなら、できるだけ複数人で確認しておくのがおすすめです。

まとめ

プラグインを使わずに、WordPressのログインページを独自URLに変更する方法をご紹介しました。

公開URL(/wp-login.phpや/wp-admin)を保護できるので、不正ログイン対策に有効です。プラグインを使う対策が一般的ですが、PHPと.htaccessを少し編集するだけで実現できます。

プラグインを増やしたくない方や、PHPやファイルのカスタマイズに挑戦したい方は、ぜひ参考にしてみてください。

あわせて読みたい関連記事

アフィリエイトの売上をアップする
WordPressテーマ集
WordPressテーマ「REHUB」
WordPressテーマ「REHUB」
全国の口コミポータルサイトを作成。
WordPressテーマ「ZOOMY」
WordPressテーマ「ZOOMY」
独自SNSを構築するWordPressテーマ。
WordPressテーマ「Muum」
WordPressテーマ「Muum」
自由度・SEO共に最高なブログテンプレート
WordPressテーマ「EVERY」
WordPressテーマ「EVERY」
会員制のウェブメディア構築する。