WPExperts

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

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

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

Как проверить, что товары не возвращаются на склад?

  • Отмените заказ в админке WooCommerce.
  • Перейдите в карточку товара и проверьте количество на складе.
  • Если количество не увеличилось, значит возврат запасов не сработал.

Пошаговое решение: автоматизация возврата товара в WooCommerce при отмене заказа

Для решения используем хук woocommerce_order_status_cancelled, который срабатывает при смене статуса заказа на «Отменён». Через этот хук пропишем функцию, которая вернёт товары в запас.

add_action('woocommerce_order_status_cancelled', 'custom_restore_stock_on_cancelled_order', 10, 1);
function custom_restore_stock_on_cancelled_order( $order_id ) {
    if ( ! $order_id ) return;

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

    foreach ( $order->get_items() as $item_id => $item ) {
        $product = $item->get_product();
        if ( ! $product || ! $product->managing_stock() ) continue;

        $qty = $item->get_quantity();
        // Восстановить количество товара на складе
        wc_update_product_stock( $product, $qty, 'increase' );
    }
}

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

Как внедрить код?

  • Добавьте код в файл functions.php активной темы или в специальный плагин для пользовательских функций.
  • Убедитесь, что в WooCommerce активировано управление запасами (Настройки → Товары → Управление запасами).

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

После добавления кода и его активации сделайте следующее:

  • Создайте тестовый заказ с товаром, у которого указан запас.
  • Обработайте заказ, например, перейдите в статус "В ожидании" или "Обрабатывается".
  • Отмените заказ через админку.
  • Проверьте остаток товара — он должен увеличиться на количество, указанное в заказе.

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

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

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

  • Безопасность: Не изменяйте код WooCommerce напрямую, используйте дочерние темы или плагины для кастомизации.
  • Оптимизация: Хук срабатывает только при смене статуса на «Отменён», что минимизирует нагрузку.
  • Логирование: Для отладки можно добавить логирование в функцию, например, через error_log():
error_log('Возврат товара на склад для заказа ID: ' . $order_id);

Альтернативные варианты: код vs плагины

МетодПлюсыМинусы
Код с хуком woocommerce_order_status_cancelledЛегко контролировать, бесплатно, быстроТребует базовых знаний PHP, возможны конфликты с кастомными плагинами
Плагины для управления запасами (например, WooCommerce Stock Manager)Графический интерфейс, дополнительные функции аналитикиЧасто платные, могут нагружать сайт, не всегда точно работают с кастомными статусами
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее