WP-Cron — это встроенная система планировщика задач в WordPress, которая отвечает за выполнение отложенных и периодических задач, таких как публикация запланированных постов, проверка обновлений, очистка кэша и многое другое. Однако нередко разработчики и владельцы сайтов сталкиваются с ситуацией, когда WP-Cron перестает работать или работает с ошибками, вызывая сбои в работе сайта и проблемы с автоматизацией.
Что такое WP-Cron и почему он может не работать
WP-Cron не использует системный cron сервера, а запускается при каждом обращении к сайту. Если на сайте низкая посещаемость, задачи могут не запускаться вовремя. Также WP-Cron может не работать из-за настроек сервера, конфликтов с плагинами или ограничений хостинга.
Основные причины неработающего WP-Cron:
- Отключенный системный вызов cron (define('DISABLE_WP_CRON', true));
- Проблемы с HTTP-запросами внутри WP (например, запрет loopback-запросов);
- Проблемы с плагинами, блокирующими wp-cron.php;
- Низкая посещаемость сайта;
- Ограничения хостинга на выполнение фоновых задач.
Как проверить статус WP-Cron и отладить его
Для диагностики проблем с WP-Cron существует несколько подходов.
Использование плагина WP Crontrol
Плагин WP Crontrol позволяет просматривать, редактировать и запускать задачи WP-Cron из административной панели. Это удобный инструмент для быстрого анализа состояния планировщика.
- Установите и активируйте плагин;
- Перейдите в меню Инструменты > Cron Events;
- Проверьте наличие запланированных задач, их время и статус;
- Попробуйте запустить задачи вручную, чтобы проверить их работоспособность.
Включение логирования WP-Cron в коде
Чтобы отследить запуск и ошибки задач, можно добавить собственное логирование в функции, которые запускаются через WP-Cron. Например:
function wpdebug_log_cron_event() {
if ( ! defined('WP_DEBUG') || ! WP_DEBUG ) {
return;
}
error_log('WP-Cron event triggered: ' . current_time('mysql'));
}
add_action('my_custom_cron_hook', 'wpdebug_log_cron_event');
Это позволит видеть в логах, вызывается ли событие.
Решение: замена WP-Cron на системный cron
Чтобы повысить надежность выполнения cron-задач, рекомендуется отключить встроенный WP-Cron и использовать системный планировщик задач на сервере.
Как отключить WP-Cron
В файл wp-config.php добавьте строку:
define('DISABLE_WP_CRON', true);
Это отключит автоматический запуск WP-Cron при обращении к сайту.
Настройка системного cron
Добавьте в планировщик задач сервера команду на регулярный запуск скрипта WP-Cron, например, каждую 5 минут:
*/5 * * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Или с помощью curl:
*/5 * * * * curl -s https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Замените https://example.com на адрес вашего сайта.
Дополнительные советы по оптимизации WP-Cron
Избегайте блокировок loopback-запросов
WP-Cron запускается через HTTP-запросы к самому себе (loopback). Если сервер блокирует такие запросы, WP-Cron не будет работать. Проверьте с помощью плагина Health Check или обратитесь к хостеру.
Минимизируйте количество тяжелых cron-задач
Слишком тяжелые или частые задачи могут перегружать сайт. Разбейте задачи на более мелкие, используйте отложенный запуск или очереди.
Использование плагина WP Rocket или Clearfy Pro для управления WP-Cron
Некоторые плагины оптимизации, например, Clearfy Pro, позволяют контролировать и оптимизировать работу WP-Cron, отключая ненужные задачи и ускоряя выполнение.
Пример создания собственной cron-задачи с отладкой
Рассмотрим пример добавления собственной задачи, которая будет выполняться ежечасно и логировать время вызова.
function wpdebug_schedule_custom_cron() {
if ( ! wp_next_scheduled( 'wpdebug_custom_cron_hook' ) ) {
wp_schedule_event( time(), 'hourly', 'wpdebug_custom_cron_hook' );
}
}
add_action( 'wp', 'wpdebug_schedule_custom_cron' );
function wpdebug_custom_cron_function() {
error_log('Custom WP-Cron event fired at ' . current_time('mysql'));
}
add_action( 'wpdebug_custom_cron_hook', 'wpdebug_custom_cron_function' );
Этот код нужно добавить в файл functions.php вашей темы или в отдельный плагин. Он создаст задачу, которая будет запускаться ежечасно и записывать время в лог ошибок PHP. Это поможет убедиться, что WP-Cron работает корректно.
Заключение
Проблемы с WP-Cron — частая боль для разработчиков WordPress. Правильная диагностика, использование плагинов для контроля и переход на системный cron решают большинство проблем. Важно помнить, что при использовании WP-Cron на сайтах с низкой посещаемостью системный cron — это более стабильное и надежное решение.
Для удобного мониторинга и оптимизации WP-Cron можно использовать Clearfy Pro, а для управления задачами — WP Crontrol.