Что такое WP-Cron и зачем он нужен в WordPress?
WP-Cron — это встроенный механизм планировщика задач в WordPress, который позволяет автоматически запускать определённые действия по расписанию без необходимости настройки системного cron на сервере. Он широко используется для автоматического обновления контента, очистки базы данных, отправки уведомлений и других регулярных операций.
Диагностика проблем с WP-Cron
Если автозадачи в WordPress не выполняются, возможны следующие причины:
- WP-Cron отключён (define('DISABLE_WP_CRON', true) в wp-config.php).
- Плохой трафик на сайт — WP-Cron запускается при посещении сайта, если посетителей мало, задачи не выполняются вовремя.
- Ошибки в коде запланированных задач.
- Конфликты с плагинами, блокирующими запросы.
Проверить состояние WP-Cron можно, вызвав в браузере URL https://site.com/wp-cron.php?doing_wp_cron — при нормальной работе должна происходить перезапуск задач без ошибок.
Пошаговое решение: как правильно настроить и использовать WP-Cron
1. Проверка и активация WP-Cron
Убедитесь, что в файле wp-config.php нет строки define('DISABLE_WP_CRON', true); или она закомментирована. Если планируется использовать системный cron, отключать WP-Cron можно, но с организацией вызовов вручную.
2. Регистрация собственной задачи
Для автоматизации создадим задачу, которая будет запускаться каждый час и выполнять полезное действие, например, удалять устаревшие черновики.
function wplite_schedule_hourly_event() {
if (!wp_next_scheduled('wplite_hourly_cleanup')) {
wp_schedule_event(time(), 'hourly', 'wplite_hourly_cleanup');
}
}
add_action('wp', 'wplite_schedule_hourly_event');
function wplite_cleanup_old_drafts() {
global $wpdb;
$days = 30; // удалять черновики старше 30 дней
$sql = $wpdb->prepare(
"DELETE FROM $wpdb->posts WHERE post_status = 'draft' AND post_modified < NOW() - INTERVAL %d DAY",
$days
);
$wpdb->query($sql);
}
add_action('wplite_hourly_cleanup', 'wplite_cleanup_old_drafts');3. Использование системного cron для повышения надёжности
Если сайт имеет низкий трафик, рекомендуем отключить WP-Cron и настроить системный cron:
- Добавьте в
wp-config.phpстроку:define('DISABLE_WP_CRON', true); - Настройте системный cron на сервере (пример для Linux):
*/15 * * * * wget -q -O - https://site.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1<Это вызовет WP-Cron каждые 15 минут, обеспечив регулярное выполнение задач.
Как проверить, что WP-Cron работает корректно
- Перейдите на URL
https://site.com/wp-cron.php?doing_wp_cron— не должно быть ошибок. - С помощью плагина WP Crontrol посмотрите список запланированных событий и дату следующего запуска.
- Добавьте тестовую задачу с логированием и проверьте появление записей в логах.
Частые ошибки при работе с WP-Cron и их исправление
- Задачи не запускаются — проверьте, не отключён ли WP-Cron (DISABLE_WP_CRON), и наличие посещений сайта.
- Дублирующиеся задачи — убедитесь, что
wp_next_scheduledкорректно проверяет существование задачи перед планированием. - Ошибки в callback функции — используйте
error_logили WP_DEBUG для отладки. - Проблемы с правами доступа — системный cron может не иметь доступа к wp-cron.php, проверьте права и URL.
Практические советы по безопасности и производительности
- Используйте nonce и проверку прав в callback-функциях, если они вызываются по REST или AJAX.
- Не перегружайте WP-Cron слишком частыми задачами — выбирайте разумные интервалы.
- Для ресурсоёмких операций используйте асинхронные вызовы или внешние очереди.
- Плагины, как Clearfy Pro, могут помочь оптимизировать работу WP-Cron и очистку базы от лишних задач.
Сравнение вариантов запуска WP-Cron
| Метод | Плюсы | Минусы |
|---|---|---|
| Встроенный WP-Cron | Не требует настройки сервера, легко использовать | Зависит от посещаемости сайта, не всегда точный тайминг |
| Системный cron | Точный запуск по расписанию, не зависит от трафика | Требует доступа к серверу, настройка сложнее |