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

|

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

В стандартном WooCommerce цена товара фиксирована для всех пользователей. Однако в магазинах с разными категориями клиентов (например, оптовики, розничные покупатели, партнеры) требуется показывать и использовать разные цены в зависимости от роли пользователя. Это позволяет гибко управлять ценовой политикой и стимулировать определенные группы покупателей.

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

Подход без плагинов: настраиваем через фильтры WooCommerce

Для изменения цены динамически используем фильтр woocommerce_get_price. Ниже пример кода, который изменяет цену, если пользователь имеет роль wholesale_customer — цена уменьшается на 20%:

add_filter('woocommerce_get_price', 'custom_price_by_user_role', 10, 2);
function custom_price_by_user_role($price, $product) {
    if (is_user_logged_in()) {
        $user = wp_get_current_user();
        if (in_array('wholesale_customer', (array) $user->roles)) {
            $price = $price * 0.8; // скидка 20%
        }
    }
    return $price;
}

Этот код нужно добавить в файл functions.php вашей дочерней темы или в плагин для пользовательских функций.

Поддержка роли гостя и других ролей

Если нужно задать цену для гостевых пользователей или других ролей, расширьте условие:

add_filter('woocommerce_get_price', 'custom_price_by_user_role_extended', 10, 2);
function custom_price_by_user_role_extended($price, $product) {
    if (!is_user_logged_in()) {
        // цена для гостей
        $price = $price * 1.1; // например, наценка 10%
    } else {
        $user = wp_get_current_user();
        if (in_array('wholesale_customer', (array) $user->roles)) {
            $price = $price * 0.8;
        } elseif (in_array('vip_customer', (array) $user->roles)) {
            $price = $price * 0.9;
        }
    }
    return $price;
}

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

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

Для проверки используйте режим инкогнито для гостевого пользователя и разные аккаунты с нужными ролями.

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

Расширенное решение: изменение цены в корзине и заказах

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

add_action('woocommerce_before_calculate_totals', 'custom_price_cart_by_user_role', 10);
function custom_price_cart_by_user_role($cart) {
    if (is_admin() && !defined('DOING_AJAX')) return;
    if (!is_user_logged_in()) {
        $role = 'guest';
    } else {
        $user = wp_get_current_user();
        $roles = $user->roles;
        $role = reset($roles); // берем первую роль
    }
    foreach ($cart->get_cart() as $cart_item_key => $cart_item) {
        $product = $cart_item['data'];
        $price = $product->get_regular_price();
        switch ($role) {
            case 'wholesale_customer':
                $new_price = $price * 0.8;
                break;
            case 'vip_customer':
                $new_price = $price * 0.9;
                break;
            case 'guest':
                $new_price = $price * 1.1;
                break;
            default:
                $new_price = $price;
        }
        $product->set_price($new_price);
    }
}

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

Чек-лист для реализации изменения цен по ролям в WooCommerce

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

МетодПреимуществаНедостатки
Только фильтр woocommerce_get_priceПростая реализация, быстрое изменение цены на фронтендеНе меняет цену в корзине и заказах, возможны рассогласования
Фильтр + woocommerce_before_calculate_totalsПолное изменение цены на сайте, в корзине и заказахСложнее в реализации, требует тщательного тестирования
Плагины для цен по ролямГотовые решения с интерфейсом, поддержкой и настройкамиДополнительные расходы, возможные конфликты, нагрузка

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

WooCommerce: как изменить цену товара в зависимости от роли пользователя
25.06.2026
Как запретить индексацию отдельных страниц WordPress без robots.txt
22.08.2026
Как создать многоуровневый фильтр продуктов в WordPress без плагинов
11.01.2026
WooCommerce: динамическое обновление корзины на странице оформления заказа с помощью хука woocommerce_checkout_update_order_review
14.06.2026
Как удалить пользовательские данные при удалённой регистрации WordPress
21.02.2026
×
Прокачай свой WordPress!

Скидка -20% на премиум темы и плагины

Воспользоваться сейчас ⋙