WordPressの管理画面ログインページ変更方法・改

サイトのセキュリティ強化としてログインページの変更を実装します。例によってプラグインには頼らず自分でテーマにコードを追加したのですが、WordPress5.8では動作しなかったため思い切って改造してみました。

参考にしたページ

「検索エンジンから追うことができた公開が一番古いページ」として、下記サイトのコードを参考にしました。

WordPressの管理画面ログインURLの変更方法解説 | エス技研
https://blog.s-giken.net/140.html

管理画面ログインページ変更コード・改

テーマのfunctions.phpに下記コードを追加します。
ここではログイン用のページ名を「wp-login-change.php」、同ページからのみwp-login.phpに転送されるようにするための秘密の暗号を「keyword」としています。

テーマのfunctions.phpに追加
// WordPress wp-login change
define( 'LOGIN_CHANGE_PAGE', 'wp-login-change.php' );
add_action( 'login_init', 'login_change_init' );
add_filter( 'site_url', 'login_change_site_url');
add_filter( 'wp_redirect', 'login_change_wp_redirect');

//login_change_init
function login_change_init() {
  if ( !defined( 'LOGIN_CHANGE' ) || sha1( 'keyword' ) != LOGIN_CHANGE ) 
  wp_safe_redirect( home_url() );
}

//login_change_site_url
function login_change_site_url($url) {
  if ( is_user_logged_in() || strpos( $_SERVER['REQUEST_URI'], LOGIN_CHANGE_PAGE ) !== false ) 
    $url = str_replace( 'wp-login.php', LOGIN_CHANGE_PAGE, $url );
  return $url;
}

//login_change_wp_redirect
function login_change_wp_redirect($location) {
  if ( strpos( $_SERVER['REQUEST_URI'], LOGIN_CHANGE_PAGE ) !== false )
    $location = str_replace( 'wp-login.php', LOGIN_CHANGE_PAGE, $location );
  return $location;
}

またログイン用のページ「wp-login-change.php」を、wp-login.phpと同じディレクトリに保存します。

wp-login-change.php
<?php
define( 'LOGIN_CHANGE', sha1( 'keyword' ) );
require_once './wp-login.php';
?>
主な改造点
  1. 使用する引数の最大枠を減らす。
    - add_filter( 'site_url', 'login_change_site_url', 10, 4 );
    + add_filter( 'site_url', 'login_change_site_url');
  2. if ( ! function_exists( ‘****’ ) )を止める。
    同等機能を持つプラグインとのバッティングを避けるためのコードかと思いますが、プラグインを利用しないので対応する波括弧{}に注意しながら該当箇所を削除します。
  3. wp-login.phpへのアクセスはホームに転送する
    function login_change_init() {
        if ( !defined( 'LOGIN_CHANGE' ) || sha1( 'keyword' ) != LOGIN_CHANGE ) {
    -      status_header( 403 );
    -      exit;
    
    function login_change_init() {
    +  if ( !defined( 'LOGIN_CHANGE' ) || sha1( 'keyword' ) != LOGIN_CHANGE ) 
    +  wp_safe_redirect( home_url() );
    
  4. login_change_site_urlを大幅に簡略化
    
    -  function login_change_site_url( $url, $path, $orig_scheme, $blog_id ) {
    -    if ( $path == 'wp-login.php' &&
    -      ( is_user_logged_in() || strpos( $_SERVER['REQUEST_URI'], LOGIN_CHANGE_PAGE ) !== false ) )
          $url = str_replace( 'wp-login.php', LOGIN_CHANGE_PAGE, $url );
        return $url;
    
    + function login_change_site_url($url) {
    +   if ( is_user_logged_in() || strpos( $_SERVER['REQUEST_URI'], LOGIN_CHANGE_PAGE ) !== false ) 
          $url = str_replace( 'wp-login.php', LOGIN_CHANGE_PAGE, $url );
      return $url;
    
スポンサーリンク