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

Когда и зачем нужно удалять заказы автоматически

В WooCommerce с течением времени в базе накапливаются заказы с разными статусами: отменённые, неактивные, ожидающие оплаты и т.д. Для поддержания скорости работы магазина и оптимизации базы полезно автоматически удалять заказы с определёнными статусами, например, "отменённые" или "мусорные". Это снижает нагрузку на базу данных и упрощает администрирование.

Диагностика: какие заказы можно безопасно удалить

Перед автоматическим удалением важно убедиться, что выбранные статусы действительно не нужны и не повредят учёту:

  • Отменённые (cancelled) — заказы, которые пользователь отменил или администратор пометил как отменённые.
  • Ожидающие оплаты (pending) — заказы, созданные, но не оплаченные. Можно удалять, если не планируется попытка оплаты.
  • Возвраты (refunded) — заказы с возвратом денег. Обычно их хранят для отчётности, но при желании можно удалить.

Не удаляйте заказы со статусом completed или processing, чтобы не потерять историю продаж.

Пошаговое решение: код для автоматического удаления заказов по статусу

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

function wc_auto_delete_orders_by_status() {
    if ( ! current_user_can('manage_woocommerce') ) {
        return;
    }

    $statuses_to_delete = array('cancelled', 'pending'); // Статусы для удаления
    $days_old = 30; // Удалять заказы старше 30 дней

    foreach ( $statuses_to_delete as $status ) {
        $args = array(
            'status'        => $status,
            'date_created'  => '<' . ( time() - DAY_IN_SECONDS * $days_old ),
            'limit'         => -1,
            'return'        => 'ids',
        );

        $orders = wc_get_orders( $args );
        foreach ( $orders as $order_id ) {
            wp_trash_post( $order_id ); // Перемещаем заказ в корзину
        }
    }
}

// Запускаем очистку через WP-Cron ежедневно
add_action( 'wc_auto_delete_orders_daily', 'wc_auto_delete_orders_by_status' );

if ( ! wp_next_scheduled( 'wc_auto_delete_orders_daily' ) ) {
    wp_schedule_event( time(), 'daily', 'wc_auto_delete_orders_daily' );
}

Этот код ежедневно перемещает заказы со статусами cancelled и pending старше 30 дней в корзину (удаление из базы WordPress происходит при очистке корзины).

Как проверить работу кода

  1. Создайте тестовый заказ со статусом cancelled или pending старше 30 дней (можно изменить дату напрямую в базе или через плагин для редактирования заказов).
  2. Запустите вручную задачу WP-Cron через плагин WP Crontrol или с помощью вызова функции wc_auto_delete_orders_by_status() из консоли.
  3. Проверьте, что заказ переместился в корзину (раздел "Корзина" в заказах WooCommerce).
  4. Если корзина очищена автоматически, заказ будет окончательно удалён.

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

  • Заказы не удаляются: проверьте, что WP-Cron работает корректно. Для теста можно вызвать функцию вручную.
  • Удаляются нужные заказы: внимательно проверьте список статусов в $statuses_to_delete, не включайте активные статусы.
  • Не удаляются заказы старше нужного срока: проверьте параметр $days_old и формат даты в date_created.
  • Ошибка прав доступа: функция проверяет права пользователя. Она запускается в WP-Cron, поэтому права не должны влиять. Если запускается вручную, убедитесь, что пользователь — администратор.

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

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

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

МетодПлюсыМинусы
WP-Cron с кодом в functions.phpАвтоматизация, гибкость, бесплатныйЗависит от работы WP-Cron, нагрузка на сайт
Плагины для управления заказами (например, Bulk Delete)Простой интерфейс, удобствоМожет перегружать сайт, меньше контроля
WP-CLI скриптыВысокая производительность, контроль, подходит для больших магазиновТребует доступа по SSH, знания командной строки
Как настроить автоматический импорт данных из Google Sheets в WordPress с примерами кода
15.02.2026
WooCommerce: автоматическое отключение платёжных методов при определённых условиях
10.07.2026
Как сделать автоматический импорт заданий из Яндекс Толока в WordPress
04.02.2026
Как установить и настроить OmniVideo в WordPress
25.02.2026
WooCommerce: автоматическое изменение стоимости товара при выборе способа доставки
01.07.2026