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

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

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

Пошаговое решение: как реализовать динамическое изменение цены через фильтр

1. Определите условие изменения цены

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

2. Используйте фильтр woocommerce_product_get_price

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

3. Пример кода для изменения цены по роли пользователя

add_filter('woocommerce_product_get_price', 'custom_dynamic_price', 10, 2);
function custom_dynamic_price($price, $product) {
    if (is_user_logged_in()) {
        $user = wp_get_current_user();
        if (in_array('wholesaler', (array) $user->roles)) {
            $price = $price * 0.9; // скидка 10%
        }
    }
    return $price;
}

4. Пример кода для изменения цены в корзине при количестве больше 5

add_action('woocommerce_before_calculate_totals', 'custom_price_based_on_quantity', 10, 1);
function custom_price_based_on_quantity($cart) {
    if (is_admin() && !defined('DOING_AJAX')) return;
    foreach ($cart->get_cart() as $cart_item) {
        if ($cart_item['quantity'] > 5) {
            $original_price = $cart_item['data']->get_price();
            $new_price = $original_price * 0.85; // скидка 15%
            $cart_item['data']->set_price($new_price);
        }
    }
}

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

  • Зайдите на страницу товара под пользователем с ролью, для которого меняется цена (например, "оптовик").
  • Убедитесь, что на странице товара и в корзине отображается изменённая цена.
  • Добавьте в корзину количество товара больше 5 и проверьте изменение цены по второму примеру.
  • Проверьте, что для обычных пользователей цена остаётся без изменений.

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

  • Цена не меняется в корзине: Не используйте только фильтр woocommerce_product_get_price для изменения цены в корзине. Для корзины нужно использовать woocommerce_before_calculate_totals и метод set_price().
  • Изменение цены не отображается на странице товара: Возможно, кэширование страницы мешает. Очистите кэш и отключите временно плагины кэширования.
  • Функция применяется ко всем пользователям: Проверьте корректность условий в коде, например, проверку ролей через in_array и вызов is_user_logged_in().
  • Производительность снижается: Избегайте сложных SQL-запросов и вызывайте фильтры только при необходимости.

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

  • Не храните изменённые цены в базе — используйте фильтры для динамического изменения на лету.
  • Минимизируйте количество операций в хуках, чтобы не замедлять загрузку страницы и расчёт корзины.
  • При необходимости масштабируемых решений рассмотрите использование специализированных плагинов для динамического ценообразования, например Clearfy Pro для оптимизации и управления ценами.

Сравнение подходов к изменению цены в WooCommerce

МетодГде работаетПлюсыМинусы
Фильтр woocommerce_product_get_priceВывод ценыПростота, универсальностьНе меняет цену в корзине и заказах
Хук woocommerce_before_calculate_totals + set_price()Корзина, оформление заказаИзменяет цену в корзине и заказахНужно правильно использовать, может влиять на производительность
Создание вариаций или отдельных товаровВся система WooCommerceСтандартное решение, совместимость с отчётамиБольше администрирования, нагрузка на БД
Как автоматизировать удаление спам-комментариев в WordPress
19.12.2025
Как отключить AJAX в Gravity Forms и использовать собственный AJAX-обработчик в WordPress
13.02.2026
Как удалить варианты товаров WooCommerce при удалении атрибута
26.04.2026
Как использовать динамический кэшинг в WooCommerce для ускорения загрузки страниц
03.05.2026
Как использовать фильтры WooCommerce для автоматического изменения стоимости товаров
03.06.2026

Задать вопрос о вордпресс, получить ответ - это все можно сделать в нашем сообществе WP. Сайт в данный момент в разработке, изучите ссылки ниже: