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

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

WP-Cron — внутренний планировщик задач WordPress, который позволяет запускать определённые действия по расписанию. В контексте WooCommerce WP-Cron полезен для автоматизации повторяющихся задач, например, автоматического обновления статусов заказов, очистки устаревших данных или отправки напоминаний.

Диагностика: почему WP-Cron не работает или работает с задержкой

Частая проблема с WP-Cron — он запускается только при посещении сайта, поэтому если трафик низкий, задачи могут запускаться с задержкой или вообще не запускаться.

  • Проверьте, активен ли WP-Cron: в файле wp-config.php не должна быть установлена константа DISABLE_WP_CRON в true.
  • Проверьте наличие задач: используйте плагин WP Crontrol для просмотра и управления запланированными задачами.
  • Проверьте логи ошибок сервера и WooCommerce на предмет сбоев при выполнении задач.

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

Шаг 1. Создаём функцию для обработки заказов

function wppuzzle_woocommerce_auto_update_orders() {
    // Получаем заказы со статусом "обработка" старше 3 дней
    $args = [
        'limit' => -1,
        'status' => 'processing',
        'date_created' => '<' . ( time() - 3 * DAY_IN_SECONDS )
    ];
    $orders = wc_get_orders($args);

    foreach ($orders as $order) {
        // Меняем статус на "завершён"
        $order->update_status('completed', 'Автоматическое обновление статуса после 3 дней обработки');
    }
}

Шаг 2. Регистрируем WP-Cron событие при инициализации темы или плагина

add_action('wppuzzle_auto_update_orders_hook', 'wppuzzle_woocommerce_auto_update_orders');

function wppuzzle_schedule_auto_update_orders() {
    if (! wp_next_scheduled('wppuzzle_auto_update_orders_hook')) {
        // Запускаем задачу раз в сутки
        wp_schedule_event(time(), 'daily', 'wppuzzle_auto_update_orders_hook');
    }
}
add_action('wp', 'wppuzzle_schedule_auto_update_orders');

Шаг 3. Очистка расписания при деактивации плагина или темы

function wppuzzle_clear_auto_update_orders_schedule() {
    $timestamp = wp_next_scheduled('wppuzzle_auto_update_orders_hook');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wppuzzle_auto_update_orders_hook');
    }
}
register_deactivation_hook(__FILE__, 'wppuzzle_clear_auto_update_orders_schedule');

Как проверить, что задача работает

  • Убедитесь, что в админке WooCommerce в заказах есть заказы со статусом processing старше 3 дней.
  • Проверьте, что после запуска WP-Cron эти заказы меняют статус на completed.
  • Используйте плагин WP Crontrol для ручного запуска события wppuzzle_auto_update_orders_hook и просмотра логов.
  • Добавьте в функцию запись в лог, например, error_log('WP-Cron обработал заказы');, чтобы удостовериться в вызове.

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

  • WP-Cron не запускается из-за DISABLE_WP_CRON: Проверьте wp-config.php и удалите или измените define('DISABLE_WP_CRON', true);.
  • Задача не добавляется в расписание: Убедитесь, что хук wp срабатывает (например, используйте init вместо).
  • Функция не находит заказы: Проверьте правильность параметров wc_get_orders, используйте отладку или var_dump.
  • Сбой из-за таймаута: Если обработка занимает много времени, разбейте задачу на части или используйте WP CLI для запуска.

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

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

Сравнение вариантов автоматизации заказов WooCommerce

МетодПлюсыМинусыПример
WP-CronЛегко настроить
Не требует доступа к серверу
Зависит от посещаемости сайта
Может работать с задержкой
Пример выше
Системный cronТочный тайминг
Стабильность
Требует доступа к серверу
Настройка сложнее
curl https://example.com/wp-cron.php?doing_wp_cron
Плагины автоматизацииУдобный интерфейс
Дополнительные функции
Может замедлить сайт
Зависит от стороннего кода
WP Crontrol, AutomateWoo
Как добавить виджет отзывов с подтверждением на WordPress
19.02.2026
Как использовать Advanced Custom Fields для создания комплексных форм в WordPress
17.01.2026
Как использовать REST API для создания собственных эндпоинтов в WordPress
11.01.2026
Оптимизация AJAX-запросов в WordPress: практические советы и примеры кода
13.11.2025
Как удалить или отключить REST API WordPress без потери функциональности
25.01.2026