プラグイン無しでWordPressのログインページのURLを変更する方法
WordPressのセキュリティで重要な対策の一つがログインページのURLを変更して秘匿化することです。
外部からログインページにアクセスできないようにするだけで、かなりの攻撃を防げることが期待できます。ログインページのURLを変更するのに最も手っ取り早い方法はプラグインを導入することですが、テーマをカスタマイズすることで、プラグイン無しで変更することも可能です。
ソースコード
テーマ内のfunctions.phpに以下のコードを記述するとログインページのURLが変更できます。
define("LOGIN_CODE" , "hogehoge");
function custom_login_url () {
$uri = getenv('REQUEST_URI');
if( !strpos( $uri , LOGIN_CODE ) && !is_user_logged_in() ){
wp_safe_redirect( home_url() );
exit;
}
}
add_action( 'login_form_login', 'custom_login_url' );
実装方法の解説
パラメーターの定義
URLに付与するパラメーターを定義します。
パラメーターは不変であるため定数に代入します。
define("LOGIN_CODE" , "hogehoge");
上記の例では定数「LOGIN_CODE」を定義し、値として「hogehoge」を代入しています。
LOGIN_CODEはそのままログインページのURLに付与するパラメーターとなり、上記の例ではログイン画面のURLは「サイトURL/wp-login.php?hogehoge」になります。
判定とリダイレクトの処理の実装
function custom_login_url () {
$uri = getenv('REQUEST_URI');
if( !strpos( $uri , LOGIN_CODE ) && !is_user_logged_in() ){
wp_safe_redirect( home_url() );
exit;
}
}
add_action( 'login_form_login', 'custom_login_url' );
上記の関数はログインページにアクセスした際の挙動を実装しています。
関数を実行するタイミング
この関数はアクションフックを「login_form_login」します。
「login_form_login」はログイン画面にアクセスしたときに実行されるアクションフックです。
リダイレクト処理の実装
まず「getenv(‘REQUEST_URI’)」は現在表示しているURLを取得するPHPの関数です。
今回の場合はログイン画面のURLを取得します。
strpos()関数は変数内に指定の文字列がないか検索するPHPのカンスです。
今回の場合、取得したURLに先程のパラメーターの文字列が存在しているか検索し、存在しなければ別のページにリダイレクトさせます。
またWordPressにログインしていない場合のみリダイレクトするように、is_user_logged_in()でログインしているかどうかの判定も同時に行います。
リダイレクト処理はwp_safe_redirect関数で行います。
上記の例ではサイトのトップページにリダイレクトさせていますが、任意のページを指定することも可能です。