Что такое WP-Cron и зачем он нужен в WordPress
WP-Cron — это встроенная система планировщика задач в WordPress, которая позволяет автоматически запускать определённые функции по расписанию. Она используется для выполнения повторяющихся действий: публикация отложенных постов, очистка кэша, отправка уведомлений и многое другое. В отличие от системных cron-задач на сервере, WP-Cron запускается при обращении пользователей к сайту, что имеет свои плюсы и ограничения.
Диагностика проблем с WP-Cron
Основные признаки проблем с WP-Cron:
- Отложенные публикации не выходят в запланированное время.
- Не запускаются автоматические задачи плагинов, например, очистка базы данных.
- Снижение производительности из-за частых обращений к wp-cron.php.
Проверить состояние WP-Cron можно с помощью плагина WP Crontrol. Он позволяет увидеть список запланированных событий и запустить их вручную.
Пошаговое решение: правильная настройка WP-Cron с системным cron
Шаг 1. Отключение встроенного WP-Cron
В файле wp-config.php добавьте строку:
define('DISABLE_WP_CRON', true);Это отключит запуск WP-Cron при каждом обращении к сайту.
Шаг 2. Настройка системного cron на сервере
В Linux-системах добавьте в cron задачу (например, запуск каждые 10 минут):
*/10 * * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1Или, если есть доступ к PHP CLI, можно использовать прямой вызов:
*/10 * * * * php /path/to/your/site/wp-cron.php >/dev/null 2>&1Замените https://example.com и путь к сайту на свои.
Шаг 3. Проверка работы cron-задач
Для тестирования можно вручную вызвать cron-события через WP Crontrol или добавить тестовое событие:
function wpacademy_test_cron_event() {
error_log('WP-Cron event triggered at ' . current_time('mysql'));
}
add_action('wpacademy_test_cron_hook', 'wpacademy_test_cron_event');
if (!wp_next_scheduled('wpacademy_test_cron_hook')) {
wp_schedule_event(time(), 'hourly', 'wpacademy_test_cron_hook');
}Затем проверить файл debug.log для записи о срабатывании.
Как проверить результат после внедрения
- Убедитесь, что в списке cron-событий в WP Crontrol нет ошибок.
- Проверьте логи сервера на наличие вызовов
wp-cron.php. - Проверьте, что отложенные публикации выходят в назначенное время.
- Отсутствуют ли избыточные запросы к
wp-cron.phpпри посещении сайта.
Частые ошибки при работе с WP-Cron и как их исправить
- WP-Cron не запускается из-за кеширования страниц. Решение: исключите
wp-cron.phpиз кеша или отключите кеширование для него. - Некорректный URL в cron-задаче системного cron. Проверьте правильность URL и доступность сайта.
- Ошибка прав доступа у файла
wp-cron.php. Проверьте права на файл и папку сайта. - Много частых вызовов wp-cron.php замедляют сайт. Отключите встроенный cron и используйте системный cron с оптимальным интервалом.
Практические советы по безопасности и производительности
- Запретите доступ к
wp-cron.phpс внешних IP, если не используете удалённый запуск. - Используйте HTTP-заголовок
X-Requested-With: XMLHttpRequestили параметрdoing_wp_cronдля защиты от прямого доступа. - Оптимальный интервал запуска системного cron — 10-15 минут, чтобы не создавать лишней нагрузки.
- При большом трафике на сайте лучше использовать системный cron, чтобы избежать одновременных запусков WP-Cron.
Сравнение вариантов запуска WP-Cron
| Метод | Преимущества | Недостатки |
|---|---|---|
| Встроенный WP-Cron (по умолчанию) | Не требует настройки, запускается автоматически при посещении сайта | Не срабатывает при отсутствии трафика, может создавать нагрузку на сайт при большом трафике |
| Системный cron (Linux cron) | Точный запуск по расписанию, снижает нагрузку на сайт | Требует доступа к серверу и настроек, не всегда доступен на shared-хостингах |
| Внешние сервисы (cron-job.org и др.) | Работает независимо от сервера, подходит для сайтов на shared-хостингах | Зависимость от стороннего сервиса, требует безопасности при вызовах |