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

|

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

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

Чтобы точно понять, нужна ли вам именно динамическая замена цены по роли, проверьте следующие моменты:

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

Шаг 1. Определяем роли и цены

Допустим, у вас есть роль wholesale_customer для оптовиков, которым нужно давать скидку 20% на все товары.

Шаг 2. Добавляем фильтр для изменения цены

Добавьте следующий код в файл functions.php вашей темы или в кастомный плагин:

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', $user->roles)) {
            $discount = 0.8; // скидка 20%
            $price = $price * $discount;
        }
    }
    return $price;
}

Этот код снижает цену всех товаров на 20% для пользователей с ролью wholesale_customer.

Шаг 3. Обновляем цену в корзине и на странице оформления заказа

Чтобы итоговая цена в корзине и заказе соответствовала, добавьте:

add_action('woocommerce_before_calculate_totals', 'custom_cart_price_by_user_role', 10);

function custom_cart_price_by_user_role($cart) {
    if (is_admin() && !defined('DOING_AJAX')) return;

    if (is_user_logged_in()) {
        $user = wp_get_current_user();
        if (in_array('wholesale_customer', $user->roles)) {
            foreach ($cart->get_cart() as $cart_item) {
                $original_price = $cart_item['data']->get_regular_price();
                $discount = 0.8;
                $cart_item['data']->set_price($original_price * $discount);
            }
        }
    }
}

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

1. Войдите под пользователем с ролью wholesale_customer и зайдите на страницу товара — цена должна отображаться с 20%-й скидкой.

2. Добавьте товар в корзину и проверьте, что цена там тоже изменена.

3. Выйдите из аккаунта или войдите под пользователем без роли wholesale_customer, убедитесь, что цена возвращается к стандартной.

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

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

Сравнение вариантов реализации

МетодПлюсыМинусыКогда использовать
Кодовое изменение через хуки (как в статье)Гибкость, бесплатно, не требует плагиновТребует навыков, возможные конфликты, нужно тестироватьЕсли нужно простое правило и вы умеете работать с кодом
Плагины для динамических цен (например, WooCommerce Dynamic Pricing)Простота настройки, много функцийПлатно, может нагружать сайтЕсли нужны сложные правила и готовое решение
Изменение цен через пользовательские поля товаровТочная настройка цен для каждого товараТрудоёмко, требует ручного вводаКогда нужно индивидуальное ценообразование на товары
Как сделать динамические шорткоды WordPress: примеры и практические решения
13.11.2025
Как удалить или изменить URL записи WordPress без редиректа и ошибок 404
05.12.2025
Как запретить регистрацию пользователей в WordPress по URL с помощью кода и плагинов
20.12.2025
Как изменить автозаголовок WordPress динамически на основе контекста
11.02.2026
Как удалить пользовательские данные при удалённой регистрации WordPress
21.02.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше