Автоматический возврат товара в WooCommerce после отмены заказа

|

В чем суть проблемы с возвратом товаров после отмены заказа в WooCommerce

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

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

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

Реализуем обработку события смены статуса заказа на "cancelled" и "refunded", чтобы автоматически возвращать количество товаров на склад.

add_action('woocommerce_order_status_cancelled', 'custom_restore_stock_on_cancelled_order');
add_action('woocommerce_order_status_refunded', 'custom_restore_stock_on_cancelled_order');

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

    // Проверяем, не была ли уже восстановлена складская доступность
    if (get_post_meta($order_id, '_stock_restored', true)) {
        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');
    }

    // Отмечаем, что склад был восстановлен для этого заказа
    update_post_meta($order_id, '_stock_restored', 1);
}

Этот код подключается к событиям смены статуса, проверяет, не была ли уже выполнена операция возврата, и увеличивает количество товаров на складе на количество из заказа.

Почему важна проверка мета-поля _stock_restored?

Чтобы избежать двойного возврата при повторных сменах статуса, мы ставим флаг. Без этого при повторном выставлении статуса "cancelled" количество будет увеличено повторно, и склад будет «переполнен».

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

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

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

Сравнение вариантов решения возврата товара в WooCommerce

МетодОписаниеПлюсыМинусы
Встроенный механизм WooCommerce (ручной возврат) Использование кнопки "Возврат товара" в заказе Простота, поддержка стандартом Требует ручного действия, возможны ошибки
Код из статьи (автоматический возврат на события) Автоматический возврат при смене статуса заказа Автоматизация, снижает ошибки, контролируемый код Требует внедрения и тестирования, не учитывает сторонние плагины
Плагины управления запасами Расширенный контроль запасов, интеграции Готовые решения, дополнительные функции Платные, возможны конфликты с кастомным кодом
Как добавить автоматическое удаление старого контента в WordPress
22.03.2026
WooCommerce: как автоматически удалять отменённые и неактивные заказы
27.06.2026
Как удалить или скрыть авторизацию для определённых пользователей в WordPress
26.03.2026
Как создать подписку на email в WordPress без плагинов: практическое руководство
21.11.2025
Как создать динамические таблицы в WordPress с помощью шорткодов
26.02.2026
×
Сделай свой сайт крутым!

Скидка -20% на премиум плагины WordPress

Выбрать плагин сейчас ⋙