Как использовать хуки WordPress для изменения поведения корзины WooCommerce

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

Корзина WooCommerce — ключевая часть интернет-магазина, и порой требуется внести нестандартные изменения: добавить уведомление, изменить вывод цены, автоматически применять скидку или изменить поведение кнопки «Оформить заказ». Чтобы сделать это без правки ядра и с сохранением возможности обновлений, используются хуки WordPress — actions и filters.

Какие хуки использовать для изменения корзины WooCommerce

WooCommerce предоставляет множество хуков для работы с корзиной. Ниже основные из них:

  • woocommerce_before_cart — вывод перед корзиной;
  • woocommerce_after_cart — вывод после корзины;
  • woocommerce_cart_item_name — фильтр для изменения названия товара в корзине;
  • woocommerce_cart_totals_before_order_total — действие перед итоговой суммой;
  • woocommerce_before_calculate_totals — действие перед подсчетом итогов, можно менять цены;
  • woocommerce_cart_item_price — фильтр для изменения цены товара в корзине;
  • woocommerce_proceed_to_checkout — действие для изменения кнопки перехода к оформлению заказа.

Пошаговое решение: пример автоматического применения скидки 10% на корзину с суммой свыше 5000 ₽

1. Добавьте код в functions.php или в плагин для кастомных функций.

add_action('woocommerce_before_calculate_totals', 'apply_custom_discount_to_cart', 10, 1);
function apply_custom_discount_to_cart( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;
    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 ) return;

    $threshold = 5000; // минимальная сумма для скидки
    $discount_percent = 10; // размер скидки

    $cart_total = 0;
    foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) {
        $cart_total += $cart_item['line_total'];
    }

    if ( $cart_total > $threshold ) {
        foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) {
            $original_price = $cart_item['data']->get_price();
            $discounted_price = $original_price * (1 - $discount_percent / 100);
            $cart_item['data']->set_price( $discounted_price );
        }
    }
}

2. Очистите кэш сайта и корзины, если используете кеширующие плагины.

3. Проверьте, что скидка применяется. Добавьте товары на сумму более 5000 ₽ и убедитесь, что цены в корзине уменьшились на 10%.

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

  • Добавьте несколько товаров в корзину на сумму выше 5000 ₽.
  • Откройте страницу корзины, убедитесь, что цены изменились (на 10% меньше).
  • Проверьте, что при сумме ниже 5000 ₽ цены не меняются.
  • Откройте консоль браузера на странице оформления заказа — ошибок JavaScript быть не должно.
  • Проверьте, что в админке заказ отображается с корректными суммами.

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

  • Скидка не применяется — проверьте, что функция привязана к хуку woocommerce_before_calculate_totals с приоритетом 10, и что условие на сумму работает.
  • Цена не обновляется в админке — убедитесь, что скидка применяется до подсчета итогов, иначе WooCommerce не увидит изменённые цены.
  • Двойное применение скидки — используйте проверку did_action('woocommerce_before_calculate_totals'), чтобы избежать повторного срабатывания.
  • Проблемы с кэшем — отключите кэш для страниц корзины и оформления заказа.

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

  • Не изменяйте цены напрямую в базе данных, используйте предоставленные методы WooCommerce, чтобы избежать ошибок.
  • Кэшируйте только страницы без динамического контента (например, корзина и оформление заказа должны быть исключены из кэша).
  • Используйте локальные проверки для условий — например, is_cart() или is_checkout(), чтобы код не работал на всех страницах.
  • Тестируйте изменения на тестовом сайте, чтобы избежать сбоев в работе магазина.

Сравнение способов изменения корзины WooCommerce

МетодОписаниеПлюсыМинусы
Хуки (actions и filters)Изменение поведения через стандартные хуки WooCommerceЛегко обновлять, не ломает ядро, гибкоТребует знания API WooCommerce
Шаблонные переопределенияИзменение файлов шаблонов корзиныПолный контроль над выводомСложнее обновлять, возможны конфликты
Плагины сторонних разработчиковГотовые решения с настройкамиБыстрое внедрение без кодаОграниченная кастомизация, нагрузка
Автоматизация создания и удаления пользовательских метаполей в WordPress
10.04.2026
Как добавить поле в форму регистрации WordPress
26.11.2025
Автоматическое удаление неиспользуемых метаполей в WordPress
22.03.2026
Как массово удалить мета-ключи в WordPress
01.03.2026
Автоматическое удаление старого мета-поля в WordPress при обновлении записи
25.02.2026