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

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

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

Пошаговое решение: программное изменение цены товара после применения купона

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

Этот хук позволяет вмешаться в расчёт стоимости товаров в корзине и изменить цену до финального подсчёта.

add_action('woocommerce_before_calculate_totals', 'custom_change_product_price_after_coupon', 20, 1);function custom_change_product_price_after_coupon( $cart ) {    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) {        return;    }    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 ) {        return;    }    // Проверяем, применён ли нужный купон    $target_coupon_code = 'special10'; // замените на ваш код купона    $applied_coupons = $cart->get_applied_coupons();    if ( ! in_array( $target_coupon_code, $applied_coupons ) ) {        return;    }    // Перебираем все товары в корзине    foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) {        $product = $cart_item['data'];        // Например, меняем цену только для товара с ID 123        if ( $product->get_id() === 123 ) {            $original_price = $product->get_regular_price();            $new_price = $original_price * 0.9; // скидка 10%            $product->set_price( $new_price );        }    }}

2. Как применить код

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

3. Настройка под ваши условия

  • Замените special10 на код купона, который вы используете.
  • Укажите ID товаров, для которых нужно менять цену, или расширьте логику условий по SKU, категории и т.д.

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

  1. Создайте купон с кодом, например, special10 в WooCommerce админке.
  2. Добавьте товар с ID 123 в корзину.
  3. Примените купон на странице корзины.
  4. Обновите страницу и проверьте, изменилась ли цена товара на 10% ниже оригинала.
  5. Если цена изменилась — код работает корректно.

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

  • Цена не меняется: убедитесь, что код купона правильно указан и купон действительно применён; проверьте, что ID товара совпадает.
  • Цена меняется, но в корзине неверно отображается итоговая сумма: возможно конфликт с другими плагинами или кастомными функциями, отключите другие плагины и проверьте.
  • Цена меняется несколько раз (зацикливание): используйте проверку did_action('woocommerce_before_calculate_totals') >= 2 для предотвращения повторного применения.

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

  • Не изменяйте цену товара глобально — меняйте цену только в объекте корзины, чтобы избежать проблем с ценами на сайте.
  • Используйте кеширование и минимизируйте сложные вычисления внутри хука.
  • Проверяйте совместимость с плагинами кэширования и оптимизации WooCommerce.

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

Метод Преимущества Недостатки
Использование woocommerce_before_calculate_totals Гибко, работает на уровне корзины, прост в реализации Не влияет на цену товара в каталоге, только в корзине
Изменение цен через фильтр woocommerce_get_price Изменяет цену везде (каталог, корзина) Сложнее контролировать, может влиять на SEO и расчёты
Использование сторонних плагинов для скидок Простая настройка без кода Может быть дороже и менее гибко

Дополнительные рекомендации

  • Для сложных условий используйте дополнительные проверки: роли пользователя, время действия купона, категории товаров.
  • Если нужно изменить цену для нескольких товаров — используйте массив с ID и циклы для применения скидок.
  • Для интеграции с WPShop можно рассмотреть Clearfy Pro для оптимизации и очистки сайта после внедрения кастомного кода https://wpshop.ru/plugins/clearfy.
Почему не работают купоны в WooCommerce и как это исправить
20.04.2026
Автоматическая замена изображений вариаций в WooCommerce
12.05.2026
WooCommerce: как использовать хук woocommerce_before_calculate_totals для автоматического изменения цен
07.07.2026
Как удалить все медиафайлы из медиатеки WordPress программно
22.02.2026
WooCommerce: автоматическое изменение стоимости товара после применения купона
23.06.2026