Как использовать WP-Cron для отложенных задач в WooCommerce

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

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

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

Диагностика проблемы с отложенными задачами в WooCommerce

Чтобы понять, работает ли WP-Cron корректно, проверьте следующие признаки:

  • Отложенные задачи (например, очистка заброшенных корзин) не выполняются вовремя.
  • Пользователи жалуются на задержки с обновлением статусов заказов.
  • В логах сервера отсутствуют записи о запуске задач WP-Cron.

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

Пошаговое решение: настройка надежного запуска WP-Cron для WooCommerce

1. Отключаем стандартный WP-Cron

Добавьте в wp-config.php перед строкой /* That's all, stop editing! Happy blogging. */ следующий код:

define('DISABLE_WP_CRON', true);

Это отключит запуск задач при каждом посещении сайта.

2. Создаем системное cron-задание на сервере

Настройте системный cron на сервере, который будет запускать WP-Cron с интервалом, например, каждые 10 минут.

Пример команды для cron (Ubuntu/Linux):

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

Или с помощью curl:

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

Замените https://example.com на URL вашего сайта.

3. Проверяем наличие запланированных задач WooCommerce

WooCommerce использует задачи с хуками, например, woocommerce_cleanup_sessions (очистка сессий), woocommerce_cancel_unpaid_orders (отмена неоплаченных заказов).

Используйте WP Crontrol или следующий код для вывода запланированных задач:

add_action('admin_init', function() {
  $crons = _get_cron_array();
  echo '<pre>';
  print_r(array_keys($crons));
  echo '</pre>';
});

4. Добавляем кастомные отложенные задачи, если нужно

Пример кода для отложенного запуска функции через WP-Cron (например, отправка напоминания клиенту через 1 час после заказа):

function send_order_reminder( $order_id ) {
  $order = wc_get_order( $order_id );
  if ( ! $order ) return;
  // Логика отправки письма
  wp_mail( $order->get_billing_email(), 'Напоминание о заказе', 'Спасибо за покупку!');
}

function schedule_order_reminder( $order_id ) {
  if ( ! wp_next_scheduled( 'send_order_reminder_hook', array( $order_id ) ) ) {
    wp_schedule_single_event( time() + 3600, 'send_order_reminder_hook', array( $order_id ) );
  }
}
add_action( 'woocommerce_thankyou', 'schedule_order_reminder' );
add_action( 'send_order_reminder_hook', 'send_order_reminder' );

Как проверить, что WP-Cron работает корректно

  • Убедитесь, что задачи появляются в списке WP Crontrol и время их следующего запуска актуально.
  • Проверьте логи сервера или используйте плагин Debug Bar для отладки cron.
  • Добавьте временную запись в лог внутри вашей функции, вызываемой WP-Cron, например:
error_log('Order reminder sent for order ID: ' . $order_id);
  • Проверьте, что письма или другие действия выполняются своевременно.

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

  • Задачи не запускаются из-за отключенного WP-Cron и отсутствия системного cron
    Решение: включить системный cron и отключить WP-Cron через DISABLE_WP_CRON.
  • Дублирование задач
    Решение: использовать wp_next_scheduled перед планированием, чтобы избежать повторного назначения.
  • Ошибки в функциях, вызываемых cron
    Решение: включить логирование ошибок, проверить корректность кода и правильность аргументов.
  • Проблемы с SSL или редиректами при вызове wp-cron.php
    Решение: убедиться, что URL wp-cron.php корректен, нет циклических редиректов, и сервер разрешает внутренние запросы.

Практические советы для надежной работы WP-Cron и WooCommerce

  • Используйте системный cron вместо стандартного WP-Cron для стабильности, особенно на сайтах с низкой посещаемостью.
  • Минимизируйте время выполнения задач — разделяйте тяжелые операции на несколько маленьких.
  • Используйте transient API для кеширования данных между запусками cron, если необходимо.
  • Регулярно проверяйте список запланированных задач с помощью плагинов, чтобы не было «зависших» или устаревших задач.
  • Для крупных магазинов рекомендуем комбинировать WP-Cron с внешними системами мониторинга и уведомлениями об ошибках.

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

Метод запускаПлюсыМинусы
Стандартный WP-Cron (при посещении)Не требует настройки сервера, просто в использованииЗависит от трафика, возможны задержки и пропуски
Системный cron (через crontab)Надежный, выполняется точно по расписаниюТребует доступа к серверу и базовых знаний cron
Внешние сервисы (например, EasyCron)Подходит для хостингов без доступа к cronМожет быть платным, зависит от стороннего сервиса
Как удалить старые неиспользуемые варианты оплаты в WooCommerce
14.07.2026
Автоматическая регистрация пользователей WordPress с помощью WPCommunity
05.01.2026
Автоматическая сборка сайтов на WordPress с помощью WP-Kit
08.01.2026
Как автоматизировать управление ролями и правами в WordPress
18.01.2026
Как создать динамический фильтр товаров в WooCommerce без плагинов
25.01.2026