WooCommerce: автоматическое отключение неактивных заказов

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

В интернет-магазинах на WooCommerce часто накапливаются заказы, которые остаются в статусе ожидания оплаты или обработки длительное время. Это мешает анализу продаж, усложняет управление заказами и влияет на производительность базы данных.

Проблема: заказ долго не двигается между статусами, например, «on-hold» или «pending», и не отменяется автоматически.

Для диагностики:

  • Проверьте количество заказов в статусах pending и on-hold через панель администратора WooCommerce (WooCommerce → Заказы).
  • Используйте SQL-запрос для подсчёта заказов по статусам:
    SELECT post_status, COUNT(ID) as total FROM wp_posts WHERE post_type = 'shop_order' GROUP BY post_status;
  • Если много заказов в статусах ожидания, значит автоматизация нужна.

Пошаговое решение: автоматическое отключение неактивных заказов

1. Создание функции для автоматической отмены заказов

Добавим код в файл functions.php дочерней темы или подключаемый плагин:

function wprobot_auto_cancel_inactive_orders() {
    $days_inactive = 7; // число дней неактивности
    $date = date('Y-m-d H:i:s', strtotime('-' . $days_inactive . ' days'));

    $args = array(
        'limit' => -1,
        'status' => array('pending', 'on-hold'),
        'date_created' => '<' . $date
    );

    $orders = wc_get_orders($args);

    foreach ($orders as $order) {
        $order->update_status('cancelled', 'Автоматическая отмена заказа из-за неактивности.');
    }
}

2. Настройка расписания с помощью WP-Cron

Добавим запуск функции раз в сутки:

function wprobot_schedule_auto_cancel() {
    if (!wp_next_scheduled('wprobot_daily_cancel_orders')) {
        wp_schedule_event(time(), 'daily', 'wprobot_daily_cancel_orders');
    }
}
add_action('wp', 'wprobot_schedule_auto_cancel');

add_action('wprobot_daily_cancel_orders', 'wprobot_auto_cancel_inactive_orders');

3. Очистка при деактивации

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

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

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

  • Создайте тестовый заказ в статусе pending или on-hold с датой создания более 7 дней назад (можно вручную в базе данных подправить post_date).
  • Запустите вручную функцию wprobot_auto_cancel_inactive_orders() через WP CLI или добавьте временный вызов в админке.
  • Проверьте, что статус заказа изменился на cancelled.
  • Убедитесь, что заказы с датой создания менее 7 дней не изменились.

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

  • Функция не запускается по расписанию: Проверьте, активен ли WP-Cron, нет ли запрета на HTTP-запросы. Можно использовать плагин WP Crontrol для диагностики.
  • Заказы не меняют статус: Убедитесь, что используете правильные статусы и что wc_get_orders возвращает заказы. Проверьте права пользователя и логи ошибок.
  • Ошибка в формате даты: Дату передавайте строго в формате Y-m-d H:i:s, используйте strtotime правильно.

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

  • Не запускайте функцию чаще, чем раз в сутки, чтобы не нагружать сервер.
  • Добавьте логирование отменённых заказов в отдельный файл или таблицу для аудита.
  • Ограничьте количество обрабатываемых заказов за один запуск, если их очень много, чтобы избежать таймаутов.
  • Для больших магазинов используйте WP CLI и планировщик задач сервера вместо WP-Cron.

Сравнение вариантов реализации автоматической отмены заказов

МетодПлюсыМинусыПример
Код с WP-Cron Гибко, бесплатно, кастомизация Зависит от WP-Cron, нагрузка на сайт Пример из статьи
Плагин автоматизации (например, WP All Import с cron) Простота, интерфейс Платно, меньше гибкости Плагин с настройками
Серверный cron + WP CLI Высокая производительность, надежность Требует доступа к серверу wp cron event run + wp wc order update
Как автоматически отключить и заменить файлы CSS в WordPress
22.01.2026
Как настроить автоматический импорт контента из RSS в WordPress
13.04.2026
Как автоматически создавать выделенные посты в WordPress с помощью категорий
11.03.2026
Как автоматизировать создание записей в WordPress с помощью роботов
03.11.2025
Как автоматизировать создание и управление вариантами выбора в WordPress
24.03.2026