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

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

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

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

1. Подключение к событию создания заказа

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

add_action('woocommerce_order_status_completed', 'remove_products_after_first_order');
function remove_products_after_first_order($order_id) {
    $order = wc_get_order($order_id);
    if (!$order) return;
    
    foreach ($order->get_items() as $item) {
        $product_id = $item->get_product_id();
        wp_delete_post($product_id, true); // Полное удаление товара
    }
}

2. Дополнительная проверка — удалять только уникальные товары

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

add_action('woocommerce_order_status_completed', 'remove_unique_products_after_order');
function remove_unique_products_after_order($order_id) {
    $order = wc_get_order($order_id);
    if (!$order) return;
    
    foreach ($order->get_items() as $item) {
        $product_id = $item->get_product_id();
        $is_unique = get_post_meta($product_id, '_is_unique_product', true);
        if ($is_unique) {
            wp_delete_post($product_id, true);
        }
    }
}

Для пометки товара как уникального добавьте мета-ключ _is_unique_product со значением 1.

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

Для проверки:

  • Создайте тестовый заказ с товаром, который должен удаляться.
  • Измените статус заказа на «завершён» в админке WooCommerce.
  • Проверьте в админке «Товары» — товар должен исчезнуть.
  • Проверьте в базе данных (таблица wp_posts) — соответствующая запись должна быть удалена.

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

  • Товар не удаляется после смены статуса заказа. Проверьте, срабатывает ли хук woocommerce_order_status_completed. Можно добавить error_log внутри функции для отладки.
  • Удаляется не тот товар. Убедитесь, что используете $item->get_product_id(), а не $item->get_variation_id(), если товары вариативные. Для вариаций может потребоваться удалять именно вариацию.
  • Удаление вызывает ошибки или удаляется продукт с заказами. Убедитесь, что используется wp_delete_post($product_id, true) для полного удаления, и что нет ограничений на удаление в вашей базе.
  • Функция удаляет все товары. Добавьте условия для фильтрации товаров, если нужно удалять не все.

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

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

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

МетодПлюсыМинусы
Удаление через хук woocommerce_order_status_completedПростая реализация, удаление после оплатыНельзя отменить удаление, нагрузка при массовых заказах
Добавление флага и удаление через отдельный WP-CronКонтролируемая нагрузка, можно отменить удалениеСложнее в реализации, задержка удаления
Использование плагина для управления продажами уникальных товаровГотовое решение, дополнительный функционалДополнительные расходы, возможная избыточность
Как добавить собственные поля в WordPress без плагинов
11.11.2025
Как создать автоматические бэкапы в WordPress с помощью плагинов
10.02.2026
Уникальные методы бэкапа базы данных WordPress в 2024 году
17.04.2026
WooCommerce: как изменить правила автоматического удаления товаров после первого заказа
25.07.2026
Как создать собственный шорткод в WordPress
31.10.2025