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

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

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

Основные вопросы:

  • Как отследить факт первой продажи товара?
  • Как автоматически изменить статус товара или удалить его?
  • Как избежать конфликта с кешированием и другими плагинами?

Пошаговое решение: реализация через хук WooCommerce

1. Отслеживаем факт продажи товара

Лучший хук для отслеживания успешных заказов — woocommerce_order_status_completed. Он срабатывает после смены статуса заказа на "завершён".

add_action('woocommerce_order_status_completed', 'wps_remove_product_after_first_sale', 10, 1);

2. Функция удаления товара после первой продажи

В функции перебираем товары из заказа, проверяем, была ли уже продажа этого товара, и если нет — удаляем его.

function wps_remove_product_after_first_sale($order_id) {
    if (!$order_id) return;
    $order = wc_get_order($order_id);

    foreach ($order->get_items() as $item) {
        $product_id = $item->get_product_id();

        // Проверяем, был ли товар продан ранее
        $total_sales = get_post_meta($product_id, 'total_sales', true);
        if (!$total_sales || intval($total_sales) <= 1) {
            // Устанавливаем статус товара в "черновик" или удаляем
            // Рекомендуется сначала менять статус, чтобы избежать потери данных
            wp_update_post(array(
                'ID' => $product_id,
                'post_status' => 'draft'
            ));

            // Если хотите полностью удалить товар, раскомментируйте следующую строку
            // wp_delete_post($product_id, true);
        }
    }
}

3. Возможные варианты действия с товаром

Удалять товар полностью — радикально и необратимо. Лучше сначала переводить в статус draft или private. Это позволит сохранить данные товара и при необходимости восстановить.

ДействиеОписаниеПлюсыМинусы
Изменение статуса на draftТовар скрывается из каталога, но сохраняется в админкеБезопасно, можно вернутьТовар не удаляется, занимает место
Удаление поста товараПолное удаление товара из базы данныхОсвобождает ресурсы, полностью убирает товарНевозможно восстановить без бэкапа

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

  • Создайте тестовый товар с типом «Простой продукт».
  • Оформите заказ с этим товаром и переведите заказ в статус «Завершён».
  • Перейдите в каталог WooCommerce и проверьте статус товара — он должен быть «черновик» или удалён, в зависимости от реализации.
  • Проверьте, что товар не отображается в каталоге для покупателей.

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

  • Функция не срабатывает после оплаты: Убедитесь, что заказ действительно получил статус «completed». Для тестов можно вручную сменить статус заказа через админку.
  • Товар не скрывается или не удаляется: Проверьте права пользователя, под которым выполняется скрипт, и наличие ошибок в логах PHP.
  • Удаление товара ломает сайт: Лучше сначала использовать смену статуса, чтобы избежать ошибок связанных с удалёнными товарами в заказах.
  • Кэш не обновляется: Очистите кеш сайта и браузера, особенно если используете плагины кеширования.

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

  • Используйте смену статуса товара вместо удаления для сохранения истории и возможности отката.
  • Добавьте проверку nonce и прав пользователя, если функция вызывается через AJAX или форму.
  • Оптимизируйте функцию, чтобы она не выполнялась избыточно, например, добавьте проверку, что товар удаляется только один раз.
  • Регулярно создавайте резервные копии базы данных перед внедрением подобных автоматизаций.
Как удалить метаданные заказа WooCommerce из базы после его закрытия
24.04.2026
Как отключить XML-RPC в WordPress и защитить сайт от атак
27.01.2026
Автоматический импорт продукции в WooCommerce из CSV
07.01.2026
Как создать автоматический резервный бэкап WordPress с помощью плагинов и кода
03.01.2026
Как автоматизировать работу с мета-тегами в WordPress
28.12.2025