WooCommerce: как изменить цену товара на лету с помощью фильтров

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

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

Как изменить цену товара на лету: пошаговое решение

Использование фильтра woocommerce_product_get_price

Фильтр woocommerce_product_get_price позволяет изменить цену товара при ее получении. Ниже пример кода, который добавляет 10% скидку для пользователя с ролью "wholesale_customer":

add_filter('woocommerce_product_get_price', 'custom_dynamic_price', 10, 2);
function custom_dynamic_price($price, $product) {
    if (current_user_can('wholesale_customer')) {
        $discount = 0.9; // 10% скидка
        $price = $price * $discount;
    }
    return $price;
}

Обработка цены в корзине и оформлении заказа

Чтобы цена изменилась и в корзине, и при оформлении заказа, нужно аналогично применить фильтр woocommerce_product_get_price и woocommerce_product_get_regular_price (если нужно менять и обычную цену), а также woocommerce_cart_item_price для корректного отображения в корзине.

add_filter('woocommerce_cart_item_price', 'custom_cart_item_price', 10, 3);
function custom_cart_item_price($price_html, $cart_item, $cart_item_key) {
    if (current_user_can('wholesale_customer')) {
        $product = $cart_item['data'];
        $price = $product->get_price();
        $price_html = wc_price($price);
    }
    return $price_html;
}

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

  • Авторизуйтесь под пользователем с ролью wholesale_customer и откройте страницу товара — цена должна быть ниже на 10%.
  • Добавьте товар в корзину и проверьте, что цена там совпадает с измененной.
  • Оформите заказ и убедитесь, что итоговая сумма соответствует динамической цене.

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

  • Изменение цены только на странице товара, но не в корзине: нужно использовать фильтры, которые применяются и в корзине, например woocommerce_cart_item_price.
  • Цена меняется для всех пользователей: проверьте в коде условие с current_user_can() или аналогичной логикой, фильтр должен применяться только для нужных ролей или условий.
  • Цена меняется, но не сохраняется при оформлении заказа: динамическая цена не изменяет данные в заказе, чтобы сохранить цену, можно использовать фильтры woocommerce_before_calculate_totals для корректировки цены в объекте корзины.

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

  • Не используйте тяжелые запросы к базе или внешним API внутри фильтров цены — это замедлит загрузку страниц.
  • Кэшируйте результаты расчетов, если применяете сложные условия.
  • Тестируйте все изменения на staging-сайте, чтобы избежать ошибок в процессе оформления заказа.

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

СпособПреимуществаНедостатки
Фильтры WooCommerce (woocommerce_product_get_price)Гибкость, не изменяет базу, легко отменяетсяТребует точной настройки, может не работать в сторонних плагинах
Изменение цены в базе данныхПостоянное изменение, учитывается вездеРиск ошибок, сложно откатить изменения
Плагины для динамических ценУдобство, готовые решенияЗависимость от стороннего кода, нагрузка
Как удалить по умолчанию скрипты и стили в WooCommerce для ускорения сайта
07.05.2026
Как автоматизировать управление ролями пользователей в WordPress
10.04.2026
Как добавить дополнительные мета-поля в административную панель WordPress
22.12.2025
Как создать динамические таблицы в WordPress с помощью шорткода
17.12.2025
Как отключить REST API в WordPress для защиты сайта
13.02.2026