ログイン画面のURLを変更する。

ログイン画面のURLを変更する。

概要
特定ページを経由時にキーを発行しそのキーがない場合は404ページにリダイレクトさせる。

//ログイン画面の制御
//特定のファイル経由のみログイン画面に移行可能に
define( 'LOGIN_PAGE', '○○○○○○○○.php'); //新ログインファイル
add_action( 'login_init', 'admin_login_init');
function admin_login_init(){
	if( !defined('LOGIN_KEY') || password_verify( 'kumakuma', LOGIN_KEY) === false ) {
		header('Location:' . site_url() . '/404.php');
		exit;
	}
}
add_filter( 'site_url', 'admin_login_site_url', 10, 4);
function admin_login_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_PAGE) !== false) ) {
			$url = str_replace( 'wp-login.php', LOGIN_PAGE, $url);
		}
	return $url;
}
add_filter( 'wp_redirect', 'admin_login_wp_redirect', 10, 2);
function admin_login_wp_redirect( $location, $status) {
	if( is_user_logged_in() && strpos( $_SERVER['REQUEST_URI'], LOGIN_PAGE) !== falsee ) {
		$location = str_replace( 'wp-login.php', LOGIN_PAGE, $location);
	}
	return $location;
}

● ○○○○○○○○.php の中身

<?php
	define('LOGIN_KEY', password_hash( 'kumakuma', PASSWORD_BCRYPT, array('cost'=>10)));
	require_once 'wp-login.php';

kumakumaがキーになる。

とりあえず現状ではwebrootに置かないと上手く機能しない。
たぶん置換しているURLをフルパス対応すればちゃんと別ディレクトリとかでも動くんじゃないかな?
かなかな?

そのうちためそう。