WP-Cron — это встроенная в WordPress система запуска запланированных задач, таких как публикация отложенных постов, очистка кэша, отправка email-рассылок и многое другое. Однако, по умолчанию, WP-Cron запускается только при посещении сайта, что может вызывать задержки или сбои в выполнении задач при низкой посещаемости. В этой статье мы подробно разберём, как правильно настроить удалённый запуск WP-Cron, чтобы задачи выполнялись стабильно и вовремя.
Что такое WP-Cron и почему он зависит от посещений сайта
WP-Cron — это имитация системного cron, реализованная на PHP в WordPress. Когда кто-то посещает сайт, WordPress проверяет, есть ли запланированные задачи, которые пора выполнить, и запускает их. Если сайт не посещают, задачи не выполняются, что может быть критично для проектов с низкой посещаемостью.
Проблема возрастает, если задачи требуют точного времени выполнения или ресурсоёмки. Для решения этих вопросов рекомендуется отключить встроенный WP-Cron и настроить системный cron на сервере с вызовом wp-cron.php по расписанию.
Отключение встроенного WP-Cron и настройка системного cron (Linux)
Для начала нужно отключить автоматический запуск wp-cron при посещении сайта. Для этого в wp-config.php добавьте следующую строку:
define('DISABLE_WP_CRON', true);
Это остановит запуск WP-Cron при каждом посещении.
Далее на сервере в планировщике задач (crontab) добавьте команду для запуска WP-Cron по расписанию. Например, чтобы запускать каждые 15 минут, выполните в терминале:
crontab -e
И добавьте строчку:
*/15 * * * * wget -q -O - https://ваш-сайт.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Или, если wget недоступен, используйте curl:
*/15 * * * * curl -s https://ваш-сайт.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Так вы обеспечите стабильный запуск задач WP-Cron без зависимости от посещений.
Настройка на Windows (через Планировщик заданий)
Если сервер на Windows, настройте задачу в Планировщике заданий с запуском curl или wget по аналогичной команде каждые 15 минут.
Реализация удалённого вызова WP-Cron с защитой
Чтобы защитить wp-cron.php от нежелательных вызовов, можно добавить проверку секретного ключа. Для этого создайте свой плагин или добавьте код в functions.php темы:
add_action('init', 'wponline_disable_wp_cron_without_key');
function wponline_disable_wp_cron_without_key() {
if (defined('DOING_CRON') && DOING_CRON) {
if (!isset($_GET['wponline_cron_key']) || $_GET['wponline_cron_key'] !== 'secret_key_123') {
wp_die('Access denied');
}
}
}
Теперь запускать cron нужно так:
wget -q -O - "https://ваш-сайт.ru/wp-cron.php?doing_wp_cron&wponline_cron_key=secret_key_123" >/dev/null 2>&1
Это добавит дополнительный уровень безопасности.
Пример создания собственной задачи WP-Cron с удалённым запуском
Допустим, нужно раз в час запускать задачу по удалённому сбросу кэша. Добавим функцию и зарегистрируем событие:
add_action('wponline_hourly_event', 'wponline_clear_cache');
function wponline_clear_cache() {
// Логика очистки кэша
error_log('Кэш очищен ' . current_time('mysql'));
}
function wponline_schedule_cron() {
if (!wp_next_scheduled('wponline_hourly_event')) {
wp_schedule_event(time(), 'hourly', 'wponline_hourly_event');
}
}
add_action('wp', 'wponline_schedule_cron');
Теперь при правильной настройке системного cron задача будет запускаться ежечасно.
Полезные плагины для работы с WP-Cron
- WP Crontrol — позволяет просматривать и управлять запланированными задачами через админку. Очень удобно для диагностики.
- Advanced Cron Manager — расширенные возможности управления WP-Cron с фильтрами и экспортом.
- Clearfy Pro (ссылка с метками: Clearfy Pro) — содержит инструменты для оптимизации и контроля WP-Cron.
Диагностика и отладка WP-Cron
Чтобы проверить работу cron, можно добавить в функцию задачи логирование в файл или error_log. Также с помощью плагинов типа WP Crontrol можно увидеть, когда последний раз запускалась задача.
Если задачи не выполняются, проверьте:
- Отключён ли встроенный WP-Cron (DISABLE_WP_CRON должен быть true)
- Правильно ли настроен системный cron с корректным URL
- Работает ли вызов wp-cron.php без ошибок (проверьте доступ к странице и логи)
- Нет ли блокировок со стороны брандмауэра или плагинов безопасности
Выводы и советы по настройке удалённого запуска WP-Cron
Удалённый запуск WP-Cron — простой и эффективный способ обеспечить стабильное выполнение запланированных задач на сайте, особенно при низкой посещаемости. Отключайте встроенный запуск, используйте системный cron и добавляйте защиту вызовов. Для удобства управления используйте плагины WP Crontrol или Advanced Cron Manager.
Правильная настройка WP-Cron поможет избежать задержек, ошибок и повысит надёжность работы вашего сайта на WordPress.