WordPressでログインURLを変える

1) TOPディレクトリに「heart-lab-login.php」というファイルを作る。
内容は下の通り。

1<?php
2define( 'ANYWHERE_LOGIN', sha1( 'keyword' ) );
3require_once './wp-login.php';
4?>

2) テーマファイルのfunction.php に下記を追記する

1define( 'ANYWHERE_LOGIN_PAGE', 'heart-lab-login.php' );
2add_action( 'login_init', 'heart_lab_login_init' );
3add_filter( 'site_url', 'heart_lab_login_site_url', 10, 4 );
4add_filter( 'wp_redirect', 'heart_lab_login_wp_redirect', 10, 2 );
5 
6if ( ! function_exists( 'heart_lab_login_init' ) ) {
7    function heart_lab_login_init() {
8        if ( !defined( 'ANYWHERE_LOGIN' ) || sha1( 'keyword' ) != ANYWHERE_LOGIN ) {
9            status_header( 403 );
10            exit;
11        }
12    }
13}
14 
15if ( ! function_exists( 'heart_lab_login_site_url' ) ) {
16    function heart_lab_login_site_url( $url, $path, $orig_scheme, $blog_id ) {
17        if ( ( $path == 'wp-login.php' || preg_match( '/wp-login\.php\?action=\w+/', $path ) ) &&
18            ( is_user_logged_in() || strpos( $_SERVER['REQUEST_URI'], ANYWHERE_LOGIN_PAGE ) !== false ) )
19            $url = str_replace( 'wp-login.php', ANYWHERE_LOGIN_PAGE, $url );
20        return $url;
21    }
22}
23 
24if ( ! function_exists( 'heart_lab_login_wp_redirect' ) ) {
25    function heart_lab_login_wp_redirect( $location, $status ) {
26        if ( strpos( $_SERVER['REQUEST_URI'], ANYWHERE_LOGIN_PAGE ) !== false )
27            $location = str_replace( 'wp-login.php', ANYWHERE_LOGIN_PAGE, $location );
28        return $location;
29    }
30}

3) その結果
「wp-admin」「wp-login.php」は403になるので安全です。