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

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

В WooCommerce иногда возникает необходимость автоматически удалять товар из каталога после отмены заказа. Например, если вы продаёте товары с ограниченным запасом или уникальные позиции, которые нельзя повторно добавить. По умолчанию WooCommerce не предусматривает автоматическое удаление товаров при отмене заказа, и это надо реализовывать вручную.

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

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

1. Определяем хук для отслеживания отмены заказа

WooCommerce генерирует разные статусы заказов, в том числе cancelled. Чтобы отследить смену статуса, используем хук woocommerce_order_status_cancelled.

2. Получаем товары из отменённого заказа и удаляем их

В обработчике нужно получить все товары, входящие в заказ, и удалить их программно через функцию wp_delete_post с параметром true для полного удаления без перемещения в корзину.

Пример кода для functions.php или собственного плагина:

add_action('woocommerce_order_status_cancelled', 'wp5_delete_products_on_order_cancelled', 10, 1);
function wp5_delete_products_on_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 && get_post_type($product_id) === 'product') {
            // Удаляем товар без возможности восстановления
            wp_delete_post($product_id, true);
        }
    }
}

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

  1. Создайте тестовый заказ с одним или несколькими товарами.
  2. Перейдите в админку WooCommerce и измените статус заказа на "Отменён".
  3. Проверьте в разделе Товары, удалились ли товары из заказа.

Если товары исчезли из каталога, решение работает корректно.

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

  • Товары не удаляются после отмены заказа: Убедитесь, что хук woocommerce_order_status_cancelled срабатывает. Для отладки можно добавить error_log или var_dump внутри функции.
  • Удаляются не все товары: Проверьте, что в заказе нет вариаций товаров или комплексных продуктов. В случае вариаций используйте $item->get_variation_id() для удаления вариаций.
  • Удаление не желательно для некоторых товаров: Добавьте проверку по метаданным или категориям, чтобы исключить важные товары.

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

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

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

ВариантОписаниеПлюсыМинусы
Использование хука woocommerce_order_status_cancelled и wp_delete_postАвтоматическое удаление товаров сразу после отмены заказаПростота реализации, быстрое удалениеРиск удаления нужных товаров, необратимость
Отметка товаров через метаданные вместо удаленияТовары помечаются как "недоступные" без удаления из базыБезопаснее, можно отменитьТребует дополнительной логики для фильтрации товаров
Удаление товаров вручную через админкуАдминистратор удаляет товары по необходимостиКонтроль и безопасностьРучной труд, риск забыть удалить

Чек-лист для внедрения автоматического удаления товаров

  • Проверить, что хук woocommerce_order_status_cancelled срабатывает на вашем сайте
  • Реализовать функцию удаления товаров с проверкой типа поста
  • Протестировать на тестовом заказе
  • Сделать резервную копию базы перед внедрением
  • Добавить условие для исключения важных товаров
  • Рассмотреть использование очередей для больших объёмов
Оптимизация базы данных WordPress: практические советы и примеры
12.11.2025
Как создать динамические виджеты в WordPress: практическое руководство
24.11.2025
WooCommerce: как автоматически изменять стоимость товара при изменении атрибутов
28.05.2026
Как использовать REST API WordPress для автоматизации задач
20.02.2026
Как автоматизировать отзывы на сайте WordPress
20.12.2025