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

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

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

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

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

Почему именно woocommerce_order_status_completed?

Этот хук гарантирует, что оплата прошла успешно и заказ реализован, что минимизирует риск удаления товара по отменённому или неоплаченному заказу.

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

Добавьте следующий код в файл functions.php активной темы или в свой плагин:

add_action('woocommerce_order_status_completed', 'auto_delete_products_after_sale', 10, 1); 
function auto_delete_products_after_sale($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 (get_post_status($product_id)) {
            // Удаляем товар без возможности восстановления
            wp_delete_post($product_id, true);
        }
    }
}

Код перебирает все товары в заказе и удаляет их из базы, используя wp_delete_post с параметром true — полный удаление без отправки в корзину.

Как проверить, что код работает

  • Создайте тестовый заказ с товаром;
  • Измените статус заказа на «завершён»;
  • Проверьте в разделе «Товары» — товар должен исчезнуть;
  • Если товар остался, проверьте логи ошибок и права пользователя.

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

  • Товар не удаляется после смены статуса: возможно, хук не срабатывает — проверьте, что заказ действительно переведён в статус completed. Можно добавить error_log внутри функции для отладки.
  • Удаляются товары, которые удалять не нужно: если в заказе есть товары, которые не должны удаляться, добавьте дополнительную проверку по категории или мета-полям.
  • Ошибка доступа: убедитесь, что функция вызывается с достаточными правами, и что пользователь с нужными правами обновляет статус заказа.
  • Потеря данных по заказам: удаление товара полностью удаляет его данные. Рекомендуется сделать резервное копирование базы перед внедрением.

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

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

Альтернативы: удаление через плагины и код — что выбрать?

МетодОписаниеПлюсыМинусы
Кодовое решение (как выше)Автоматическое удаление при смене статуса заказаЛёгкая настройка, без лишних плагинов, полнота контроляРиск потери данных, требует тестирования, зависит от правильного статуса заказа
Плагины для управления товарамиПлагины с функциями массового удаления и управления товарамиИнтерфейс, безопасность, поддержкаЗависимость от сторонних решений, может быть избыточно для задачи
Как автоматизировать управление ролями в WordPress с помощью кода
19.03.2026
Как удалить оверхэнджер в WordPress без плагинов
12.12.2025
Как добавить настройку автозагрузки медиафайлов в WordPress
26.02.2026
Как создать свой плагин в WordPress с примером кода
05.11.2025
WooCommerce: как автоматически удалять заказы после их архивирования с подтверждением
29.06.2026