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

Что такое 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 на сервере:

  1. В wp-config.php добавить:
define('DISABLE_WP_CRON', true);
  1. Настроить системный 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 и логи ошибок.
Как создать автоматические уведомления в WordPress с помощью хуков и плагинов
07.02.2026
Как отключить Emoji в WordPress: пошаговое руководство
07.04.2026
WooCommerce: как автоматически удалять заказы и товары со статусом «Отменен»
21.06.2026
Динамическая система оценок в WordPress с использованием AJAX
14.04.2026
Как создать собственный шорткод в WordPress: пошаговое руководство
31.10.2025