wpwebsite.ru wordpress WPWebSite

Как автоматически удалить продукт в WooCommerce после первой продажи

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

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

Как отследить первую продажу товара в WooCommerce

Для решения задачи нужно отследить момент первой покупки товара. WooCommerce хранит данные о заказах и заказанных товарах, и мы можем проверять количество продаж для конкретного продукта через функцию wc_get_product()->get_total_sales().

Если количество продаж равно 1, значит, товар был продан впервые. Именно в этот момент можно запустить удаление.

Пример кода для проверки количества продаж

function is_first_sale($product_id) {
    $product = wc_get_product($product_id);
    if (!$product) return false;
    return $product->get_total_sales() === 1;
}

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

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

add_action('woocommerce_order_status_completed', 'delete_product_after_first_sale', 10, 1);
function delete_product_after_first_sale($order_id) {
    $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) continue;

        // Проверяем, что это первая продажа
        if ($product->get_total_sales() === 1) {
            // Удаляем продукт без возможности восстановления
            wp_delete_post($product_id, true);
        }
    }
}

Этот код удалит товар сразу после того, как заказ со статусом "выполнен" содержит его первую продажу.

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

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

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

  • Товар не удаляется после первой продажи
    Проверьте, что заказ действительно меняет статус на "выполнен". Если используется другая схема статусов, нужно применить соответствующий хук или дополнительно проверить статус.
  • Удаляется не тот продукт или несколько раз
    Убедитесь, что в заказе нет вариаций, для которых ID отличается. В таком случае используйте $item->get_variation_id() и проверяйте именно вариацию, если нужно.
  • Проблемы с кэшированием
    Если вы используете кэш или плагин оптимизации, проверьте, что изменения видны сразу, очистите кэш.

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

  • Удаление товара без возможности восстановления: параметр true в wp_delete_post($product_id, true) удаляет товар окончательно. Если хотите иметь возможность восстановления, используйте false.
  • Проверка прав пользователя: если код планируется использовать в административной части, учитывайте права текущего пользователя, чтобы избежать ошибок.
  • Обработка вариаций: если продаются вариации, можно менять логику удаления, чтобы удалять вариацию, а не товар целиком.
  • Журналирование: для отладки добавляйте логирование в файл или систему ошибок — это поможет отследить процесс удаления.

Альтернативные подходы: плагины и код

МетодПлюсыМинусы
Кастомный код (как в статье)Полный контроль, легко адаптироватьТребует навыков PHP, может понадобиться отладка
Плагины для автоматического управления товарамиПростота использования, часто есть поддержкаМогут быть не гибкими, возможно лишний функционал
Ручное удаление после уведомленияПросто и безопасноТребует участия администратора, не автоматично
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше