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

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

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

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

  • Товар остаётся в каталоге даже после оформления заказа с ним.
  • Запись товара не меняет статус, не скрывается и не удаляется.
  • В админке WooCommerce товар по-прежнему отображается как опубликованный.

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

Для реализации решения нам нужно:

  1. Отслеживать статус заказа, когда он становится «завершённым» (completed).
  2. Выбирать все товары из заказа.
  3. Удалять товары программно, используя стандартные функции WordPress.

Для этого добавим следующий код в functions.php вашей темы или в кастомный плагин:

add_action('woocommerce_order_status_completed', 'wc_delete_products_after_first_order', 10, 1);
function wc_delete_products_after_first_order($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) {
            // Проверяем, существует ли товар
            $product = wc_get_product($product_id);
            if ($product) {
                // Удаляем товар без возможности восстановления (force delete)
                wp_delete_post($product_id, true);
            }
        }
    }
}

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

  • Хук woocommerce_order_status_completed вызывается при смене статуса заказа на «завершённый».
  • Функция получает объект заказа, перебирает все позиции (товары) и удаляет их с помощью wp_delete_post с параметром true, чтобы обойти корзину.

Вариант с изменением статуса товара вместо удаления

Если хотите не удалять сразу, а скрывать товар (например, чтобы сохранить данные), замените удаление на смену статуса:

$product->set_status('draft');
$product->save();

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

  1. Создайте тестовый заказ с одним или несколькими товарами.
  2. Переведите его статус в «завершённый» через админку WooCommerce.
  3. Проверьте каталог товаров: заказанные позиции должны исчезнуть (либо стать черновиками).
  4. В админке WordPress убедитесь, что товары удалены или имеют нужный статус.

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

  • Товары не удаляются: Проверьте, что код добавлен в правильное место и активен. Убедитесь, что хук woocommerce_order_status_completed срабатывает (можно добавить error_log для отладки).
  • Удаляются не все товары из заказа: Возможно, некоторые товары — вариации. Используйте $item->get_variation_id() для удаления вариаций, если нужно.
  • Удаление товара нарушает работу связанных данных: Обдумайте, не нужны ли вам связи с заказами, статистикой или SEO. Вместо удаления можно переводить товар в статус «черновик».
  • Проблемы с правами: Убедитесь, что пользователь, под которым запускается код, имеет права на удаление постов.

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

  • Удаление товаров — необратимая операция, лучше делать резервные копии базы перед внедрением.
  • Если магазин большой, удаление многих товаров одновременно может замедлить работу. Рассмотрите отложенную обработку через WP-Cron.
  • Для прозрачности и аудита можно логировать ID удаляемых товаров в отдельный файл или метаполе.
  • В случае использования вариаций учитывайте, что их нужно удалять отдельно от родительского товара.

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

МетодПлюсыМинусы
Полное удаление (wp_delete_post)Товар полностью исчезает, экономия местаНевозможность восстановления, потеря связанной статистики
Перевод в статус черновикаМожно восстановить, сохраняется историяТовар остаётся в базе, может отображаться в поиске, если не фильтровать
Удаление вариаций отдельноТочный контроль над данными вариацийСложнее реализовать, нужен дополнительный код

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как создать автоматический импорт данных из внешнего API в WordPress
11.02.2026
Как использовать хуки в WordPress для расширения функциональности
11.11.2025
Как удалить неиспользуемые шорткоды в WordPress: эффективные методы и примеры кода
18.02.2026
Как удалить неиспользуемые изображения в WordPress и освободить место
23.12.2025
Как автоматически отключать поддержку Gutenberg в WordPress
28.03.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее