WooCommerce: как автоматически удалить товар после продажи

Диагностика задачи

В WooCommerce нередко возникает необходимость автоматически удалять товар из каталога после его продажи. Такая задача актуальна, например, для уникальных или ограниченных в наличии товаров, которые нельзя повторно продавать. Стандартного функционала для этого нет, поэтому нужно добавить кастомный код или использовать подходящие хуки.

Как определить, что товар нужно удалить после продажи

Основной критерий — успешная оплата заказа и смена статуса заказа на "завершён" (completed). В этот момент можно запускать логику удаления товара.

Почему именно статус completed?

  • Гарантирует, что оплата прошла.
  • Исключает удаление товара при отменённых или возвратных заказах.

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

Используем хук woocommerce_order_status_completed, который вызывается сразу после смены статуса заказа на completed. В обработчике получаем все товары из заказа и удаляем их.

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

Объяснение кода

  • wc_get_order — получает объект заказа.
  • $order->get_items() — получает все позиции товара в заказе.
  • wp_delete_post($product_id, true) — удаляет товар (пост типа product) без перемещения в корзину.

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

  1. Создайте тестовый товар в WooCommerce.
  2. Оформите тестовый заказ с этим товаром и оплатите его (используйте тестовые платежные методы).
  3. После смены статуса заказа на "завершён" проверьте, что товар пропал из каталога и из админки (Товары).
  4. Для дополнительной проверки можно вызвать get_post_status($product_id) — должен вернуть false, если товар удалён.

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

  • Товар не удаляется после смены статуса: проверьте, что хук woocommerce_order_status_completed срабатывает (можно добавить error_log или var_dump внутри функции).
  • Удаляется не тот товар: убедитесь, что получаете правильный product_id через $item->get_product_id(), а не variation_id или другие ID.
  • Удаление вызывает ошибки сервера: проверьте права на удаление товаров и наличие других плагинов, которые могут блокировать удаление.
  • Нужно сохранить товар, если заказ отменён: убедитесь, что функция вызывается именно при статусе completed, не раньше.

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

  • Добавьте проверку прав пользователя или контекста, если функция запускается из админки или cron, чтобы не удалить товар случайно.
  • Если товаров много, добавьте логирование действий удаления для отладки.
  • Рассмотрите возможность сначала пометить товар как "скрытый" (post_status = 'draft'), а потом удалять, чтобы избежать потери данных при ошибках.
  • Обязательно сделайте резервную копию базы данных перед внедрением кода.

Альтернативы: удаление через плагины или ручное управление

МетодПлюсыМинусы
Кастомный код на хуке woocommerce_order_status_completedГибкость, точечное удаление, автоматизацияТребует навыков программирования, риск ошибок
Ручное удаление товаров после продажиКонтроль, отсутствие риска сбоевЗатратно по времени, риск забыть
Плагины для управления запасами и товарамиДополнительные функции, удобствоЗависимость от стороннего кода, возможная нагрузка

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

  • Создать резервную копию сайта и базы данных.
  • Добавить предложенный код в файл functions.php вашей темы или в кастомный плагин.
  • Проверить логику работы на тестовом заказе.
  • Убедиться, что товары удаляются только после подтверждённой оплаты (статус completed).
  • Настроить логи или уведомления об удалении для контроля.
  • Проанализировать влияние на связанные с товаром данные (атрибуты, отзывы и т.д.).
WooCommerce: как автоматически удалить товар после продажи
01.07.2026
Как отладить проблемы с выводом картинок в WordPress
27.01.2026
Как автоматизировать обновления WordPress и плагинов
24.11.2025
Как использовать WPChecker для анализа и исправления ошибок в WordPress
03.04.2026
Как создать собственный шорткод с атрибутами в WordPress
20.02.2026