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

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

Понимание фильтров WooCommerce для цены

WooCommerce предоставляет несколько хуков и фильтров, которые позволяют менять цену товара на лету. Основные из них:

  • woocommerce_get_price — фильтр для изменения базовой цены товара;
  • woocommerce_product_get_price и woocommerce_product_variation_get_price — более новые фильтры, применяемые к объектам товара и вариаций;
  • woocommerce_cart_item_price — для изменения цены в корзине;
  • woocommerce_get_price_html — для изменения отображаемого HTML цены.

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

Пример: динамическая скидка для определённой роли пользователя

Предположим, нам нужно сделать скидку 10% на все товары для пользователей с ролью «партнёр». Для этого используем фильтр woocommerce_product_get_price:

function wpsystem_modify_price_for_partners($price, $product) {
    if (current_user_can('partner')) { // замените 'partner' на вашу роль
        $price = $price * 0.9; // скидка 10%
    }
    return $price;
}
add_filter('woocommerce_product_get_price', 'wpsystem_modify_price_for_partners', 10, 2);
add_filter('woocommerce_product_variation_get_price', 'wpsystem_modify_price_for_partners', 10, 2);

Этот код уменьшит цену для всех товаров и вариаций на 10% для пользователей с ролью «partner».

Подсказка по отладке

Если цена не меняется, проверьте, что роль пользователя установлена и фильтр правильно подключён. Также убедитесь, что другие плагины не переопределяют цену после вас.

Изменение цены в корзине с учётом дополнительных условий

В корзине можно менять цену с помощью фильтра woocommerce_cart_item_price, но лучше использовать woocommerce_before_calculate_totals, чтобы изменить цену товара для расчёта суммы заказа.

function wpsystem_apply_cart_item_discount($cart) {
    if (is_admin() && !defined('DOING_AJAX')) return;

    foreach ($cart->get_cart() as $cart_item) {
        if (current_user_can('partner')) {
            $original_price = $cart_item['data']->get_price();
            $discounted_price = $original_price * 0.9; // 10% скидка
            $cart_item['data']->set_price($discounted_price);
        }
    }
}
add_action('woocommerce_before_calculate_totals', 'wpsystem_apply_cart_item_discount', 10, 1);

Такой подход гарантирует, что цена в корзине и итоговая сумма будут с учётом скидки.

Изменение отображения цены товара

Если нужно изменить как цена отображается на странице товара или в каталоге, используйте фильтр woocommerce_get_price_html:

function wpsystem_custom_price_html($price_html, $product) {
    if (current_user_can('partner')) {
        $price_html .= ' <small>(скидка для партнёров)</small>';
    }
    return $price_html;
}
add_filter('woocommerce_get_price_html', 'wpsystem_custom_price_html', 10, 2);

Это добавит пометку рядом с ценой для пользователей с ролью «partner».

Полезные плагины для работы с ценами в WooCommerce

Для расширенных возможностей управления ценами можно использовать плагины:

  • Clearfy Pro — оптимизация WooCommerce и WordPress, включая управление ценами и кэшированием;
  • WPGPT — для создания автоматизации и подсказок на основе ИИ, можно интегрировать с процессом изменения цен;
  • WPRemark — система отзывов, которая может взаимодействовать с акциями и ценами.

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

При работе с динамическим изменением цен учитывайте:

  • Не изменяйте цену товара в базе данных напрямую — используйте фильтры;
  • Проверяйте совместимость с другими плагинами, которые тоже могут менять цену;
  • Внимательно тестируйте работу на разных ролях и состояниях корзины;
  • Если нужно более сложное ценообразование, рассмотрите плагины для динамического ценообразования.

Как избежать конфликтов с кэшированием

Динамические цены могут не отображаться корректно при использовании кеширующих плагинов. Для этого:

  • Используйте AJAX для обновления цены;
  • Исключайте страницы с товарами из кеша для авторизованных пользователей;
  • Настраивайте правила кеширования в плагинах вроде Clearfy Pro.
WooCommerce: как установить разные ставки НДС на один товар
17.05.2026
Как создать автоматический импорт продуктов в WooCommerce
16.02.2026
WooCommerce: как программно удалять товар из корзины по условию
24.05.2026
Как добавить автоматический режим работы для плагина WordPress
25.01.2026
WooCommerce: как добавить политику конфиденциальности на страницу оформления заказа
29.05.2026