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

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

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

Главный вопрос — как реализовать эту логику без постоянного ручного контроля? Автоматизация решения поможет экономить время и избежать ошибок.

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

1. Используем хук для отслеживания успешной оплаты

Для удаления товара после продажи нужно реагировать на изменение статуса заказа на completed или processing (в зависимости от способа оплаты). Для этого используем хук woocommerce_order_status_completed или woocommerce_order_status_processing.

2. Получаем ID товаров из заказа и удаляем их

Пример кода, который удаляет все товары, присутствующие в заказе, при смене статуса на completed:

add_action('woocommerce_order_status_completed', 'custom_delete_products_after_order_completed');
function custom_delete_products_after_order_completed($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) {
            // Удаляем товар из базы WordPress
            wp_delete_post($product_id, true); // true — принудительное удаление
        }
    }
}

3. Учитываем вариации товаров

Если у вас есть вариации, их ID отличаются от главного товара. Чтобы удалить вариацию, нужно получить ID вариации:

foreach ($order->get_items() as $item) {
    $variation_id = $item->get_variation_id();
    if ($variation_id) {
        wp_delete_post($variation_id, true);
    } else {
        $product_id = $item->get_product_id();
        wp_delete_post($product_id, true);
    }
}

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

  1. Создайте тестовый заказ в WooCommerce и оплатите его, чтобы статус сменился на completed.
  2. Перейдите в раздел «Товары» в админке WordPress и убедитесь, что проданные товары (или их вариации) удалены.
  3. Попробуйте повторно заказать удалённый товар — он должен отсутствовать в каталоге.

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

  • Товары не удаляются после смены статуса заказа.
    Проверьте, что хук привязан к правильному статусу, и что функция подключена в правильном месте (например, в functions.php темы или в плагине). Также проверьте, не отключена ли функция wp_delete_post из-за прав.
  • Удаляются не все товары, особенно вариации.
    Убедитесь, что в коде обрабатываются и вариации товаров, а не только главные продукты.
  • Удалённые товары отображаются в кэше.
    Очистите кэш сайта и браузера, если используете кеширующие плагины.

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

  • Используйте wp_delete_post($product_id, true) с осторожностью. Этот вызов удаляет товар без возможности восстановления из корзины.
  • Добавьте проверку прав текущего пользователя, если ваш код запускается через интерфейс.
  • Для больших магазинов и массовых заказов рассмотрите добавление логирования удалённых товаров для аудита.
  • Если товары удаляются слишком часто, можно добавить дополнительный флаг или метаполе, чтобы контролировать удаление.

Чек-лист для внедрения автоматического удаления товаров после продажи

  • Определить, на каком статусе заказа удалять товар (completed, processing и т.д.).
  • Реализовать функцию удаления товаров с учётом вариаций.
  • Добавить функцию в functions.php или создать отдельный плагин.
  • Провести тестирование на тестовом заказе.
  • Очистить кэш сайта и проверить отображение каталога.
  • Добавить логирование (по необходимости) для контроля.

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

МетодПреимуществаНедостатки
Удаление через хук статуса заказа (код)Быстро, без сторонних плагинов, гибко настраиваетсяРиск удаления нужных товаров без бэкапа; требует навыков PHP
Ручное удаление товаров в админкеПолный контроль, нет риска ошибочного удаленияТрудозатратно при большом количестве заказов
Использование сторонних плагинов (редко встречается)Простота использования, готовые решенияПлагины могут быть ненадёжными, влиять на производительность
WooCommerce: автоматический вход пользователя после регистрации и оформления заказа
18.06.2026
Как автоматизировать управление отзывами в WordPress
24.01.2026
Оптимизация базы данных WordPress: эффективные методы
21.11.2025
WooCommerce: как автоматически удалять товары после продажи
28.06.2026
Как удалить неактивных пользователей в WordPress через HTML и PHP
14.01.2026