Что такое WP-Cron и зачем он нужен
WP-Cron — это система планировщика задач в WordPress, которая позволяет запускать запланированные события, например, публикацию отложенных постов, очистку кеша, отправку писем и другие автоматические процедуры без необходимости настраивать системный cron на сервере.
Диагностика проблем с WP-Cron
Основные признаки неправильной работы WP-Cron:
- Отложенные посты не публикуются вовремя;
- Не запускаются задачи автоматического обновления плагинов или очистки;
- Задачи, завязанные на WP-Cron, выполняются с задержкой или не выполняются вовсе.
Проверить, вызывается ли WP-Cron, можно добавив в wp-config.php следующий код:
define('DISABLE_WP_CRON', true);Если задачи перестали выполняться — значит, WP-Cron действительно отключен. Также можно посмотреть логи сервера на предмет ошибок при обращении к wp-cron.php.
Как настроить WP-Cron для надёжной работы
Отключение встроенного WP-Cron и настройка системного cron
WP-Cron запускается при каждом запросе к сайту, что не всегда удобно и надёжно. Для сайтов с низкой посещаемостью или высокими требованиями к точности задач рекомендуем отключить встроенный WP-Cron и настроить системный 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 каждую минуту.
Регистрация пользовательских событий в WP-Cron
Для создания своих планировщиков используйте следующие шаги:
function my_custom_cron_schedule($schedules) {
if (!isset($schedules['every_five_minutes'])) {
$schedules['every_five_minutes'] = array(
'interval' => 300, // 5 минут в секундах
'display' => 'Каждые 5 минут'
);
}
return $schedules;
}
add_filter('cron_schedules', 'my_custom_cron_schedule');
function my_custom_cron_task() {
// Ваш код, который должен выполняться по расписанию
error_log('Моя задача WP-Cron выполнена: ' . date('Y-m-d H:i:s'));
}
if (!wp_next_scheduled('my_custom_cron_hook')) {
wp_schedule_event(time(), 'every_five_minutes', 'my_custom_cron_hook');
}
add_action('my_custom_cron_hook', 'my_custom_cron_task');Проверка результата после настройки
Для проверки выполненных задач:
- Используйте плагины, например, WP Crontrol, чтобы просмотреть и управлять запланированными задачами.
- Проверьте логи сервера или журнал ошибок PHP, в нашем примере будет запись в
error_log. - Проверьте, выполняются ли отложенные задачи сайта своевременно.
Частые ошибки и их исправление
- DISABLE_WP_CRON установлен, но системный cron не настроен
Задачи не выполняются вовсе. Решение: добавить системный cron или убрать константу. - Конфликты с плагинами, которые отключают WP-Cron
Проверяйте плагины, связанные с кешированием и оптимизацией, иногда они блокируют вызовыwp-cron.php. - Неправильный URL в системном cron
Убедитесь, что URLwp-cron.php?doing_wp_cronкорректен и доступен с сервера. - Ошибки в пользовательских задачах
Если ваш код вызывает фатальные ошибки, задача не выполнится. Логируйте ошибки и тестируйте код отдельно.
Практические советы по безопасности и производительности
- Ограничьте доступ к wp-cron.php с помощью
.htaccessили конфигурации сервера, чтобы запросы могли делать только локальные процессы. - Минимизируйте время выполнения задач — тяжелые операции выносите в отдельные скрипты, вызываемые по cron, чтобы не блокировать сайт.
- Используйте специализированные плагины для управления cron, например, WP Crontrol, если нужно удобное UI для админов.
- Для высоконагруженных сайтов лучше полностью отказаться от WP-Cron и настроить системный cron с подходящим интервалом.
Сравнение способов запуска WP-Cron
| Способ | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
| Встроенный WP-Cron | Прост в настройке, работает сразу из коробки | Зависит от посещаемости сайта, может запускаться с задержками | Низкая нагрузка, не критичные задачи |
| Системный cron с отключенным WP-Cron | Точный запуск, стабильная работа | Требует доступа к серверу, настройка cron | Высоконагруженные сайты, критичные задачи |