tips

カスタムログインURL

よくログインURLを変えるプラグインなんかあるけど、それをテーマ側でやってしまおうというファンクションです。自作系だと、wp-login.phpを複製してカスタムする手法も見かけますが、コアにかかるのでちょっとめんどくさい。以下の関数はテーマ内で完結してるので管理が楽です。もう何年も運用してるんで大丈夫だと思います。マルチサイトやjetpackのログインにも対応しています。この処理と、bbq firewallのphp版が無料で公開されているので、基本的なセキュリティは大体カバーできますね。後はjetpackが提供しているakismetを使ったプロテクト機能がありますが、あれと同様の仕組みを組み込めば、ある程度の貴イボのサイトであればセキュリティ系のプラグインはもう不要なんじゃなかろうかと思います。

if ( defined( 'CUSTOM_LOGIN_PAGE' ) ){ // カスタムログインURL

	// WordPressの管理画面ログインURLを変更する
	add_action('wp', function () {
		global $wp; 
		if ( $wp->request === CUSTOM_LOGIN_PAGE ){
			global $error; 
			if ( $error == '404' ) $error = '';
			global $action; // jetpack secure sign on
			$_GET['jetpack-sso-show-default-form']=1; // jetpack secure sign on
			define( 'CUSTOM_LOGIN_KEY', sha1( 'customloginkeyword' ) );
			require_once ABSPATH . '/wp-login.php';
			exit;
		} 
	});

	add_action( 'login_init', function (){
		if ( defined( 'CUSTOM_LOGIN_KEY' ) && sha1( 'customloginkeyword' ) == CUSTOM_LOGIN_KEY ) return; 
		if ( isset( $_GET['action'] ) && $_GET['action'] == 'confirmaction' ) return;
		if ( isset( $_GET['action'] ) && $_GET['action'] == 'postpass' ) return;
		if ( is_user_logged_in() && !empty( $_GET["redirect_to"] ) && isset( $_GET["action"] ) && $_GET["action"] == "logout" ) {
			wp_safe_redirect( admin_url() );
			exit;
		} elseif ( isset( $_GET["action"] ) && $_GET["action"] == "rp" && !empty( $_GET["key"] ) && !empty( $_GET["login"] ) ) { //新規ユーザー登録
			wp_safe_redirect( home_url( CUSTOM_LOGIN_PAGE ).'?'.$_SERVER["QUERY_STRING"] );
			exit;
		} else {
			wp_die( __( 'Invalid request.' ), '', array( 'response' => 403 ) );
		} 
	});


	// ログイン済みか新設のログインURLの場合はwp-login.phpを置き換える
	add_filter( 'site_url', function ( $url, $path, $scheme, $blog_id ) {
		if ( 'wp-login.php' === substr($path, 0, 12) ){ 
			$url = str_replace( site_url().'/wp-login.php', home_url( CUSTOM_LOGIN_PAGE ), $url );
		}
		return $url;
	}, 10, 4 );
	add_filter( 'network_site_url', function ( $url, $path, $scheme  ) {
		if ( 'wp-login.php' === substr($path, 0, 12) ){ 
			$url = str_replace( 'wp-login.php', CUSTOM_LOGIN_PAGE, $url );
		}
		return $url;
	}, 10, 4 );

	//デフォルトの転送をストップ
	add_action('init', function(){
		remove_action('template_redirect', 'wp_redirect_admin_locations', 1000);
	});

	//デフォルトのページにアクセスした時にアクセス無効ページを表示
	add_filter('auth_redirect_scheme', function ($scheme){
		if ( $user_id = wp_validate_auth_cookie( '',  $scheme) ) {
			return $scheme;
		}
		wp_die( __( 'Invalid request.' ), '', array( 'response' => 403 ) );
	}, 1000);


	// ログアウト時のリダイレクト先の設定
	add_filter( 'wp_redirect', function ( $location, $status ) {
		if ( 
			strpos( $_SERVER['REQUEST_URI'], CUSTOM_LOGIN_PAGE ) !== false &&
			strpos( $location, 'https://wordpress.com/wp-login.php' ) === false  // without jetpack secure sign on
		){
			$location = str_replace( 'wp-login.php', CUSTOM_LOGIN_PAGE, $location );
		}
		return $location;
	}, 10, 2 );
	
}

上記の関数をfunctions.phpに記載、で、それよりも上部(functions.phpの一番上で大丈夫)ログインurlを設定します。
これで https://www.example.com/wp-login.php が https://www.example.com/my-login-slug に早変わりするという塩梅です。
 

define( 'CUSTOM_LOGIN_PAGE', 'my-login-slug' );

コメントを残す

メールアドレスが公開されることはありません。

captcha Enter the code