[メモ]WordPressログインURL変更方法

ログイン画面を表示するURLはデフォルト設定の「サイトURL/wp-admin」や「サイトURL/wp-login.php」のままでも動作に問題はないですが、セキュリティの観点から不安が残ります。

プラグインを利用するとお手軽に設定できますが、こちらもセキュリティやプラグイン競合など懸念点が残ります。

このページではWordPressディレクトリにPHPファイルを配置してログインURLを変更する方法を記述します。

ログイン用PHPファイル作成

実行環境

PC:Raspberry Pi 4 Model B 8GB
OS:Raspberry Pi OS(Bullseye)
Webサーバ:Apache2.4

WordPressの「wp-login.php」ファイルがあるディレクトリに、ログインURLの代わりになるPHPファイルを作成します。

基本的にWordPressのルートディレクトリは「/var/www/html/」下のどこかしらにあります。

PHPファイルの名前および下記ソースコード2行目にある任意のキーワードは、自分が覚えやすく他人にわかりにくいものが良いです。

今回は「change-url.php」を例とします。

change-url.php
<?php
define( 'LOGIN_CHANGE', sha1( '任意のキーワード' ) );
require_once './wp-login.php';
?>

ちなみに、このファイルを作成した時点では「サイトURL/wp-admin」、「サイトURL/wp-login.php」のほかに、今回の手順で作成した「サイトURL/change-url.php」でもログイン画面が表示されます。

次の手順でデフォルトのログインURLを無効化します。

ログイン設定をfunction.phpに追記

WordPressで使用中のテーマディレクトリにある「function.php」にログイン設定を追記します。

基本的にWordPressのテーマディレクトリは「/var/www/html/../WordPressルートディレクトリ/wp-content/themes/」下にあります。

テーマが親子で分かれている場合は、子テーマの「function.php」に追記します。

念のため「function.php」をコピーしてバックアップを残しておくと良いです。

今回は無料テーマ「cocoon」の子テーマを例とします。

function.php
<?php //子テーマ用関数
if ( !defined( 'ABSPATH' ) ) exit;

//子テーマ用のビジュアルエディタースタイルを適用
add_editor_style();

//以下に子テーマ用の関数を書く

上記が「cocoon」子テーマディレクトリにある「function.php」のソースコードです。

そのソースコードに下記ソースコードを追記します。

function.php
//ログイン画面URL変更 
define( 'LOGIN_CHANGE_PAGE', 'change-url.php' );
add_action( 'login_init', 'login_change_init' );
add_filter( 'site_url', 'login_change_site_url', 10, 4 );
add_filter( 'wp_redirect', 'login_change_wp_redirect', 10, 2 );

// 指定ログインURL以外はTOPページへ転送
if ( ! function_exists( 'login_change_init' ) ) {
    function login_change_init() {
        if ( !defined( 'LOGIN_CHANGE' ) || sha1( '任意のキーワード' ) != LOGIN_CHANGE ) {
          wp_redirect( home_url() );
          exit;
        }
    }
}

// ログイン済みまたは新規作成ログインURLの場合はwp-login.phpを置き換える
if ( ! function_exists( 'login_change_site_url' ) ) {
    function login_change_site_url( $url, $path, $orig_scheme, $blog_id ) {
        // ログイン画面、ログイン画面を用いた処理の画面名をリプレイス
        if ( ( $path == 'wp-login.php' || preg_match( '/wp-login\.php\?action=\w+/', $path ) ) &&
            ( is_user_logged_in() || strpos( $_SERVER['REQUEST_URI'], LOGIN_CHANGE_PAGE ) !== false ) )
            $url = str_replace( 'wp-login.php', LOGIN_CHANGE_PAGE, $url );
        return $url;
    }
}

// ログアウト時のリダイレクト先設定
if ( ! function_exists( 'login_change_wp_redirect' ) ) {
    function login_change_wp_redirect( $location, $status ) {
        if ( strpos( $_SERVER['REQUEST_URI'], LOGIN_CHANGE_PAGE ) !== false )
            $location = str_replace( 'wp-login.php', LOGIN_CHANGE_PAGE, $location );
        return $location;
    }
}

?>

以上の手順でログインURLが変更されます。

参考

下記の情報元を参考にしました。この場を借りて、感謝申し上げます。

【WordPress】ログインURLをプラグイン無しで変更。

タイトルとURLをコピーしました