WP-Cron — это встроенная система планирования задач в WordPress, которая позволяет запускать определённые действия по расписанию. Несмотря на кажущуюся простоту, многие разработчики сталкиваются с проблемами её настройки и стабильной работы, особенно на высоконагруженных сайтах или при специфических хостинг-конфигурациях.
Что такое WP-Cron и почему он важен для WordPress
WP-Cron имитирует системный cron, но запускается не по времени, а при загрузке страниц сайта. Это значит, что если на сайт не заходят посетители, задачи не будут выполняться. Для многих сайтов с низким трафиком это становится проблемой, так как отложенные задачи, например, отправка писем или очистка кэша, могут не сработать вовремя.
WP-Cron отвечает за множество важных функций: публикация отложенных постов, проверка обновлений, рассылки и многое другое. Неправильная его работа может привести к сбоям в работе сайта.
Поэтому важно правильно настраивать WP-Cron и, при необходимости, заменять его системным cron для стабильности.
Как проверить, работает ли WP-Cron на вашем сайте
Для начала нужно убедиться, что WP-Cron вообще запускается. Самый простой способ — использовать плагин WP Crontrol. Он позволяет просматривать и управлять запланированными задачами прямо из админки WordPress.
Установите плагин, перейдите в Инструменты > Cron Events и посмотрите список задач. Если список пустой или задачи не выполняются, значит WP-Cron сработал неправильно.
Также можно вручную проверить выполнение задач через wp-cron.php, вызвав его в браузере:
https://ваш-сайт.ru/wp-cron.php?doing_wp_cron
Если после вызова задача сработала, значит WP-Cron запускается, но, возможно, не автоматически.
Отключение встроенного WP-Cron и настройка системного cron
Чтобы избежать зависимостей от посещений сайта, лучше отключить встроенный WP-Cron и настроить системный cron на сервере.
Для отключения встроенного WP-Cron добавьте в wp-config.php следующую строку:
define('DISABLE_WP_CRON', true);
Далее нужно добавить задание в системный cron. Пример настройки для Linux-сервера:
* * * * * wget -q -O - https://ваш-сайт.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Это позволит запускать файл wp-cron.php каждую минуту, гарантируя своевременное выполнение задач.
Для пользователей хостинга Beget, Timeweb и др. есть веб-интерфейсы для настройки cron, где вы можете прописать аналогичное задание.
Пример создания собственной отложенной задачи с WP-Cron
Давайте рассмотрим, как создать простую отложенную задачу, которая будет записывать время выполнения в лог.
Добавьте следующий код в файл functions.php вашей темы или в кастомный плагин:
function wpeducation_schedule_custom_event() {
if (!wp_next_scheduled('wpeducation_custom_cron_event')) {
wp_schedule_event(time(), 'hourly', 'wpeducation_custom_cron_event');
}
}
add_action('wp', 'wpeducation_schedule_custom_event');
function wpeducation_custom_cron_function() {
$log = WP_CONTENT_DIR . '/wpeducation-cron.log';
$current_time = date('Y-m-d H:i:s');
file_put_contents($log, "Custom WP-Cron event fired at: $current_time\n", FILE_APPEND);
}
add_action('wpeducation_custom_cron_event', 'wpeducation_custom_cron_function');
Объяснение:
wpeducation_schedule_custom_event— функция для регистрации задачи, которая будет запускаться каждый час.wpeducation_custom_cron_function— функция, которая выполняется по расписанию и записывает время в лог.- Файл лога создается в директории
wp-content.
Расширенные интервалы для WP-Cron
По умолчанию WordPress поддерживает интервалы «hourly» (часовой), «twicedaily» (2 раза в день) и «daily» (ежедневный). Для более гибкого планирования можно добавить свои интервалы.
Добавим, например, интервал в 15 минут:
function wpeducation_custom_cron_schedules($schedules) {
$schedules['every_fifteen_minutes'] = array(
'interval' => 900, // 900 секунд = 15 минут
'display' => __('Каждые 15 минут')
);
return $schedules;
}
add_filter('cron_schedules', 'wpeducation_custom_cron_schedules');
Теперь можно использовать этот интервал при планировании задач:
wp_schedule_event(time(), 'every_fifteen_minutes', 'wpeducation_custom_cron_event');
Типичные проблемы с WP-Cron и способы их решения
1. Задачи не выполняются — чаще всего связано с отключенным встроенным WP-Cron или отсутствием посещений сайта. Решение — настройка системного cron.
2. Множественные запуски одной задачи — если задача не удаляется после выполнения, она может дублироваться. Используйте wp_clear_scheduled_hook() для очистки.
3. Ошибки при выполнении кода задач — всегда обрабатывайте исключения внутри функций, вызываемых WP-Cron, чтобы не нарушать последовательность выполнения.
Полезные плагины для работы с WP-Cron
- WP Crontrol — управление cron задачами из админки.
- Clearfy Pro — оптимизация и управление производительностью, в том числе CI cron задач.
Заключение
WP-Cron — мощный инструмент, но требует правильной настройки и понимания особенностей работы. Для стабильной работы на высоконагруженных сайтах рекомендую переходить на системный cron, а для разработки и отладки использовать плагины типа WP Crontrol. Добавление собственных задач и расширение расписания позволит автоматизировать множество процессов на сайте.