WooCommerce: как полностью отключить отмену заказов через личный кабинет

Диагностика проблемы с отменой заказов в WooCommerce

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

Как понять, что отмена заказов активна

  • Заходите в личный кабинет покупателя;
  • Открываете список заказов;
  • Если у заказа есть кнопка "Отменить заказ", значит, возможность отмены активна;
  • В админке WooCommerce также можно проверить права ролей на изменение статусов заказов.

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

Для отключения отмены заказов нам нужно заблокировать функционал отмены заказов на фронтенде и предотвратить возможность отмены через REST API и AJAX-запросы.

1. Удаляем кнопку "Отменить заказ" из личного кабинета

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

add_filter('woocommerce_my_account_my_orders_actions', 'disable_cancel_order_button', 10, 2);
function disable_cancel_order_button($actions, $order) {
    if (isset($actions['cancel'])) {
        unset($actions['cancel']);
    }
    return $actions;
}

Этот фильтр удалит кнопку отмены из списка заказов.

2. Отключаем возможность отмены через REST API и AJAX

Отмена заказа может быть вызвана через AJAX или REST API. Чтобы полностью блокировать отмену, добавим проверку на сервере.

add_action('woocommerce_before_cancel_order', 'block_cancel_order_request', 10, 1);
function block_cancel_order_request($order_id) {
    wp_die('Отмена заказов через личный кабинет отключена.');
}

Этот хук останавливает процесс отмены заказа.

3. Дополнительно блокируем отмену через изменение статуса вручную (админка)

Если хотите запретить отмену даже администраторам через админку, можно добавить проверку:

add_action('woocommerce_order_status_changed', 'prevent_order_cancellation', 10, 3);
function prevent_order_cancellation($order_id, $old_status, $new_status) {
    if ($new_status === 'cancelled') {
        wp_die('Отмена заказов запрещена.');
    }
}

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

  • Перейдите в личный кабинет покупателя и обновите страницу заказов — кнопка "Отменить заказ" должна исчезнуть;
  • Попробуйте отменить заказ программно через REST API — запрос должен прерваться с сообщением об ошибке;
  • В админке попробуйте изменить статус заказа на "Отменён" — появится ошибка и изменение не сохранится.

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

  • Кнопка отмены не исчезает: проверьте подключение кода, очистите кеш страницы и кеш плагинов, убедитесь, что код добавлен в правильное место (дочерняя тема или плагин).
  • Ошибка при отмене заказа через REST API не появляется: возможно, другой плагин перехватывает запросы, добавьте приоритет хука выше (например, 1 вместо 10).
  • Администраторы могут отменять заказ: блокировка через woocommerce_order_status_changed действует только если вы используете wp_die(), альтернативно можно откатить статус:
add_action('woocommerce_order_status_changed', 'revert_order_cancellation', 10, 3);
function revert_order_cancellation($order_id, $old_status, $new_status) {
    if ($new_status === 'cancelled') {
        $order = wc_get_order($order_id);
        $order->update_status($old_status, 'Отмена заказов отключена.');
    }
}

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

  • Размещайте кастомный код в дочерней теме или в отдельном плагине, чтобы не потерять изменения при обновлении.
  • Проверяйте совместимость с другими плагинами, особенно с теми, которые могут влиять на заказы (например, платёжные шлюзы).
  • Для предотвращения обхода ограничений через REST API на сервере можно ограничить доступ по ролям с помощью rest_authentication_errors.
  • Помните, что полное отключение отмены заказов снижает гибкость интерфейса для пользователей — заранее предупредите клиентов о такой политике.

Сравнение способов отключения отмены заказов

МетодОписаниеПлюсыМинусы
Удаление кнопки в личном кабинетеУбирает визуальную возможность отменыПростая реализация, не влияет на серверМожно отменить через API или админку
Блокировка с помощью хука woocommerce_before_cancel_orderОстанавливает отмену на сервереНадежно блокирует отмену через фронтенд и APIНе блокирует админку без дополнительного кода
Блокировка изменения статуса в админкеЗапрещает отмену через админ-панельПолное предотвращение отменыМожет вызвать неудобства для администраторов
WooCommerce: как настроить правила разграничения доступа к страницам и категориям товаров
05.06.2026
Как создать автоматическое сохранение формы в WordPress с помощью jQuery и AJAX
12.01.2026
Как создать свой плагин WordPress с нуля: пошаговое руководство
02.11.2025
WooCommerce: как избежать конфликтов между кастомными плагинами
23.06.2026
Как удалить автоматические ревизии в WordPress для оптимизации базы данных
24.02.2026