Как использовать хук woocommerce_checkout_update_order_review в WooCommerce

Что такое хук woocommerce_checkout_update_order_review и зачем он нужен

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

Типичные сценарии применения

  • Пересчет стоимости доставки в зависимости от выбранного адреса
  • Добавление динамических скидок при изменении корзины на странице оформления
  • Валидация пользовательских полей и обновление итоговой суммы

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

Если после изменения параметров на странице оформления заказа итоговая сумма или доставка не обновляются, возможно, AJAX-запрос, связанный с woocommerce_checkout_update_order_review, не срабатывает. Для диагностики:

  • Откройте консоль браузера (F12) и проверьте наличие ошибок JS.
  • Проверьте сетевые запросы в вкладке Network — должен быть запрос admin-ajax.php с действием woocommerce_checkout_update_order_review.
  • Если запрос не выполняется или возвращает ошибку, проверьте, не блокирует ли безопасность сервера AJAX-запросы.

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

Рассмотрим пример, как добавить дополнительную плату за упаковку при сумме заказа более 1000 рублей.

1. Добавляем обработчик AJAX на сервере

add_action('woocommerce_checkout_update_order_review', 'custom_update_order_review_callback');
function custom_update_order_review_callback() {
    if ( ! isset( $_POST['post_data'] ) ) {
        return;
    }
    parse_str( $_POST['post_data'], $post_data );

    // Получаем сумму корзины
    $cart_total = WC()->cart->get_cart_contents_total();

    // Добавляем дополнительную плату, если сумма больше 1000
    if ( $cart_total > 1000 ) {
        WC()->cart->add_fee( 'Упаковка', 50 );
    } else {
        // Удаляем плату, если она есть
        WC()->cart->remove_fee( 'Упаковка' );
    }

    // Обновляем корзину
    WC()->cart->calculate_totals();
}

2. Проверяем обновление через AJAX

WooCommerce самостоятельно инициирует AJAX вызов этого хука при изменении данных формы оформления заказа. Наша задача — корректно обработать и обновить корзину.

3. Обработка на клиенте (необязательно)

Если требуется дополнительное действие, например, обновить кастомный блок, можно добавить JS:

jQuery(function($){
  $(document.body).on('updated_checkout', function(){
    console.log('Обзор заказа обновлен');
    // Ваш кастомный код
  });
});

Проверка результата

  • На странице оформления заказа добавьте товары на сумму более 1000 ₽.
  • Обновите или измените адрес/способ доставки, чтобы триггерить AJAX обновление.
  • Проверьте, что в итоговой сумме появилась дополнительная плата «Упаковка» на 50 ₽.
  • Если сумма меньше 1000 ₽, плата не должна отображаться.

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

  • Плата не добавляется: убедитесь, что хук woocommerce_checkout_update_order_review подключен корректно и функция вызывается. Проверьте, что корзина инициализирована WC()->cart.
  • Плата дублируется при каждом обновлении: используйте методы add_fee и remove_fee аккуратно, проверяйте, что плата добавляется только один раз.
  • Ошибка AJAX: проверьте консоль браузера и ответ сервера. Возможна ошибка из-за ограничения безопасности или конфликтов плагинов.

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

  • Избегайте тяжелых вычислений в функции обработки AJAX — они влияют на скорость обновления заказа.
  • Не забывайте проверять данные из $_POST на валидность и использовать функции фильтрации.
  • При необходимости добавляйте nonce-проверки для безопасности, хотя WooCommerce уже реализует базовую защиту.
  • Тестируйте изменения на тестовом сайте, чтобы избежать сбоев на рабочем магазине.

Сравнение способов добавления дополнительной платы в WooCommerce

МетодПлюсыМинусыИспользование
Хук woocommerce_checkout_update_order_reviewОбновление в реальном времени при изменении данных на странице оформленияМожет влиять на производительность при сложных вычисленияхДинамическое управление платами на этапе оформления заказа
Хук woocommerce_cart_calculate_feesДобавление плат при расчете корзины, работает и в корзине, и при оформленииМенее динамичен, не учитывает изменения без перезагрузки страницыДобавление фиксированных плат или скидок
Плагины для корзиныУпрощают настройку без кодаМогут замедлять сайт, не всегда гибкиеДля пользователей без навыков программирования
Как создать уникальный плагин для оптимизации базы данных WordPress
09.04.2026
Как автоматизировать обновление тем и плагинов в WordPress с помощью кода
17.01.2026
Как удалить старые transient данные в WordPress без плагинов
11.03.2026
Как избежать ошибок WooCommerce при массовом изменении цен продуктов
18.05.2026
Как отключить Gutenberg и вернуть классический редактор в WordPress
06.01.2026