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

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

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

Проверить количество таких заказов можно через SQL-запрос к базе данных или через админку WooCommerce в разделе "Заказы" с фильтром по статусу on-hold или pending.

SELECT COUNT(ID) FROM wp_posts WHERE post_type = 'shop_order' AND post_status IN ('wc-pending', 'wc-on-hold');

Как реализовать автоматическое удаление неактивных заказов

Выбор критериев удаления

Чаще всего необходимо удалять заказы, которые находятся в статусе wc-pending или wc-on-hold и не обновлялись более определенного времени, например, 7 дней. Это исключит удаление активных или недавно созданных заказов.

Добавление кода в functions.php или отдельный плагин

Для автоматизации процесса создадим функцию, которая будет запускаться по крону и удалять неактивные заказы.

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

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

    $orders = wc_get_orders($args);

    foreach ($orders as $order) {
        // Удаляем заказ
        wp_trash_post($order->get_id());
    }
}

// Регистрируем крон задачу, если она еще не существует
if (!wp_next_scheduled('wc_delete_old_pending_orders_hook')) {
    wp_schedule_event(time(), 'daily', 'wc_delete_old_pending_orders_hook');
}

// Хук на выполнение функции
add_action('wc_delete_old_pending_orders_hook', 'wc_delete_old_pending_orders');

Объяснение кода

  • Используется WP Cron для ежедневного запуска задачи.
  • Поиск заказов со статусом pending и on-hold, дата последнего изменения которых более 7 дней назад.
  • Удаление найденных заказов через wp_trash_post, чтобы можно было восстановить при необходимости.

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

Для проверки работоспособности:

  • Создайте тестовый заказ со статусом pending и установите дату последнего изменения более 7 дней назад (можно вручную в базе данных или через плагины для редактирования дат).
  • Запустите вручную крон задачу в PHP или через WP Crontrol (плагин) командой:
do_action('wc_delete_old_pending_orders_hook');

Проверьте, что заказ переместился в корзину (Trash) в админке WooCommerce. Если все работает — задача будет выполнять очистку автоматически.

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

  • Крон не запускается: WP Cron зависит от посещений сайта. Для проверки используйте плагин WP Crontrol или настройте системный cron на сервере.
  • Заказы не удаляются: Проверьте правильность статусов и даты последнего обновления. В WooCommerce статусы должны иметь префикс wc-, но в методах API указывается без префикса.
  • Удаляются активные заказы: Проверьте условие даты и статус, чтобы не затронуть нужные заказы.
  • Проблемы с правами: Убедитесь, что пользователь, под которым выполняется код, имеет права на удаление постов.

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

  • Используйте wp_trash_post вместо wp_delete_post для возможности восстановления.
  • Не задавайте слишком короткий срок (меньше 3 дней), чтобы не потерять заказы, которые еще могут быть оплачены.
  • В больших магазинах делайте удаление пакетами (например, лимит 50 заказов за запуск), чтобы не перегружать сервер.
  • Реализуйте логирование удалений, например, через error_log или запись в отдельный файл/таблицу для аудита.

Сравнение вариантов удаления заказов в WooCommerce

МетодПреимуществаНедостатки
Удаление через WP Cron и кодАвтоматизация, гибкость, контроль через кодЗависит от крон задач, требует навыков программирования
Ручное удаление через админкуПростота, нет кодаНеэффективно при большом количестве заказов
Плагины очистки WooCommerceУдобство, готовые функцииМогут влиять на производительность, ограниченная кастомизация
WooCommerce: автоматическое добавление метаданных к товарам через код
20.06.2026
Автоматический генератор текстов для блоков Gutenberg с использованием AI в WordPress
28.02.2026
Как автоматизировать создание и размещение видео в WordPress с помощью OmniVideo
05.04.2026
Как создать автоматический анализ качества кода в WordPress
24.03.2026
WooCommerce: автоматическая обработка возвратов с помощью хуков
06.05.2026