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Удобство, готовые функцииМогут влиять на производительность, ограниченная кастомизация
Как удалить старые медиа файлы из библиотеки WordPress
08.12.2025
Автоматическое добавление метаданных к товарам в WooCommerce через код
18.05.2026
WooCommerce: автоматическое удаление нерабочих корзин по срокам через код
13.06.2026
WooCommerce: автоматическое добавление метаданных к товарам через код
20.06.2026
Автоматический анализ изображений в WordPress с помощью AI: практическое руководство
08.04.2026