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

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

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

Пример: магазин уникальных арт-объектов, цифровых лицензий с ограниченным доступом или разовых услуг. Решение нужно реализовать именно на уровне WooCommerce, без ручного удаления.

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

  • Товар не имеет вариаций или опций, т.к. удаление вариаций требует особой обработки.
  • Количество товара ограничено (обычно 1).
  • Товар не используется в других заказах или корзинах.

Если эти условия выполняются, автоматизация удаления будет полезна.

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

1. Используем хук woocommerce_order_status_completed

Этот хук срабатывает, когда заказ переводится в статус «завершён». Здесь можно получить все товары заказа и удалить их с сайта.

2. Код для удаления товаров

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

Этот код полностью удаляет пост товара из базы, включая все его данные.

3. Дополнительные условия удаления

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

// Например, удаляем только товары с мета 'is_unique' = 'yes'
if (get_post_meta($product_id, 'is_unique', true) === 'yes') {
    wp_delete_post($product_id, true);
}

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

  • Создайте тестовый заказ с уникальным товаром.
  • Переведите заказ в статус «завершён» (manual или автоматический переход).
  • Проверьте, исчез ли товар из каталога и из списка товаров в админке.
  • Убедитесь, что при попытке добавить товар в корзину после удаления выдаётся ошибка.

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

  • Товар не удаляется после смены статуса: проверьте, что хук подключён и функция вызывается. Для отладки можно добавить error_log внутри функции.
  • Удаление товара удаляет связанные данные, но отзывы и заказы остаются: это нормальное поведение, заказы сохраняются в истории.
  • Товар отображается в кэше после удаления: очистите кеш плагинов и браузера.
  • Удаление происходит слишком рано, товар нужен для других заказов: добавьте логику проверки количества заказов с этим товаром до удаления.

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

  • Удаление товара — необратимая операция с параметром wp_delete_post($id, true). Для безопасности можно сначала переводить товар в статус «черновик» или «скрытый» и удалять вручную.
  • При большом количестве товаров в заказе используйте транзакции или очереди, чтобы не создавать нагрузку.
  • Добавляйте резервное копирование базы данных перед внедрением автоматического удаления.
  • Для удобства помечайте товары, которые нужно удалять, мета-полем, чтобы избежать случайных удалений.

Сравнение подходов: плагин vs код

МетодПреимуществаНедостатки
Ручное удаление через админкуПростота, контрольТрудоёмко, риск забыть
Плагин автоматического удаленияУдобство, настройкиЗависимость от стороннего кода, нагрузка
Код в functions.php (пример выше)Лёгкая кастомизация, отсутствие сторонних зависимостейТребует навыков, риск ошибок при неправильной логике
Как удалить старые ревизии постов WordPress без эффекта на производительность
02.01.2026
Как сделать адаптивные таблицы в WordPress с помощью шорткодов
29.12.2025
Как добавить дополнительное поле в форму регистрации WordPress
22.12.2025
WooCommerce: как автоматически удалять отзывы после оплаты заказа
03.06.2026
Автопостинг и автопубликация в WordPress — настройка и лучшие плагины
09.11.2025