WooCommerce: автоматическое обновление стоимости и количества товара после возврата

Проблема: неправильное обновление остатков и цены после возврата товара в WooCommerce

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

Диагностика проблемы

  • Проверить, обновляется ли количество товара в админке WooCommerce после возврата.
  • Проверить, меняется ли стоимость товара или итоговая сумма заказа при возврате.
  • Посмотреть логи ошибок PHP для уведомлений о сбоях в хуках.
  • Убедиться, что не используются сторонние плагины, которые могут блокировать стандартные хуки WooCommerce.

Пошаговое решение: автоматическое обновление количества и стоимости товара после возврата

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

add_action('woocommerce_order_refunded', 'custom_update_stock_and_price_on_refund', 10, 2);
function custom_update_stock_and_price_on_refund($order_id, $refund_id) {
    $order = wc_get_order($order_id);
    $refund = wc_get_order($refund_id);

    // Перебираем все возмещённые позиции
    foreach ($refund->get_items() as $item_id => $item) {
        $product_id = $item->get_product_id();
        $quantity_refunded = $item->get_quantity();

        $product = wc_get_product($product_id);
        if (!$product) continue;

        // Обновляем количество товара на складе
        if ($product->managing_stock()) {
            $stock_qty = $product->get_stock_quantity();
            $new_stock = $stock_qty + $quantity_refunded;
            $product->set_stock_quantity($new_stock);
            $product->save();
        }

        // Пример: обновление стоимости - если используется кастомная логика
        // Здесь нужно добавить код для пересчёта цены, если применимо
    }
}

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

Как проверить, что решение сработало

  • Создайте возврат в тестовом заказе в админке WooCommerce.
  • Проверьте в карточке товара, что количество на складе увеличилось на количество возвращённых товаров.
  • Проверьте, что цена товара (если менялась) соответствует ожидаемой.
  • Проверьте, что в заказе отражены корректные суммы после возврата.

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

  • Не срабатывает хук: Проверьте, не отключен ли WooCommerce в режиме разработки, и нет ли конфликтов с плагинами кеширования.
  • Количество не обновляется: Убедитесь, что у товара включено управление запасами (manage_stock), иначе изменения количества игнорируются.
  • Цена не обновляется: Кастомные цены требуют дополнительной логики, стандартные хуки не меняют цену в заказах автоматически.
  • Ошибки PHP при возврате: Проверьте синтаксис и наличие всех обязательных функций WooCommerce, обновите WooCommerce до последней версии.

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

  • Используйте транзакции базы данных или проверяйте успешность сохранения товара после изменения запасов.
  • Минимизируйте количество операций внутри хука, чтобы не замедлять процесс возврата заказа.
  • Обрабатывайте возвраты только для тех товаров, у которых включено управление запасами.
  • Тестируйте на staging-сервере перед внедрением на живом сайте.

Сравнение вариантов реализации обновления остатков

Метод Преимущества Недостатки
Использование стандартных настроек WooCommerce Простота, поддержка из коробки Не всегда обновляет кастомные цены, проблемы с комплексными возвратами
Кастомный хук woocommerce_order_refunded Гибкость, возможность кастомизации логики Требует программирования, возможность ошибок при неправильной реализации
Плагины для управления возвратами и складом Интерфейс и дополнительные функции Может грузить систему, конфликтовать с другими плагинами, платные
Использование WP-Cron для автоматического отправления email-отчетов в WordPress
09.05.2026
Как создать фильтры для AJAX-запросов в WordPress с примерами кода
21.01.2026
WooCommerce: как автоматически удалять товары после отмены заказа
21.06.2026
WooCommerce: как автоматически изменять стоимость товара при изменении атрибутов
28.05.2026
Как создать собственный REST API endpoint в WordPress с примерами кода
28.11.2025