Что такое WP-Cron и зачем он нужен
WP-Cron — встроенная система планировщика задач в WordPress, которая позволяет запускать события по расписанию. В отличие от системного cron на сервере, WP-Cron запускается при загрузке страниц сайта, что может привести к пропуску или задержкам задач на слабых или малопосещаемых сайтах.
Практическое применение WP-Cron — автоматический запуск заданий: очистка кеша, отправка email-уведомлений, обновление данных, импорт контента и прочее.
Диагностика проблем с WP-Cron
Если задачи не выполняются вовремя, вероятные причины:
- Низкий трафик на сайте — WP-Cron запускается только при посещении страниц;
- Отключён WP-Cron в
wp-config.php; - Внешние вызовы заблокированы (например, сервер не разрешает loopback-запросы);
- Конфликты с плагинами или темой.
Проверить работоспособность WP-Cron можно с помощью плагинов, например WP Crontrol. Он позволяет посмотреть запланированные события и запускать их вручную.
Пошаговое решение: как настроить и использовать WP-Cron для автоматических задач
1. Проверка и включение WP-Cron
Убедитесь, что в wp-config.php нет строки:
define('DISABLE_WP_CRON', true);Если есть — удалите или закомментируйте.
2. Регистрация собственного события
Добавим в functions.php темы или в плагин пример задачи, которая будет выполняться раз в час:
if (! wp_next_scheduled('wpb_hourly_event')) {
wp_schedule_event(time(), 'hourly', 'wpb_hourly_event');
}
add_action('wpb_hourly_event', 'wpb_do_this_hourly');
function wpb_do_this_hourly() {
// Ваша задача, например, очистка временных данных
error_log('WP-Cron сработал: очистка временных данных');
}3. Создание кастомного интервала (если нужно)
По умолчанию доступны 'hourly', 'twicedaily', 'daily'. Добавим интервал раз в 10 минут:
add_filter('cron_schedules', 'wpb_add_ten_min_interval');
function wpb_add_ten_min_interval($schedules) {
$schedules['every_ten_minutes'] = array(
'interval' => 600, // 600 секунд = 10 минут
'display' => 'Каждые 10 минут'
);
return $schedules;
}
if (! wp_next_scheduled('wpb_ten_min_event')) {
wp_schedule_event(time(), 'every_ten_minutes', 'wpb_ten_min_event');
}
add_action('wpb_ten_min_event', 'wpb_do_this_every_ten_minutes');
function wpb_do_this_every_ten_minutes() {
error_log('WP-Cron сработал: задача каждые 10 минут');
}Как проверить результат после внедрения
- Установите плагин WP Crontrol и проверьте, что ваши события отображаются в списке запланированных.
- Выполните принудительный запуск задачи через интерфейс плагина и проверьте логи сервера или
error_log. - Подождите некоторое время и убедитесь, что задачи выполняются автоматически в соответствии с расписанием.
- При необходимости используйте WP CLI команду
wp cron event run --due-nowдля запуска задач вручную.
Частые ошибки при работе с WP-Cron и как их исправить
- DISABLE_WP_CRON установлен в true: WP-Cron отключён, задачи не запускаются. Уберите или закомментируйте эту строку в
wp-config.php. - Плохая работа loopback-запросов: WP-Cron использует внутренние HTTP-запросы к самому себе. Если хостинг блокирует loopback, задачи не выполняются. Проверьте с помощью
Site Healthв админке. - Нет трафика на сайте: WP-Cron запускается только при посещениях, на слабом трафике задачи задерживаются. Решение — настроить системный cron и отключить WP-Cron (см. следующий пункт).
- Конфликты с плагинами: Некоторые плагины могут влиять на cron-события. Отключите недавно установленные плагины для проверки.
Альтернативы и оптимизация: использование системного cron вместо WP-Cron
WP-Cron не идеально подходит для сайтов с низким трафиком. Лучшее решение — отключить WP-Cron и настроить системный cron на сервере:
- В
wp-config.phpдобавить:
define('DISABLE_WP_CRON', true);- Настроить системный cron, который будет обращаться к сайту каждые 5 минут:
* * * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1<Или с использованием curl:
* * * * * curl --silent https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1Сравнение вариантов запуска cron
| Метод | Плюсы | Минусы | Рекомендации |
|---|---|---|---|
| WP-Cron (по умолчанию) | Не требует настройки на сервере, работает сразу | Зависит от посещаемости, может запускаться с задержками | Подходит для сайтов с хорошим трафиком |
| Системный cron | Точная периодичность, не зависит от посещений | Требует доступа к серверу и навыков настройки | Рекомендуется для всех серьезных проектов |
Практические советы по безопасности и производительности WP-Cron
- Не запускайте тяжелые задачи в WP-Cron без ограничения частоты, чтобы не перегружать сервер.
- Для сложных процессов используйте асинхронные очереди или внешние сервисы, WP-Cron — не предназначен для критически важных задач.
- Ограничьте доступ к
wp-cron.phpчерез .htaccess или firewall, если используете системный cron, чтобы предотвратить злоупотребления. - Для мониторинга и отладки используйте плагины типа WP Crontrol и логи ошибок.