Что такое WP-Cron и зачем он нужен
WP-Cron — встроенный в WordPress механизм для запуска запланированных задач (cron jobs). В отличие от системного cron на сервере, WP-Cron срабатывает при заходе пользователя на сайт, что может вызвать задержки и нестабильность выполнения задач на малопосещаемых ресурсах.
Типичные задачи для WP-Cron: отправка уведомлений, очистка кэша, обновление данных, автоматический импорт или экспорт контента, публикация отложенных постов.
Диагностика проблем с WP-Cron
Первый шаг — проверить, работает ли WP-Cron корректно:
- Откройте
wp-config.phpи убедитесь, что нет константыDISABLE_WP_CRONсо значениемtrue(она отключает WP-Cron). - Выполните запрос к URL
https://ваш-сайт.ru/wp-cron.php?doing_wp_cron. Если в ответе ошибки или скрипт не запускается, значит WP-Cron не работает. - Проверьте логи сервера на наличие ошибок PHP при вызове
wp-cron.php. - Используйте плагин «WP Crontrol» для просмотра и управления запланированными задачами.
Пошаговое решение: как правильно зарегистрировать и запустить отложенную задачу
1. Регистрируем событие
Для запуска задачи через WP-Cron сначала регистрируем собственное событие и хук для его обработки.
function my_custom_cron_schedule() {
if ( ! wp_next_scheduled( 'my_custom_cron_hook' ) ) {
wp_schedule_event( time(), 'hourly', 'my_custom_cron_hook' );
}
}
add_action( 'wp', 'my_custom_cron_schedule' );Здесь мы создаём событие my_custom_cron_hook, которое будет срабатывать ежечасно.
2. Добавляем обработчик задачи
add_action( 'my_custom_cron_hook', 'my_custom_cron_function' );
function my_custom_cron_function() {
// Код задачи, например, очистка старых записей
global $wpdb;
$wpdb->query("DELETE FROM {$wpdb->prefix}posts WHERE post_status = 'trash' AND post_date < NOW() - INTERVAL 30 DAY");
}3. Запускаем WP-Cron вручную для теста
Для проверки можно вызвать функцию вручную:
do_action( 'my_custom_cron_hook' );Или отправить HTTP-запрос к wp-cron.php через браузер или инструмент curl.
Проверка результата после внедрения
- Убедитесь, что задача появляется в списке запланированных событий через плагин WP Crontrol.
- Посмотрите, что после срабатывания задачи в базе данных или логах выполнены необходимые изменения (например, удалены записи).
- Для мониторинга можно добавить логирование внутри функции:
function my_custom_cron_function() {
$log_file = WP_CONTENT_DIR . '/my_cron_log.txt';
file_put_contents( $log_file, "Task ran at: " . date('Y-m-d H:i:s') . "\n", FILE_APPEND );
// Ваша логика
}Частые ошибки при работе с WP-Cron и как их исправить
- DISABLE_WP_CRON равен true — WP-Cron не запускается. Удалите или отключите эту константу в
wp-config.php. - Сайт без посещений — WP-Cron не срабатывает, так как запускается по заходу пользователя. Решение: настроить системный cron и отключить WP-Cron.
- Ошибка 500 или таймаут при вызове
wp-cron.php— проверьте права на файл, лимиты PHP, логи сервера. - Конфликты с плагинами безопасности — некоторые блокируют запросы к
wp-cron.php, добавьте исключения или настройте правила.
Оптимизация и безопасность при работе с WP-Cron
WP-Cron может нагружать сервер, если задачи тяжелые или запускаются слишком часто. Рекомендуем:
- Для ресурсоёмких задач используйте системный cron вместо WP-Cron: в
wp-config.phpдобавьтеdefine('DISABLE_WP_CRON', true);и настройте cron на сервере (например, каждую минуту или 5 минут):
* * * * * wget -q -O - https://ваш-сайт.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1- Добавляйте nonce и проверяйте права пользователя, если задачи вызываются через AJAX или открытые URL.
- Используйте логирование и мониторинг для отслеживания сбоев.
- Ограничивайте частоту запуска задач (например, не чаще раза в час, если нет острой необходимости).
Сравнение вариантов запуска отложенных задач в WordPress
| Метод | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
| WP-Cron (по умолчанию) | Прост в настройке, не требует доступа к серверу | Зависит от посещаемости, возможны задержки | Маленькие сайты с регулярным трафиком |
| Системный cron | Точный запуск, не зависит от трафика, надежен | Требует доступа к серверу, настройка сложнее | Большие проекты, задачи с высокой нагрузкой |
| Плагины планировщика задач (например, WP Crontrol) | Удобный интерфейс, дополнительный функционал | Могут влиять на производительность | Для управления и отладки cron задач |