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

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

В WooCommerce статус заказа "Возвращён" (refunded) часто используется для пометки заказов, по которым была проведена полная или частичная возвратная операция. По умолчанию этот статус не меняется автоматически и не влияет на дальнейшую обработку заказа или уведомления. Однако в ряде бизнес-сценариев нужно, чтобы такие заказы автоматически переводились в иной статус (например, "Завершён" или пользовательский статус), чтобы исключить их из дальнейших отчетов или запустить собственные процессы.

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

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

1. Используем хук woocommerce_order_refunded

Этот хук срабатывает сразу после проведения возврата по заказу. На его основе можно определить, что заказ был возвращён, и изменить статус.

add_action('woocommerce_order_refunded', 'wpdirect_auto_change_order_status_refunded', 10, 2); 
function wpdirect_auto_change_order_status_refunded($order_id, $refund_id) {
    if (!$order_id) return;

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

    // Проверяем, что текущий статус - refunded
    if ($order->has_status('refunded')) {
        // Меняем статус на 'completed' или любой другой
        $order->update_status('completed', 'Автоматическое изменение статуса после возврата');
    }
}

2. Кастомизация статуса

Если нужно использовать пользовательский статус, необходимо зарегистрировать его с помощью register_post_status и добавить в список доступных статусов WooCommerce.

// Регистрация кастомного статуса 'processed_refund'
add_action('init', 'wpdirect_register_custom_order_status');
function wpdirect_register_custom_order_status() {
    register_post_status('wc-processed_refund', 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>')
    ));
}

// Добавляем в список статусов WooCommerce
add_filter('wc_order_statuses', 'wpdirect_add_custom_order_status');
function wpdirect_add_custom_order_status($order_statuses) {
    $order_statuses['wc-processed_refund'] = 'Обработан возврат';
    return $order_statuses;
}

// В функции изменения статуса заменить 'completed' на 'processed_refund'

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

  1. Создайте тестовый заказ в WooCommerce и оплатите его.
  2. В админке сделайте возврат по заказу.
  3. После успешного возврата проверьте, изменился ли статус заказа на нужный (например, "Завершён" или "Обработан возврат").
  4. Убедитесь, что в логе статуса заказа появилась запись "Автоматическое изменение статуса после возврата".

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

  • Хук не срабатывает: Проверьте, что возврат действительно проводится через админку WooCommerce и не сторонним плагином, который не вызывает woocommerce_order_refunded.
  • Статус не меняется: Убедитесь, что используемый статус корректен и зарегистрирован (если кастомный). Проверьте, что функция update_status вызывается без ошибок.
  • Заказы не отображаются в нужных отчетах: Проверьте, включён ли новый статус в список статусов WooCommerce, особенно если используете кастомные.

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

  • Обрабатывайте только необходимые заказы, избегайте излишних вызовов функций в хуках.
  • Используйте проверки наличия объекта $order и статуса перед изменением.
  • Логируйте события изменений для последующего аудита (можно использовать стандартный WP_Debug или собственный механизм).

Итоговый чек-лист для внедрения

  • Добавили функцию на хук woocommerce_order_refunded
  • Определили целевой статус для автоматической смены
  • Зарегистрировали пользовательский статус (если нужен)
  • Проверили корректность работы на тестовом заказе
  • Проследили логи и статус заказа для подтверждения изменений
Как настроить отключение автоматических обновлений в WordPress
01.03.2026
WooCommerce: как диагностировать и исправить проблему с планировщиком задач (cron)
21.07.2026
WooCommerce: авторизация и регистрация без перезагрузки страницы (AJAX)
05.08.2026
WooCommerce: автоматическое удаление неактивных заказов по расписанию с оптимизацией
06.07.2026
Как автоматизировать создание и удаление черновиков в WordPress
08.01.2026