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

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

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

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

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

Выбор правильного хука

Для этого подходит хук woocommerce_order_status_completed — он срабатывает, когда заказ получает статус «завершён» (оплата подтверждена).

Пошаговое решение с примером кода

1. Создайте или откройте файл functions.php в дочерней теме или подключаемом плагине.
2. Добавьте следующий код:

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();
        // Удаляем товар без возможности восстановления
        wp_delete_post($product_id, true);
    }
}

Этот код перебирает все товары в заказе и удаляет их из базы при установке статуса «завершён».

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

  1. Создайте тестовый заказ с одним или несколькими товарами.
  2. Оплатите заказ (можно в тестовом режиме).
  3. Убедитесь, что заказ сменил статус на «завершён».
  4. Проверьте в админке WooCommerce > Товары, что купленные товары удалены.

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

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

  • Товары не удаляются: проверьте, что код добавлен в правильное место и активен. Убедитесь, что статус заказа действительно меняется на «завершён».
  • Удаляются не те товары: проверьте, что используете $item->get_product_id(), а не $item->get_variation_id(), если не хотите удалять вариации.
  • Ошибка доступа или прав: убедитесь, что пользователь с правами администратора тестирует удаление, и что функция wp_delete_post не блокируется другими плагинами безопасности.

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

  • Удаление товара — необратимый процесс, используйте параметр true во втором аргументе wp_delete_post с осторожностью.
  • Рекомендуется перед удалением создавать резервные копии, особенно на продуктивных сайтах.
  • Если товар имеет вариации, дополнительно удаляйте их через get_children() по ID товара.
  • Для сайтов с большим количеством заказов рекомендуется добавить ограничение, например, удалять только определённые категории товаров.

Расширение функционала: удаление вариаций товаров

add_action('woocommerce_order_status_completed', 'auto_delete_products_and_variations', 10, 1);
function auto_delete_products_and_variations($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();

        // Удаляем вариации товара
        $children = get_children(array(
            'post_parent' => $product_id,
            'post_type'   => 'product_variation',
            'fields'      => 'ids',
        ));

        foreach ($children as $child_id) {
            wp_delete_post($child_id, true);
        }

        // Удаляем сам товар
        wp_delete_post($product_id, true);
    }
}

Чек-лист для внедрения и тестирования

  • Добавлен код в functions.php дочерней темы или в плагин
  • Подключён хук woocommerce_order_status_completed
  • Проверена работа на тестовом заказе
  • Проведена проверка удаления товаров и вариаций
  • Убедились в отсутствии ошибок в логах
  • Создана резервная копия перед запуском на продакшене
WooCommerce: как удалить товары по атрибутам через код PHP
05.05.2026
WooCommerce: решение проблемы с незапуском хука woocommerce_order_status_changed
14.05.2026
Как автоматически удалять неактивные пользовательские аккаунты в WordPress
24.03.2026
WooCommerce: автоматическое изменение статуса заказа при оплате через кастомный шлюз
25.05.2026
WooCommerce: как исключить копирование товаров при изменении атрибутов
05.05.2026