Как добавить логику отключения входа на wp-login.php по времени в WordPress

В некоторых случаях необходимо ограничить доступ к странице входа wp-login.php в определённые часы или дни. Это полезно для повышения безопасности сайта, когда администраторы знают, что в нерабочее время входить никто не должен. В этой статье разберём, как реализовать подобную логику отключения входа по времени в WordPress с помощью собственного кода и без сторонних плагинов.

Зачем ограничивать доступ к wp-login.php по времени

Ограничение доступа к странице входа в определённые временные промежутки помогает:

  • снизить риск взлома в нерабочее время, когда вас нет на связи;
  • исключить автоматические атаки, которые часто выполняются ночью или в выходные дни;
  • организовать дополнительный уровень контроля доступа для команды.

Это особенно актуально для сайтов с ограниченным числом администраторов и редакторов, которые могут заранее знать, когда им нужен доступ.

Как работает логика отключения входа по времени

Основная идея — анализировать время запроса к wp-login.php и в случае, если оно попадает в запрещённый интервал, блокировать доступ с выводом сообщения или перенаправлять пользователя.

Для этого используем хук login_init, который срабатывает при загрузке страницы входа.

Примерный алгоритм:

  1. Определяем текущий час и день недели на сервере.
  2. Задаём разрешённые интервалы работы.
  3. Если запрос пришёл вне этого времени — блокируем вход.

Пример кода для ограничения доступа к wp-login.php по времени

Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин:

function wplogin_ru_time_restrict_login() {
    $current_hour = (int) current_time('H'); // Получаем час по времени сайта
    $current_day = (int) current_time('N'); // День недели 1 (Пн) - 7 (Вс)

    // Разрешённое время для входа: Пн-Пт с 8 до 20
    $workdays = range(1, 5);
    $start_hour = 8;
    $end_hour = 20;

    if (in_array($current_day, $workdays)) {
        if ($current_hour < $start_hour || $current_hour >= $end_hour) {
            wp_die('Вход в административную панель разрешён только с 8:00 до 20:00 по рабочим дням.');
        }
    } else {
        // В выходные полностью закрываем вход
        wp_die('В выходные дни вход в административную панель закрыт.');
    }
}
add_action('login_init', 'wplogin_ru_time_restrict_login');

В этом примере:

  • Вход разрешён только с понедельника по пятницу с 8:00 до 20:00;
  • В выходные вход полностью запрещён;
  • При попытке входа в запрещённое время выводится сообщение и доступ блокируется.

Как сделать отображение сообщения более удобным

Функция wp_die() выводит базовую страницу ошибки. Чтобы сделать её более дружественной, можно её стилизовать, добавив HTML и CSS.

Пример:

function wplogin_ru_time_restrict_login() {
    $current_hour = (int) current_time('H');
    $current_day = (int) current_time('N');

    $workdays = range(1, 5);
    $start_hour = 8;
    $end_hour = 20;

    if (in_array($current_day, $workdays)) {
        if ($current_hour < $start_hour || $current_hour >= $end_hour) {
            $message = '<h1>Доступ запрещён</h1><p>Вход в административную панель разрешён только с 8:00 до 20:00 по рабочим дням.</p>';
            wp_die($message, 'Доступ закрыт', array('response' => 403, 'back_link' => true));
        }
    } else {
        $message = '<h1>Доступ запрещён</h1><p>В выходные дни вход в административную панель закрыт.</p>';
        wp_die($message, 'Доступ закрыт', array('response' => 403, 'back_link' => true));
    }
}
add_action('login_init', 'wplogin_ru_time_restrict_login');

Опция 'back_link' => true добавляет ссылку возврата к форме входа, что удобно для пользователей в разрешённое время.

Советы по доработке и интеграции с плагинами безопасности

Если вы используете плагины для защиты входа, например, Limit Login Attempts Reloaded или Clearfy Pro, то такую логику можно включить как дополнительный уровень защиты. При этом:

  • Сохраняйте резервную копию кода перед внесением изменений.
  • Проверьте работу на тестовом сайте.
  • Добавьте исключения для определённых IP, если нужно, чтобы сотрудники могли входить в нерабочее время.

Например, добавим исключение по IP:

function wplogin_ru_time_restrict_login() {
    $allowed_ips = array('123.45.67.89', '98.76.54.32'); // IP сотрудников
    if (in_array($_SERVER['REMOTE_ADDR'], $allowed_ips)) {
        return; // Разрешаем доступ
    }

    $current_hour = (int) current_time('H');
    $current_day = (int) current_time('N');

    $workdays = range(1, 5);
    $start_hour = 8;
    $end_hour = 20;

    if (in_array($current_day, $workdays)) {
        if ($current_hour < $start_hour || $current_hour >= $end_hour) {
            wp_die('Вход в административную панель разрешён только с 8:00 до 20:00 по рабочим дням.');
        }
    } else {
        wp_die('В выходные дни вход в административную панель закрыт.');
    }
}
add_action('login_init', 'wplogin_ru_time_restrict_login');

Выводы и рекомендации

Добавление ограничения входа по времени — простое и эффективное решение, которое улучшает безопасность WordPress без необходимости устанавливать тяжёлые плагины. Такой подход особенно полезен для сайтов с фиксированным графиком работы администраторов.

Если хотите расширить функциональность, рассмотрите интеграцию с плагинами, например, Clearfy Pro, который предлагает расширенные настройки безопасности и оптимизации.

Как автоматически разблокировать пользователей после блокировки в WordPress
12.05.2026
Как отключить кеширование страницы входа в WordPress
15.02.2026
Как автоматизировать удаление блокировок входов Limit Login Attempts в WordPress
06.06.2026
Как добавить логику отключения входа на wp-login.php по времени в WordPress
27.03.2026
Как установить ограничения по стране на вход в WordPress
12.03.2026

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