WooCommerce: изменение цен товаров в корзине через хук woocommerce_before_calculate_totals

|

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

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

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

Диагностика: когда и почему изменения цен не применяются

Если после попыток изменить цены через хуки вы не видите изменений в корзине или на странице оформления заказа, проверьте следующие моменты:

Пошаговое решение: как изменить цену товара в корзине с помощью хука

1. Создайте функцию, которая будет перебирать все товары в корзине.

2. Внутри функции получите объект товара и вызовите метод set_price() для изменения цены.

3. Зарегистрируйте функцию на хук woocommerce_before_calculate_totals с передачей ссылки на объект корзины.

add_action('woocommerce_before_calculate_totals', 'custom_change_cart_item_price', 10, 1);
function custom_change_cart_item_price( $cart ) {
    if ( is_admin() && ! defined('DOING_AJAX') ) return;
    // Пример: скидка 20% на все товары в корзине
    foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) {
        $product = $cart_item['data'];
        $original_price = $product->get_regular_price();
        $new_price = $original_price * 0.8; // скидка 20%
        $product->set_price( $new_price );
    }
}

Объяснение кода

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

Чтобы убедиться, что цены меняются:

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

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

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

СпособОписаниеПлюсыМинусы
Хук woocommerce_before_calculate_totalsИзменение цены динамически в корзинеГибкий, не меняет базу, работает с любыми товарамиНе влияет на цены вне корзины
Фильтр woocommerce_get_priceИзменение цены при выводеМеняет цену на фронте и в каталогеМожет влиять на сортировку, сложнее в поддержке
Изменение цены товара в базе (через update_post_meta)Постоянное изменение ценыПростое изменение цены товараНарушает целостность данных, влияет на все заказы
WooCommerce: исправляем ошибку неправильного присвоения родительской категории товара
20.04.2026
WooCommerce: как автоматически устанавливать родительскую категорию при массовом изменении товаров
23.07.2026
WooCommerce: как исправить не работающий AJAX-фильтр по иерархии категорий
26.05.2026
Как создать иерархию для виджетов WordPress с динамической подгрузкой
28.01.2026
Как создать иерархию комментариев в WordPress с пользовательской логикой
18.01.2026
×
-15%
на премиум плагин
Clearfy

Защитите сайт!

Включить Clearfy »