WordPressでログイン画面URLをプラグインなしで変更する方法をメモします。WordPressは仕様としてログインURLの変更をサポートしていないので疑似的な変更方法です。
実装方法
my-loginでログイン画面を表示する
my-login にアクセスすると、内部的に wp-login.php を読み込みます。
function custom_login_page() {
if ($_SERVER['REQUEST_URI'] === '/my-login') {
require_once ABSPATH . 'wp-login.php';
exit;
}
}
add_action('init', 'custom_login_page');
wp-login.php をブロックする
直接 wp-login.php にアクセスするとエラーになります。
function block_wp_login() {
if (strpos($_SERVER['REQUEST_URI'], 'wp-login.php') !== false) {
if (defined('DOING_AJAX') && DOING_AJAX) return;
// 403エラー
status_header(403);
nocache_headers();
echo 'Forbidden';
exit;
}
}
add_action('init', 'block_wp_login');
wp-admin も未ログイン時はブロック
wp-admin 経由でログイン画面が出るのを防ぎます。
function block_wp_admin() {
if (strpos($_SERVER['REQUEST_URI'], 'wp-admin') !== false && !is_user_logged_in()) {
status_header(403);
exit;
}
}
add_action('init', 'block_wp_admin');
こちらは完全なURL変更ではなく入口を変えているだけで、REST APIや/xmlrpc.phpからのアクセスは可能です。堅牢な設計にしたい場合はプラグインやサーバー側で制御することがおすすめです。