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

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

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

Пошаговое решение: изменение цены товара по ролям с помощью кода

Самый надёжный способ — использовать фильтр woocommerce_product_get_price и аналогичный для регулярной и акционной цены. В функции определяем роль пользователя и задаём нужную цену.

1. Получаем роль пользователя

function get_user_primary_role() {
    if ( ! is_user_logged_in() ) {
        return 'guest';
    }
    $user = wp_get_current_user();
    $roles = (array) $user->roles;
    return ! empty( $roles ) ? $roles[0] : 'subscriber';
}

2. Функция для изменения цены

function change_price_by_user_role( $price, $product ) {
    $role = get_user_primary_role();

    // Пример изменения цен по ролям
    switch ( $role ) {
        case 'wholesaler':
            // Скидка 20% для оптовиков
            $price = $price * 0.8;
            break;
        case 'vip_customer':
            // Фиксированная цена 1000 для VIP
            $price = 1000;
            break;
        case 'guest':
            // Для гостей цена не меняется
            break;
        default:
            // Для остальных цена без изменений
            break;
    }
    return $price;
}

3. Подключаем фильтры WooCommerce

add_filter( 'woocommerce_product_get_price', 'change_price_by_user_role', 10, 2 );
add_filter( 'woocommerce_product_get_regular_price', 'change_price_by_user_role', 10, 2 );
add_filter( 'woocommerce_product_get_sale_price', 'change_price_by_user_role', 10, 2 );

Как проверить, что изменение цены работает

  • Зарегистрируйте пользователей с разными ролями: wholesaler, vip_customer, обычный пользователь.
  • Авторизуйтесь под каждым и откройте страницу товара — цена должна изменяться согласно коду.
  • Для теста гостя выйдите из аккаунта и проверьте цену, она должна быть стандартной.
  • В админке WooCommerce проверьте, что в заказах сохраняется правильная цена.
  • В консоли разработчика браузера проверьте, что цена выводится корректно и нет JS-ошибок.

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

  • Цена не меняется на сайте: проверьте, что фильтры подключены правильно и функция получает роль пользователя.
  • Цена меняется, но в корзине и оплате — нет: добавьте аналогичные фильтры для корзины и корзинных объектов, например woocommerce_get_price или используйте хуки для обновления цены в WC_Cart.
  • Конфликт с кешированием: если используете кеширование страниц, цены могут кэшироваться и не обновляться. Настройте исключения кеша по ролям или отключите кеш для страниц магазина.
  • Не учитываются дополнительные налоги и скидки: убедитесь, что ваша логика не конфликтует с налоговыми правилами WooCommerce.

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

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

Альтернативы: плагины vs код

МетодПреимуществаНедостатки
Код в functions.phpГибкость, отсутствие лишних плагинов, полный контрольТребует навыков PHP, риск ошибок без тестирования
Плагины для ценообразования по ролям (например, WooCommerce Role Based Pricing)Простая настройка, поддержка обновлений, дополнительные функцииМогут нагружать сайт, не всегда бесплатны

Если нужна автоматизация и расширенные возможности — рассмотрите плагин Clearfy Pro от WPShop (https://wpshop.ru/plugins/clearfy) с функциями SEO и оптимизации, которые помогут избежать дублирования цен и ошибок.

WooCommerce: установка и настройка платёжного шлюза Яндекс.Касса
06.07.2026
Как удалить пустые термины в WordPress: практическое руководство
23.03.2026
Как настроить автотеги в WordPress для автоматической целевой категории
12.02.2026
Как создать автоматическую переадресацию по условиям в WordPress с примерами кода
30.03.2026
Создание автоматической обратной связи в WordPress с помощью WPRemark
19.03.2026