404

Страница не найдена.

', '404', array( 'response' => 404 ) ); } /** Путь текущего запроса относительно корня сайта, без query-строки, в нижнем регистре, без слэшей по краям. */ private static function get_request_path() { $request_uri = isset( $_SERVER['REQUEST_URI'] ) ? $_SERVER['REQUEST_URI'] : ''; $path = wp_parse_url( $request_uri, PHP_URL_PATH ); $path = is_string( $path ) ? $path : ''; $home_path = wp_parse_url( home_url( '/' ), PHP_URL_PATH ); $home_path = is_string( $home_path ) ? trim( $home_path, '/' ) : ''; $path = trim( $path, '/' ); // Если сайт установлен в подпапке — отрезаем этот префикс от пути запроса. if ( $home_path && 0 === strpos( $path, $home_path ) ) { $path = trim( substr( $path, strlen( $home_path ) ), '/' ); } return strtolower( $path ); } private static function is_wp_admin_path( $path ) { return 'wp-admin' === $path || 0 === strpos( $path, 'wp-admin/' ); } /* ------------------------------------------------------------------ */ /* Подмена ссылок, которые генерирует само ядро WordPress */ /* ------------------------------------------------------------------ */ /** * wp_login_url(), wp_logout_url(), wp_registration_url(), wp_lostpassword_url() * в ядре всегда вызывают site_url('wp-login.php', 'login'|'login_post') — * подменяем результат на наш слаг, чтобы нигде на сайте не светился * настоящий адрес wp-login.php. */ public static function filter_login_url( $url, $path, $scheme = null ) { if ( in_array( $scheme, array( 'login', 'login_post' ), true ) ) { $url = str_replace( 'wp-login.php', self::get_slug(), $url ); } return $url; } /* ------------------------------------------------------------------ */ /* Настройки */ /* ------------------------------------------------------------------ */ public static function get_slug() { $slug = get_option( self::OPTION_KEY, self::DEFAULT_SLUG ); return $slug ? $slug : self::DEFAULT_SLUG; } public static function add_settings_page() { add_options_page( 'S1 Hide Admin', 'S1 Hide Admin', 'manage_options', 's1-hide-admin', array( __CLASS__, 'render_settings_page' ) ); } public static function maybe_save_settings() { if ( empty( $_POST['s1_hide_admin_nonce'] ) || ! wp_verify_nonce( $_POST['s1_hide_admin_nonce'], self::NONCE_ACTION ) ) { return; } if ( ! current_user_can( 'manage_options' ) ) { return; } $slug = isset( $_POST['s1_hide_admin_slug'] ) ? sanitize_title( wp_unslash( $_POST['s1_hide_admin_slug'] ) ) : ''; // Запрещаем очевидно ломающие значения: пустое, wp-admin, wp-login(.php). $forbidden = array( '', 'wp-admin', 'wp-login', 'wp-login.php' ); if ( in_array( $slug, $forbidden, true ) ) { add_action( 'admin_notices', function () { echo '

S1 Hide Admin: этот слаг использовать нельзя (пусто, wp-admin или wp-login). Настройка не сохранена.

'; } ); return; } update_option( self::OPTION_KEY, $slug ); add_action( 'admin_notices', function () { echo '

Адрес входа обновлён.

'; } ); } public static function render_settings_page() { $slug = self::get_slug(); $login_url = home_url( '/' . $slug ); ?>

S1 Hide Admin

Стандартные адреса wp-login.php и /wp-admin/ для неавторизованных посетителей скрыты — вместо них показывается обычная страница 404. Вход в панель управления возможен только по адресу ниже.

Важно: сохраните этот адрес, прежде чем закрывать страницу. Если вы забудете новый слаг, попасть в админку через обычный wp-login.php не получится — восстановить доступ можно будет только через переименование/удаление файла плагина по FTP или через файловый менеджер хостинга.