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

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

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

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

1. Использование плагинов для управления ценами

Плагины вроде Clearfy Pro или сторонние плагины «Dynamic Pricing» позволяют гибко настраивать цены по ролям, группам или другим правилам. Преимущество — быстрое внедрение без кода. Недостаток — часто платные и влияют на производительность.

2. Кастомный код через фильтр woocommerce_product_get_price

Для полной кастомизации можно использовать хук woocommerce_product_get_price, который позволяет изменить цену товара динамически перед выводом на сайте.

add_filter('woocommerce_product_get_price', 'custom_price_for_user', 10, 2);
add_filter('woocommerce_product_get_regular_price', 'custom_price_for_user', 10, 2);

function custom_price_for_user($price, $product) {
    if (is_user_logged_in()) {
        $user = wp_get_current_user();
        // Пример: снизить цену на 10% для пользователей с ролью "wholesale_customer"
        if (in_array('wholesale_customer', $user->roles)) {
            $price = $price * 0.9;
        }
    }
    return $price;
}

Пошаговое решение на примере снижения цены для роли wholesale_customer

  1. Добавьте новую роль пользователя, если её ещё нет, например через плагин или код add_role('wholesale_customer', 'Оптовый клиент');
  2. Поместите приведённый выше код в файл functions.php вашей темы или в отдельный плагин.
  3. Очистите кеш сайта и браузера.
  4. Залогиньтесь под пользователем с ролью wholesale_customer и проверьте цену товара на витрине.

Как проверить, что решение сработало

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

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

  • Цена не меняется для роли пользователя: Проверьте, что пользователь действительно имеет эту роль (print_r(wp_get_current_user())). Также убедитесь, что фильтры добавлены корректно и не перезаписываются другими плагинами.
  • Изменённая цена не отображается в корзине и на этапе оформления заказа: Добавьте фильтр woocommerce_get_price_html или используйте хук woocommerce_before_calculate_totals для принудительного обновления цены в корзине.
  • Конфликты с плагинами скидок и кешированием: Отключите кеш и отключите плагины скидок, чтобы проверить, не влияют ли они на результат.

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

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

Пример расширения: изменение цены в корзине

add_action('woocommerce_before_calculate_totals', 'custom_cart_item_price', 10, 1);
function custom_cart_item_price($cart) {
    if (is_admin() && !defined('DOING_AJAX')) return;

    foreach ($cart->get_cart() as $cart_item) {
        $product = $cart_item['data'];
        $price = $product->get_price();

        $user = wp_get_current_user();
        if (in_array('wholesale_customer', $user->roles)) {
            $new_price = $price * 0.9; // 10% скидка
            $product->set_price($new_price);
        }
    }
}

Сравнение методов изменения цены

МетодПлюсыМинусыПример использования
Плагин (Clearfy Pro, Dynamic Pricing)Быстро, много функций, поддержкаПлатно, может нагружать сайтГибкая настройка без кода
Фильтр woocommerce_product_get_priceПолный контроль, бесплатноТребует навыков, может конфликтоватьКастомные скидки по ролям
Изменение цены в корзине через woocommerce_before_calculate_totalsУчёт скидок в заказеСложнее отлаживать, нужно тщательно тестироватьДинамическое изменение стоимости в корзине
Как изменить стоимость товара в WooCommerce в зависимости от роли пользователя
23.05.2026
Как создать автоматическую переадресацию по условиям в WordPress с примерами кода
30.03.2026
Как добавить автоматическое обновление плагинов в WordPress с помощью кода
24.02.2026
WooCommerce: изменение стоимости товара в зависимости от роли пользователя и выбранных атрибутов
08.06.2026
Как создать собственный виджет в WordPress с примером кода
13.11.2025