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

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

WP-Cron — это встроенная система планировщика задач в WordPress, которая имитирует поведение cron на сервере. Она позволяет запускать определённые функции по расписанию, например, проверять обновления, отправлять письма, очищать кэш, публиковать отложенные записи. Однако WP-Cron не является настоящим системным cron и зависит от посещений сайта, что может приводить к задержкам в выполнении задач.

Диагностика проблем с WP-Cron: почему задачи не выполняются вовремя

Если задачи WP-Cron не срабатывают, это часто связано с тем, что:

  • На сайте низкая посещаемость — WP-Cron запускается только при загрузке страницы.
  • В настройках сервера отключены HTTP-запросы к самому себе, блокируются loopback-запросы.
  • Плагины или правила безопасности блокируют запросы wp-cron.php.
  • В конфигурации WordPress или сервера отключён WP-Cron (define('DISABLE_WP_CRON', true);).

Для проверки работы WP-Cron можно использовать плагин WP Crontrol. Он показывает запланированные задачи, время их следующего запуска и позволяет запускать задачи вручную.

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

1. Проверка и включение WP-Cron

Убедитесь, что в wp-config.php нет строки, отключающей WP-Cron:

define('DISABLE_WP_CRON', true);

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

2. Настройка системного cron для запуска wp-cron.php

Из-за недостатков стандартного WP-Cron рекомендуем настроить системный cron на сервере, чтобы вызывать wp-cron.php регулярно, например, каждую минуту:

* * * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Или через curl:

* * * * * curl -s https://example.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1

После этого в wp-config.php нужно отключить стандартный WP-Cron, чтобы избежать двойного запуска:

define('DISABLE_WP_CRON', true);

3. Создание своей задачи WP-Cron

Добавим пример задачи, которая будет запускаться каждую минуту и писать в лог время выполнения:

function my_custom_cron_job() {
    error_log('WP-Cron сработал в ' . current_time('mysql'));
}

// Регистрируем интервал в 1 минуту
add_filter('cron_schedules', function($schedules) {
    if (!isset($schedules['every_minute'])) {
        $schedules['every_minute'] = [
            'interval' => 60,
            'display' => 'Каждую минуту'
        ];
    }
    return $schedules;
});

// Регистрируем событие, если не зарегистрировано
if (!wp_next_scheduled('my_custom_cron_job_hook')) {
    wp_schedule_event(time(), 'every_minute', 'my_custom_cron_job_hook');
}

// Привязываем функцию к хуку
add_action('my_custom_cron_job_hook', 'my_custom_cron_job');

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

  • Установите плагин WP Crontrol и проверьте, что ваша задача отображается в списке Scheduled Events с корректным интервалом и временем следующего запуска.
  • Проверьте логи PHP (error_log) — должна появляться запись с текущим временем при выполнении задачи.
  • Если настроен системный cron, убедитесь, что он запускается (проверьте логи сервера или сделайте тестовый запрос вручную).

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

Ошибка 1: Задачи WP-Cron не запускаются в нужное время

  • Причина: отсутствие посетителей, отключён loopback-запрос или блокировка wp-cron.php
  • Решение: настроить системный cron и отключить стандартный WP-Cron (define('DISABLE_WP_CRON', true);).

Ошибка 2: Дублирование задач при повторном подключении плагина

  • Причина: функция wp_schedule_event вызывается без проверки существующих задач
  • Решение: всегда проверяйте через wp_next_scheduled() перед добавлением новой задачи.

Ошибка 3: Задача не выполняется из-за неправильного хука

  • Причина: не совпадает название хука в add_action и wp_schedule_event
  • Решение: использовать одинаковые имена и внимательно проверять код.

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

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

Сравнение вариантов запуска WP-Cron

МетодПлюсыМинусыРекомендации
Стандартный WP-Cron (запуск при посещении)Прост в использовании, не требует настройки сервераЗависит от посещаемости, задержки в выполнении задачПодходит для сайтов с высокой посещаемостью
Системный cron (через crontab)Точный запуск, не зависит от посещаемостиТребует доступа к серверу и базовых навыков настройкиРекомендуется для бизнеса и критичных задач
Комбинированный подходГибкость и резервное выполнение задачСложнее в поддержкеДля крупных проектов с разными типами задач
Как использовать функцию wp_enqueue_script для добавления собственных скриптов в WordPress
26.04.2026
Как использовать WP-Cron для автоматизации задач в WordPress
09.05.2026
Как создать автозаполняемый формат данных в WordPress для удобного ввода
05.02.2026
Как правильно удалить оставшиеся заказы WooCommerce без ошибок
09.06.2026
Как использовать фильтр woocommerce_order_item_product для добавления пользовательских данных к товарам заказа в WooCommerce
19.05.2026