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

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

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

Как понять, что нужна настройка по ролям?

  • Вы видите, что все пользователи видят одинаковую цену, но хотите сегментировать цены.
  • Есть зарегистрированные пользователи с разными ролями (например, "оптовик" и "гость").
  • Вы хотите избежать создания дублирующих товаров с разными ценами.

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

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

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

function custom_price_by_user_role($price, $product) {
    if (is_admin()) return $price; // Для админки не менять

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

Код стоит добавить в файл functions.php дочерней темы или в плагин функционала.

Как добавить новую роль пользователя?

Если роли "wholesale_customer" еще нет, добавьте ее так:

function add_wholesale_customer_role() {
    add_role('wholesale_customer', 'Оптовый покупатель', [
        'read' => true,
        'level_0' => true
    ]);
}
add_action('init', 'add_wholesale_customer_role');

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

Чтобы убедиться, что цены меняются:

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

Если цена отличается и применена скидка, значит все работает корректно.

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

  • Цена не меняется — проверьте, что фильтр применяется к нужным хукам и что код не конфликтует с другими плагинами ценообразования.
  • Изменение цены в админке — добавьте условие if (is_admin()) return $price; чтобы не ломать интерфейс управления товарами.
  • Роль пользователя не распознается — убедитесь в правильности названия роли и что пользователь действительно авторизован.
  • Кэш блокирует изменение цены — очистите кэш сайта и браузера, временно отключите плагин кэширования.

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

  • Минимизируйте количество вычислений в фильтрах цен — например, кэшируйте результаты, если цена рассчитывается сложно.
  • Не используйте глобальные запросы к базе данных внутри фильтра цены, чтобы не замедлять загрузку страниц.
  • Обязательно проверяйте is_user_logged_in() перед получением роли, чтобы избежать ошибок.
  • Если магазин использует сложные правила ценообразования, рассмотрите плагины типа Clearfy Pro для дополнительной оптимизации и настройки.

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

МетодПреимуществаНедостаткиПример использования
Код в functions.phpЛегко кастомизировать, не требует плагиновТребует знаний PHP, возможны ошибкиПример выше с фильтрами WooCommerce
Плагин для ролей и цен (например, Wholesale Suite)Удобный интерфейс, готовые функцииПлатный, лишние функции могут замедлять сайтУправление ценами через панель
Комбинация плагинов + кастомный кодМаксимальная гибкость и контрольСложнее в поддержке, требует тестированияClearfy + кастомный фильтр
Как создать собственный виджет для WordPress
14.11.2025
Как удалить кэш в WordPress: практические методы и советы
15.01.2026
Как отключить автоматический выход из WordPress
17.02.2026
WooCommerce: исключение товаров из определённых категорий из поиска
21.04.2026
WooCommerce: как автоматически изменить стоимость товара при регистрации пользователя
29.05.2026