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

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

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

Пошаговое решение: как автоматически менять статус заказа при возврате товара

1. Определяем подходящий хук

Для отслеживания возврата мы используем статус заказа и функции WooCommerce для проверки возврата товаров. Хук woocommerce_order_refunded срабатывает, когда создаётся возврат.

2. Добавляем функцию для изменения статуса заказа

В файл functions.php вашей дочерней темы или в кастомный плагин добавьте следующий код:

add_action('woocommerce_order_refunded', 'custom_change_order_status_on_refund', 10, 2);
function custom_change_order_status_on_refund($order_id, $refund_id) {
    $order = wc_get_order($order_id);
    if (!$order) return;

    // Проверяем, если возврат покрывает всю сумму заказа
    $total_refunded = $order->get_total_refunded();
    $order_total = $order->get_total();

    // Если возврат равен или больше суммы заказа — меняем статус на "refunded"
    if ($total_refunded >= $order_total) {
        $order->update_status('refunded', 'Статус автоматически изменён после полного возврата');
    } else {
        // Частичный возврат — можно установить кастомный статус или логировать
        // $order->update_status('partially-refunded'); // если есть такой статус
    }
}

3. Добавляем новый статус (опционально)

Если нужны промежуточные статусы, например, "partially-refunded", их нужно зарегистрировать:

add_action('init', 'register_custom_order_status');
function register_custom_order_status() {
    register_post_status('wc-partially-refunded', array(
        'label' => 'Частично возвращён',
        'public' => true,
        'exclude_from_search' => false,
        'show_in_admin_all_list' => true,
        'show_in_admin_status_list' => true,
        'label_count' => _n_noop('Частично возвращён <span class="count">(%s)</span>', 'Частично возвращён <span class="count">(%s)</span>')
    ));
}

add_filter('wc_order_statuses', 'add_custom_order_status_to_list');
function add_custom_order_status_to_list($order_statuses) {
    $order_statuses['wc-partially-refunded'] = 'Частично возвращён';
    return $order_statuses;
}

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

  • Создайте тестовый заказ в WooCommerce.
  • Оформите возврат через админку.
  • Если возврат полный, статус заказа должен измениться на refunded.
  • Если возврат частичный и вы добавили кастомный статус, проверьте, что статус отражается корректно.
  • Проверяйте логи ошибок в wp-content/debug.log при включённом WP_DEBUG для диагностики.

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

  • Статус не меняется после возврата: Возможно, возврат не оформлен через функцию WooCommerce. Проверьте, что возврат создаётся именно через админку WooCommerce или API.
  • Код не срабатывает: Убедитесь, что хук woocommerce_order_refunded подключён правильно и нет конфликтов с другими плагинами.
  • Кастомный статус не отображается: Проверьте регистрацию статуса и фильтр wc_order_statuses. Очистите кеш админки.
  • Проблемы с правами доступа: Убедитесь, что пользователь, оформляющий возврат, имеет соответствующие права.

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

  • Добавляйте код только в дочернюю тему или кастомный плагин, чтобы избежать потери при обновлении.
  • Используйте wp_cache_flush() с осторожностью, если кеширование мешает обновлению статуса.
  • Тестируйте на staging-сайте, прежде чем внедрять на живом магазине.
  • Логируйте действия функции в файл через error_log() для отладки.

Сравнение способов реализации автоматического изменения статуса

МетодПлюсыМинусыРекомендации
Код через woocommerce_order_refundedЛёгкий, без плагинов, гибкийТребует навыков PHP, поддержка на себеПодходит для разработчиков
Плагин автоматизации возвратовПрост в установке, поддержкаМожет нагружать сайт, лицензияДля непрофессионалов или сложных сценариев
Ручное изменение статусовПростота, без кодаЧеловеческий фактор, ошибкиМалые магазины с редкими возвратами
Как удалить заблокированных и неактивных пользователей в WordPress
02.03.2026
Как настроить автоматический импорт данных из внешнего источника в WordPress
05.02.2026
Как добавить собственные поля в WordPress: пошаговое руководство
14.11.2025
WooCommerce: как настроить авторизацию по email вместо логина
02.05.2026
Как добавить дополнительные поля профиля пользователя в WordPress с примерами
02.01.2026