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

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

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

Пошаговое решение задачи

1. Подключение к хуку смены статуса заказа

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

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

2. Функция удаления товаров из заказа

Внутри функции мы получаем объект заказа, перебираем все позиции и удаляем их. После этого сохраняем заказ. Пример кода:

function auto_remove_products_after_payment($order_id) {
    if (!$order_id) {
        return;
    }

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

    // Получаем все позиции заказа
    $items = $order->get_items();

    foreach ($items as $item_id => $item) {
        $order->remove_item($item_id);
    }

    $order->calculate_totals();
    $order->save();
}

3. Проверка и отладка

Для отладки полезно записывать логи изменения заказа. Добавьте логирование в функцию для проверки, что она сработала:

if (defined('WP_DEBUG') && WP_DEBUG) {
    error_log('Товары удалены из заказа #' . $order_id);
}

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

  • Создайте тестовый заказ с товарами в WooCommerce.
  • Оплатите заказ (например, тестовой оплатой).
  • Убедитесь, что статус заказа изменился на «Завершён» (completed).
  • Откройте заказ в админке и проверьте, что список товаров пуст.

Если товары исчезли из заказа, значит автоматическое удаление работает корректно.

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

  • Товары не удаляются: проверьте, что функция подключена к правильному хуку (woocommerce_order_status_completed), а не к оплате (woocommerce_payment_complete) или другому событию.
  • Ошибка сохранения заказа: убедитесь, что вы вызываете $order->save() после удаления позиций и перерасчёта итогов.
  • Удаление товаров приводит к ошибкам в отчётах или письмах: удаление товаров из заказа нестандартно и может повлиять на отчёты продаж и уведомления. Рекомендуется тщательно протестировать все процессы после внесения изменений.

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

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

Сравнение подходов удаления товаров из заказа

Метод Плюсы Минусы
Удаление товаров через хук woocommerce_order_status_completed Автоматизация, простота кода, не требует плагинов Возможны проблемы с отчётностью, нестандартное поведение
Использование плагинов для обработки цифровых товаров (например, WooCommerce Downloadable Products) Готовые решения, поддержка обновлений, интеграция с остальными функциями Может не подходить для сложных сценариев, требует настройки
Ручное удаление товаров администратором Простой контроль, минимальный риск ошибок Неавтоматизировано, требует времени
Как автоматически удалять старые ревизии в WordPress и оптимизировать базу данных
30.01.2026
WooCommerce: как отключить автоматический заказ и автозаполнение данных при оформлении
11.05.2026
WooCommerce: как автоматически удалять товар из заказа после оплаты
20.05.2026
Как удалить пустующее изображение в WordPress
02.12.2025
Как изменить URL авторского архива в WordPress
13.02.2026