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

WordPressって、ログインのURLそのままだとログイン画面まで入るのカンタンだよね。
http://サイトURL/wp-adminとか、http://サイトURL/wp-login.phpとかとか。

それって、なかなか怖いことだと思う。ので、なるべくログインURLは変更したい。

そして例のごとく忘れるのでメモしておく。

ログインURL変更手順まとめ

  • ログイン用のPHPファイルをつくる(例えばtest-login.php)
  • ログイン変更用のPHPファイルをつくる(例えばlogin.php)
  • functions.phpにlogin.phpを読み込むコード書く
  • test-login.phpをwp-login.phpと同じ階層に設置(wp-login.phpはそのまま置いておく)

ログイン用のPHPファイルをつくる

WordPressのwp-login.phpが入ってるとこと同じ階層に、ログインURLの「/wp-login.php」の代わりになるPHPファイルをつくる。
名前は、例えば「test-login.php」とか。

「’keyword’」の部分は推測されにくいキーワードにする。

<?php
define( 'LOGIN_CHANGE', sha1( 'keyword' ) );
require_once './wp-login.php';
?>

ログイン変更用のPHPファイルをつくる

functions.phpに直接書かず、別でログイン変更用のphpファイルを作る。
名前は、例えば「login.php」とか。
functions.phpにはlogin.phpを置いてるfunctionsフォルダから読み込むコードを書く。
(フォルダ名はfunctionsじゃなくて他のフォルダ名でも大丈夫)

require get_template_directory() . '/functions/login.php';

「define( ‘LOGIN_CHANGE_PAGE’, ‘test-login.php’ );」の「’test-login.php’」は、さっき作ったtest-login.phpファイルの名前。
「’keyword’」の部分は、さっきtest-login.phpに書いたキーワードと同じにする。

<?php

//ログイン画面URLの変更
define( 'LOGIN_CHANGE_PAGE', 'test-login.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( 'keyword' ) != 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;
    }
}

?>

参考にさせてもらったサイト

こちらのサイトを参考にさせてもらいました。ありがとうございます。
プラグインを使った方法も記載されていたので良かったら参考にしてみてください。

WordPressのログイン画面を手動で変更する

WordPressのログインURL変更方法!プラグインを使わない場合も解説