Как использовать WP-Cron для автоматизации задач в WordPress

Что такое WP-Cron и зачем он нужен

WP-Cron — системный механизм WordPress для планирования и выполнения запланированных задач (cron jobs) без необходимости настраивать системный cron на сервере. Он запускает задачи при загрузке сайта, что подходит для большинства проектов, но имеет свои особенности и ограничения.

Диагностика проблем с WP-Cron

Если автоматические задачи не выполняются, например, автоматическая публикация, очистка кэша или отправка писем, вероятные причины:

  • WP-Cron отключен в wp-config.php через define('DISABLE_WP_CRON', true);
  • Низкий трафик на сайте — задачи запускаются только при посещении страниц
  • Конфликт плагинов или тем, блокирующих выполнение WP-Cron
  • Ошибки в коде задач, из-за которых они не завершаются
  • Проблемы с сервером или временем выполнения PHP

Как проверить работу WP-Cron

Добавьте в functions.php следующий код, чтобы логировать запуск cron:

add_action('my_custom_cron_hook', function() {
    error_log('WP-Cron сработал: ' . current_time('mysql'));
});

if (!wp_next_scheduled('my_custom_cron_hook')) {
    wp_schedule_event(time(), 'hourly', 'my_custom_cron_hook');
}

Затем проверьте файл debug.log в папке wp-content (если включено логирование ошибок) после обновления страниц сайта. Если записи есть — WP-Cron работает.

Пошаговое решение: настройка и оптимизация WP-Cron

1. Проверяем, не отключён ли WP-Cron

Откройте wp-config.php и убедитесь, что нет строки:

define('DISABLE_WP_CRON', true);

Если есть — удалите или закомментируйте.

2. Настраиваем системный cron для запуска WP-Cron (рекомендуется на высоконагруженных сайтах)

Отключите WP-Cron в WordPress:

define('DISABLE_WP_CRON', true);

Добавьте системное задание в crontab (замените путь к сайту):

*/15 * * * * wget -q -O - https://ваш-сайт.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Это запустит WP-Cron каждые 15 минут независимо от трафика.

3. Создаём собственное крон-задание с кодом

Добавьте в functions.php или плагин:

function my_custom_cron_job() {
    // Пример: удаляем посты из черновиков старше 30 дней
    global $wpdb;
    $wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_status = 'draft' AND post_date < NOW() - INTERVAL 30 DAY");
}
add_action('my_custom_cron_hook', 'my_custom_cron_job');

if (!wp_next_scheduled('my_custom_cron_hook')) {
    wp_schedule_event(time(), 'daily', 'my_custom_cron_hook');
}

Проверка результата после внедрения

Для проверки:

  • Проверьте в админке раздел Инструменты → Состояние сайта → Cron Events (если доступно) наличие вашего задания.
  • Проверьте логи ошибок или создайте логирование внутри функции.
  • Смоделируйте выполнение вручную, вызвав хук через WP-CLI: wp cron event run my_custom_cron_hook.

Частые ошибки и как их исправить

  • Нет запуска задач при низком трафике: Решение — настроить системный cron, чтобы запускать WP-Cron по расписанию.
  • Множественные запуски одних и тех же задач: Проверьте, не создаётся ли несколько событий с одинаковым хуком. Используйте wp_next_scheduled() для проверки перед планированием.
  • Задачи не выполняются из-за таймаутов: Оптимизируйте код внутри функций cron, увеличьте max_execution_time или разбейте задачу на части.
  • Ошибки при выполнении функций: Используйте обработчики ошибок и логируйте исключения внутри cron-функций.

Практические советы по безопасности и производительности

  • Не выполняйте тяжелые задачи в WP-Cron без разбивки на части и проверки времени выполнения.
  • Используйте nonce и проверки прав пользователей, если cron-функции вызываются через AJAX или внешние запросы.
  • Ограничьте доступ к wp-cron.php через .htaccess или firewall, если настроен системный cron — чтобы предотвратить внешние вызовы.
  • Для больших сайтов с большим трафиком лучше полностью отключить WP-Cron и запускать системный cron.

Сравнение вариантов управления WP-Cron

ВариантПлюсыМинусыРекомендации
WP-Cron по умолчаниюНе требует настройки сервера, простой запускЗависит от трафика, возможны задержкиПодходит для небольших сайтов
Отключение WP-Cron + системный cronТочный запуск по расписанию, не зависит от трафикаТребуется доступ к серверу, настройка crontabРекомендуется для средних и больших проектов
Плагины для управления WP-CronУдобный интерфейс, мониторингДополнительная нагрузка, возможны конфликтыИспользовать при необходимости отладки и контроля
Автоматическое создание отзывов в WordPress с помощью WPExpert Review
16.03.2026
Как удалить по умеренному варианту неактивных пользователей в WordPress
04.05.2026
Как автоматически удалять неиспользуемые медиафайлы в WordPress
04.01.2026
Внутренняя переадресация в WordPress: как сделать без плагинов
03.12.2025
Как автоматически создавать миниатюры для картинок в WordPress
23.12.2025