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

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

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

Проверим, есть ли у вас подобная задача. Если вы продаёте уникальные вещи, единичные билеты, услуги с ограниченным числом или цифровые продукты с лимитом, автоматическое удаление избавит вас от ошибок и ускорит обработку заказов.

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

1. Критерии срабатывания

Удалять нужно только те товары, которые были куплены в завершённом (статус "завершён") заказе. Лучше ограничить по типу товара или категории, чтобы не удалять все подряд.

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

Этот хук срабатывает при смене статуса заказа на «завершённый». Напишем функцию, которая проверит товары в заказе и удалит их.

add_action('woocommerce_order_status_completed', 'wpq_delete_products_after_sale', 10, 1);
function wpq_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();
        $product = wc_get_product( $product_id );

        // Проверяем тип товара, например, только простые
        if ( $product && $product->is_type('simple') ) {
            // Удаляем товар
            wp_delete_post( $product_id, true );
        }
    }
}

3. Ограничение удаления по категории

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

if ( has_term( 'unikalnye-tovary', 'product_cat', $product_id ) ) {
    wp_delete_post( $product_id, true );
}

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

1. Создайте тестовый товар и добавьте его в заказ.

2. Измените статус заказа на завершён вручную в админке WooCommerce.

3. Проверьте, что товар исчез из каталога (в разделе Товары).

4. Убедитесь, что удаление произошло без ошибок — проверьте логи сервера и ошибок WordPress (если включён WP_DEBUG).

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

  • Товар не удаляется: проверьте права пользователя, под которым выполняется код; убедитесь, что ваш код подключен и хук срабатывает.
  • Удаляются не те товары: добавьте дополнительные проверки по типу и категории товара.
  • Удаление приводит к ошибкам базы: убедитесь, что используете wp_delete_post( $product_id, true ) с параметром true для полного удаления.
  • Удалённые товары остаются в кэше: очистите кэш сайта и кэш браузера.

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

  • Перед удалением товара можно создать резервную копию или переместить его в черновики, заменив wp_delete_post на wp_trash_post.
  • Если на сайте много заказов одновременно, удаление большого количества товаров может нагружать сервер — оптимальнее удалять товары пакетно через cron.
  • Ограничьте удаление только товарами нужного типа и категории, чтобы избежать случайного удаления.
  • Добавьте логирование действий удаления, чтобы отслеживать процесс и ошибки.

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

МетодПлюсыМинусыПодходит для
Удаление с помощью хука woocommerce_order_status_completedПростая реализация, удаление сразу после покупкиНагрузка при большом числе заказов, риск удаления нужных товаров без фильтровМалые и средние магазины с уникальными товарами
Удаление по cron с периодической проверкой заказовМеньшая нагрузка, возможность пакетной обработкиЗадержка удаления, сложнее в реализацииБольшие магазины, много заказов
Ручное удаление через админкуМаксимальный контрольРучной труд, риск ошибкиМагазины с редкими уникальными товарами
WooCommerce: как автоматически очищать корзину после отмены заказа
21.05.2026
WooCommerce не отображает атрибуты продуктов: как исправить
19.04.2026
Как автоматизировать управление ролями пользователей в WordPress
14.03.2026
WooCommerce: как избежать проблем с автообновлением продуктов и автоматической очисткой корзины
16.07.2026
Как создать и использовать собственные таблицы в базе данных WordPress
24.11.2025