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

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

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

Проверяем, что происходит с товарами при отмене заказа:

  • Статус заказа меняется на «Отменен»;
  • Товары остаются в каталоге;
  • Если товар уникальный и не должен возвращаться в продажу, его нужно удалить вручную.

Если у вас такая ситуация — пора автоматизировать процесс.

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

1. Добавляем пользовательский код в functions.php вашей темы или в отдельный плагин

Используем хук woocommerce_order_status_cancelled, который срабатывает при смене статуса заказа на «Отменен».

add_action('woocommerce_order_status_cancelled', 'auto_delete_products_after_order_cancelled', 10, 1);
function auto_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) continue;

        // Удаляем товар без возможности восстановления
        wp_delete_post($product_id, true);
    }
}

2. Как работает код

  • При смене статуса заказа на «Отменен» вызывается функция auto_delete_products_after_order_cancelled.
  • Функция получает объект заказа и перебирает все позиции в заказе.
  • Для каждого товара вызывается wp_delete_post с параметром true — это полное удаление без помещения в корзину.

Проверка результата

Чтобы убедиться, что всё работает, сделайте следующее:

  • Создайте тестовый заказ с одним или несколькими товарами.
  • Перейдите в админку WooCommerce и смените статус заказа на «Отменен».
  • Проверьте в разделе «Товары» — удалён ли товар из каталога.
  • Если товар удалён, значит автоматизация сработала.

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

1. Товары не удаляются после отмены заказа

  • Проверьте, что хук woocommerce_order_status_cancelled действительно срабатывает. Можно добавить error_log в функцию для отладки.
  • Убедитесь, что вы используете правильный ID товара $item->get_product_id(), а не вариации $item->get_variation_id(). Если нужны вариации, нужно их тоже удалять отдельно.

2. Удаляется не тот товар или удаление происходит для всех товаров на сайте

  • Проверьте, что функция вызывается только для конкретного заказа — используйте параметр $order_id и не запускайте код вне хука.
  • Не используйте глобальные переменные вне функции.

3. Ошибки доступа или недостаточно прав

  • Код выполняется с правами пользователя, под которым работает сайт. Для удаления товаров требуется права администратора.
  • Если сайт на хостинге с ограничениями, убедитесь, что PHP-процессы могут удалять записи из базы.

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

  • Удаление товаров — операция необратимая с параметром wp_delete_post(..., true). Убедитесь, что вы хотите полностью удалить товар, а не просто скрыть его.
  • Если требуется восстановление, используйте wp_trash_post вместо удаления.
  • Для массовых заказов с большим количеством товаров можно добавить лимиты или очередь, чтобы не перегружать сервер.
  • Рекомендуется делать бэкап базы данных перед внедрением автоматического удаления.

Дополнительные варианты и сравнение

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

МетодОписаниеПлюсыМинусы
Код в functions.phpПрямое удаление через хук WooCommerceБыстро, не требует плагиновРиск ошибок, требует контроля
Плагин автоматизацииГотовые плагины для автоматических действийУдобно, поддержкаЗависимость от стороннего кода, нагрузка
Ручное удалениеАдминка WooCommerceПростоТрудозатратно, риск ошибок
Как отключить автоматическое обновление плагинов в WordPress
08.12.2025
WooCommerce: как автоматически удалять товары после отмены заказа
05.06.2026
WooCommerce: как добавить пользовательское поле в форму оплаты через хук
08.05.2026
Автоматическое удаление старых загруженных файлов в WordPress
10.04.2026
Оптимизация базы данных WordPress: практические советы
05.11.2025