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

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

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

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

1. Подключение к хуку после завершения заказа

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

2. Проверка, был ли товар уже куплен ранее

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

3. Код для удаления товаров после первого заказа

add_action('woocommerce_order_status_completed', 'wp7_remove_products_after_first_order', 10, 1);function wp7_remove_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) {            // Удаляем товар из каталога            wp_trash_post($product_id);        }    }}

Этот код помещается в файл functions.php вашей темы или в отдельный кастомный плагин. Функция переводит товар в корзину (trash), что безопаснее, чем полное удаление.

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

1. Создайте тестовый товар в WooCommerce и опубликуйте его.
2. Оформите заказ с этим товаром и переведите его в статус "завершён" (можно вручную в админке).
3. Проверьте каталог товаров — заказанный товар должен быть перемещён в корзину (trash), то есть исчез из витрины.

Для проверки можно зайти в админку Товары > Корзина и убедиться, что товар там.

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

  • Товар не удаляется после заказа: проверьте, что статус заказа действительно меняется на "завершён", и что хук подключён правильно.
  • Ошибка при удалении товара: убедитесь, что wp_trash_post() вызывается с корректным ID. Иногда в заказе бывают вариации товаров — используйте $item->get_product_id(), а не $item->get_id().
  • Удаляется не тот товар: если в заказе есть вариации, и вы хотите удалять только родительский товар, используйте $item->get_variation_id() и дополнительно проверяйте тип товара.
  • Пользователь может купить товар повторно: если нужно ограничить покупку, лучше дополнительно ограничить количество продаж через WooCommerce настройки или отдельный фильтр.

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

  • Используйте wp_trash_post(), а не wp_delete_post(), чтобы сохранить возможность восстановления товара.
  • Если на сайте много заказов, добавьте ограничение на запуск кода только для нужных товаров, чтобы не влиять на производительность.
  • Для цифровых товаров лучше использовать статусы доступа (например, ограничение покупки через настройки товара), а не удалять их из базы.
  • Для массового контроля продаж и удаления товаров рассмотрите интеграцию с WPShop Clearfy для оптимизации базы данных и удаления устаревших записей.

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

МетодОписаниеПлюсыМинусы
Удаление через wp_trash_post() на хуке завершения заказаАвтоматическое перемещение в корзину товаров из завершённого заказаПростота, безопасность (возможность восстановления), быстрый запускТовар не полностью удалён, может занимать место
Полное удаление через wp_delete_post()Удаление товара из базы данныхНе занимает место, товар полностью удалёнРиск утраты данных, невозможность восстановления
Ограничение покупки товара через фильтры WooCommerceЗапрет повторных заказов товара без удаленияБезопасность, контроль продажНе удаляет товар из каталога
Как удалить корзину WooCommerce из меню без плагинов
29.04.2026
Как отключить email-уведомления в WordPress без плагинов
06.03.2026
Как автоматизировать обновление контента в WordPress без плагинов
25.12.2025
Как установить ограничения на количество публикаций для пользователей в WordPress
21.04.2026
Как создать многослойную форму в WordPress с помощью AJAX
03.02.2026