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

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

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

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

  • Товар доступен к покупке только один раз.
  • Необходимо исключить повторное появление товара в каталоге.
  • Автоматизация процесса без ручного удаления.

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

1. Используем хук woocommerce_order_status_completed для обработки статуса заказа

Для удаления товаров после успешного завершения заказа нужно отследить момент смены статуса заказа на «завершён». Для этого используется хук woocommerce_order_status_completed.

add_action('woocommerce_order_status_completed', 'auto_delete_products_after_purchase', 10, 1);

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

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

function auto_delete_products_after_purchase($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);
        }
    }
}

3. Ограничиваем удаление только для нужных товаров

Если требуется удалять только определённые товары, например, с конкретной категорией или меткой, добавьте проверку перед удалением.

function auto_delete_products_after_purchase($order_id) {
    $order = wc_get_order($order_id);
    foreach ($order->get_items() as $item) {
        $product_id = $item->get_product_id();
        if (!$product_id) {
            continue;
        }

        // Проверка категории товара
        if (has_term('one-time-sale', 'product_cat', $product_id)) {
            wp_delete_post($product_id, true);
        }
    }
}

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

Чтобы убедиться, что автоматическое удаление работает корректно:

  • Оформите тестовый заказ с товаром, который должен удалиться.
  • Переведите заказ в статус «завершён» (если не происходит автоматически).
  • Проверьте в панели WordPress в разделе Товары, что товар удалён.
  • Попробуйте найти старую ссылку на товар — должна выдаваться 404 ошибка.

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

Ошибка 1: Товары не удаляются после смены статуса заказа

Причина: функция не подключена или неправильно указан хук.

Проверьте, что код добавлен в файл functions.php темы или в кастомный плагин, а хук woocommerce_order_status_completed используется правильно.

Ошибка 2: Удаляются все товары без фильтрации

Причина: отсутствует проверка категории или метки товара.

Добавьте проверку с помощью has_term(), чтобы ограничить удаление целевой группой товаров.

Ошибка 3: Удаление вызывает ошибки или блокирует заказ

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

Добавьте проверки на существование товара, а также используйте приоритет хука не ниже 10, чтобы дать WooCommerce завершить внутренние процессы.

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

  • Удаление товаров — необратимая операция, рекомендуется делать резервное копирование базы данных перед внедрением.
  • Для магазинов с большим количеством заказов и товаров лучше реализовать очередь удаления через WP Cron, чтобы не нагружать сервер при массовых заказах.
  • Добавьте логирование удаляемых товаров для отслеживания операций и возможного восстановления данных.
  • Избегайте удаления товаров, которые могут быть связаны с другими заказами или настроены как вариации — это может привести к ошибкам.

Сравнение подходов: плагин vs кастомный код

МетодПреимуществаНедостатки
Готовый плагинПростота установки, интерфейс управления, поддержка обновленийМожет быть избыточным, замедлять сайт, ограниченная кастомизация
Кастомный кодТочный функционал, лёгкий, полностью под контролем разработчикаТребует навыков программирования, возможные ошибки при неправильной реализации
Создание автоматических отчетов в WordPress с WPRemark
08.03.2026
Оптимизация базы данных WordPress: практические советы от WPID
04.11.2025
WooCommerce: как автоматически удалять заказы по статусу после оплаты
31.05.2026
Как отключить визуальные рендеры в WordPress для ускорения сайта
12.04.2026
Как использовать REST API для создания простого плагина WordPress
03.12.2025