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

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

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

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

1. Подключение к хуку отмены заказа Woocommerce

WooCommerce предоставляет несколько хуков для отслеживания статуса заказа. Для нашей задачи подходит woocommerce_order_status_cancelled - он срабатывает при смене статуса заказа на "отменен".

2. Получение товаров из заказа

Нужно получить все товары из отмененного заказа, чтобы затем удалить соответствующие товары из базы.

3. Удаление товаров программно

Удаление товара происходит через функцию wp_delete_post(), поскольку товар в WooCommerce — это кастомный тип записи (product).

add_action('woocommerce_order_status_cancelled', 'delete_products_after_order_cancelled', 10, 1);
function delete_products_after_order_cancelled($order_id) {
    if (!$order_id) {
        return;
    }
    $order = wc_get_order($order_id);
    if (!$order) {
        return;
    }
    foreach ($order->get_items() as $item) {
        $product_id = $item->get_product_id();
        if ($product_id) {
            // Проверьте, что это именно товар, а не вариация
            $product_post_type = get_post_type($product_id);
            if ($product_post_type === 'product') {
                // Удаляем товар без возможности восстановления
                wp_delete_post($product_id, true);
            }
        }
    }
}

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

Для проверки сделайте следующее:

  • Создайте тестовый заказ с одним или несколькими товарами.
  • Переведите заказ в статус "Отменен" через админку WooCommerce.
  • Проверьте, что соответствующие товары исчезли из каталога и базы данных (например, через админ-панель или запрос к базе SELECT * FROM wp_posts WHERE ID = {product_id}).

Если товары не удаляются, проверьте логи ошибок PHP и убедитесь, что функция delete_products_after_order_cancelled вызывается.

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

  • Товары не удаляются: возможно, хук не срабатывает. Проверьте, что статус действительно меняется на 'cancelled', а не на 'refunded' или другой.
  • Удаляются вариации вместо основных товаров: функция пытается удалить вариации, которые могут быть связаны с другими основными товарами. В коде выше предусмотрена проверка типа записи — не удаляйте вариации, если не уверены.
  • Ошибка прав доступа: функция wp_delete_post требует прав администратора. Убедитесь, что код выполняется в контексте с достаточными правами.
  • Потеря данных: удаление товара — необратимая операция. Рекомендуется делать резервные копии перед внедрением.

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

  • Добавьте проверку nonce или используйте capability проверки, если планируете расширять функционал для фронтенда.
  • Если товаров много, подумайте о реализации пакетного удаления через очереди, чтобы не перегружать сервер.
  • Для резервного копирования можно интегрировать Clearfy Pro (https://wpshop.ru/plugins/clearfy?utm_source=wpbegin.ru&utm_medium=article&utm_campaign=woocommerce-avtomaticheskaya-udaleniya-tovarov-posle-otmeny-zakaza) — он поможет автоматизировать чистку базы и создание бэкапов.

Таблица сравнения вариантов удаления товаров после отмены заказа

СпособПреимуществаНедостатки
Ручное удаление через админкуПростота, контрольТрудоемко, риск ошибки
Автоматический код на хуке woocommerce_order_status_cancelledПолная автоматизация, быстрое удалениеРиск случайного удаления, требует тестирования
Плагин для управления запасамиДополнительный функционал учетаМожет быть избыточным, нагрузка на сайт
Как использовать Nonces в WordPress для защиты форм и запросов
28.11.2025
WooCommerce: как автоматически удалять товар после отмены заказа
01.05.2026
Автоматическое удаление спама в комментариях WordPress
25.01.2026
WooCommerce: как автоматически удалять заказы со статусом «Отменен»
25.05.2026
Как создать выбор фильтра на AJAX в WordPress
09.01.2026