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

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

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

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

  • Включено ли управление запасами в настройках товара (на вкладке "Инвентарь")?
  • Статусы заказов, при которых происходит возврат, учитываются для обновления запаса?
  • Используются ли дополнительные плагины для возвратов, которые могут переопределять стандартное поведение WooCommerce?

Для проверки текущего состояния запасов можно использовать SQL-запрос к базе данных или посмотреть значения в панели администратора WooCommerce в разделе "Товары".

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

1. Проверяем настройки управления запасами

Перейдите в WooCommerce > Настройки > Товары > Инвентарь и убедитесь, что включены следующие опции:

  • Включить управление запасами
  • Разрешить управление запасами на уровне товара

2. Добавляем кастомный код для обновления склада при возврате

WooCommerce не всегда обновляет склад при смене статуса заказа на "Возврат" или "Отменен". Чтобы исправить это, используйте хук woocommerce_order_status_changed и вручную увеличьте количество товара на складе для возвращенных товаров.

add_action('woocommerce_order_status_changed', 'custom_restore_stock_on_return', 10, 4);function custom_restore_stock_on_return($order_id, $old_status, $new_status, $order) {    // Список статусов, при которых нужно восстанавливать запас    $statuses_to_restore = array('refunded', 'cancelled');    if (in_array($new_status, $statuses_to_restore)) {        foreach ($order->get_items() as $item) {            $product = $item->get_product();            if ($product && $product->managing_stock()) {                $qty = $item->get_quantity();                // Восстанавливаем запас                $product->increase_stock($qty);                $product->save();            }        }    }}

Этот код увеличит количество товара на складе при смене статуса заказа на "refunded" (возврат) или "cancelled" (отмена).

3. Проверяем совместимость с плагинами возврата

Если используете сторонние плагины для возвратов (например, WooCommerce Returns and Warranty Requests), убедитесь, что они не конфликтуют с кастомным кодом. Возможно, понадобится адаптировать код под их хуки.

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

Чтобы проверить, что решение работает, выполните следующие шаги:

  1. Создайте тестовый заказ с товаром, у которого включено управление запасами.
  2. Убедитесь, что количество товара после покупки уменьшилось на количество заказа.
  3. Измените статус заказа на "Возврат" (refunded) через панель администратора WooCommerce.
  4. Проверьте, что количество товара на складе увеличилось на количество возвращенного товара.

Для точной проверки можно использовать SQL-запрос к таблице wp_postmeta с мета ключом _stock или посмотреть в админке WooCommerce на странице товара.

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

  • Запас не изменяется при возврате: проверьте, что управление запасами включено для товара и глобально в настройках WooCommerce.
  • Код не срабатывает: убедитесь, что код добавлен в файл темы functions.php или в плагин с правильной приоритетностью и без синтаксических ошибок.
  • Конфликты с плагинами: отключите сторонние плагины возврата и протестируйте код. При конфликте адаптируйте хуки под конкретный плагин.
  • Множественные обновления запаса: если возврат происходит несколько раз, добавьте логику, чтобы обновлять запас только один раз за заказ.

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

  • Не храните этот код в публичных местах без ограничений — используйте child-тему или собственный плагин.
  • Добавьте логирование операций восстановления запаса для последующего аудита.
  • Избегайте тяжелых операций в хуках, чтобы не замедлять работу сайта. В данном случае операции с товарами достаточно легкие.
  • Тестируйте изменения на staging-сайте перед внедрением в продакшн.

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

МетодПростотаГибкостьКомпромиссы
Стандартное поведение WooCommerceВысокаяНизкая (не всегда работает для возвратов)Не обновляет склад при возврате вручную
Кастомный код на хуках (пример выше)СредняяВысокая (можно адаптировать под нужды)Требует поддержания и тестирования
Использование плагинов возвратаВысокаяСредняя (зависит от плагина)Могут конфликтовать с другими плагинами, нагрузка
Как автоматизировать обработку форм в WordPress с примерами кода
08.04.2026
WooCommerce: как автоматически удалять товары после отмены заказа
21.06.2026
Как сделать автоматическое удаление спам комментариев в WordPress
28.12.2025
Как создать собственный REST API endpoint в WordPress с примерами кода
28.11.2025
WooCommerce: как автоматически удалять товар после отмены заказа
21.06.2026