В некоторых случаях необходимо ограничить доступ к странице входа wp-login.php в определённые часы или дни. Это полезно для повышения безопасности сайта, когда администраторы знают, что в нерабочее время входить никто не должен. В этой статье разберём, как реализовать подобную логику отключения входа по времени в WordPress с помощью собственного кода и без сторонних плагинов.
Зачем ограничивать доступ к wp-login.php по времени
Ограничение доступа к странице входа в определённые временные промежутки помогает:
- снизить риск взлома в нерабочее время, когда вас нет на связи;
- исключить автоматические атаки, которые часто выполняются ночью или в выходные дни;
- организовать дополнительный уровень контроля доступа для команды.
Это особенно актуально для сайтов с ограниченным числом администраторов и редакторов, которые могут заранее знать, когда им нужен доступ.
Как работает логика отключения входа по времени
Основная идея — анализировать время запроса к wp-login.php и в случае, если оно попадает в запрещённый интервал, блокировать доступ с выводом сообщения или перенаправлять пользователя.
Для этого используем хук login_init, который срабатывает при загрузке страницы входа.
Примерный алгоритм:
- Определяем текущий час и день недели на сервере.
- Задаём разрешённые интервалы работы.
- Если запрос пришёл вне этого времени — блокируем вход.
Пример кода для ограничения доступа к 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, который предлагает расширенные настройки безопасности и оптимизации.