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

|

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

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

Как реализовать ограничение доступа к категориям товаров по ролям — пошаговое решение

1. Определяем роли пользователей и категории товаров

Убедитесь, что нужные роли созданы. Если нет, добавьте их через add_role() или плагин User Role Editor. Запомните слаги ролей, например wholesale_customer для оптовиков.

2. Фильтруем отображение товаров на витрине

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

function wh_filter_products_by_role( $query ) {
    if ( is_admin() || ! $query->is_main_query() ) {
        return;
    }

    if ( is_shop() || is_product_category() ) {
        $user = wp_get_current_user();
        $role = (array) $user->roles;

        // Пример ограничения для роли wholesale_customer
        if ( in_array( 'wholesale_customer', $role ) ) {
            // Разрешённые категории для wholesale_customer
            $allowed_cats = array( 'optovye-tovary', 'special-products' );

            // Получаем ID категорий
            $term_ids = array();
            foreach ( $allowed_cats as $slug ) {
                $term = get_term_by( 'slug', $slug, 'product_cat' );
                if ( $term ) {
                    $term_ids[] = $term->term_id;
                }
            }

            // Фильтруем товары по этим категориям
            $tax_query = array(
                array(
                    'taxonomy' => 'product_cat',
                    'field'    => 'term_id',
                    'terms'    => $term_ids,
                    'operator' => 'IN',
                ),
            );

            $query->set( 'tax_query', $tax_query );
        }
    }
}
add_action( 'pre_get_posts', 'wh_filter_products_by_role' );

3. Ограничиваем доступ к страницам категорий напрямую

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

function wh_restrict_category_access() {
    if ( is_product_category() ) {
        $user = wp_get_current_user();
        $role = (array) $user->roles;

        $restricted_cats_for_wholesale = array( 'roznichnye-tovary' ); // примеры запрещённых категорий

        $current_cat = get_queried_object();
        if ( in_array( 'wholesale_customer', $role ) && in_array( $current_cat->slug, $restricted_cats_for_wholesale ) ) {
            wp_redirect( home_url() );
            exit;
        }
    }
}
add_action( 'template_redirect', 'wh_restrict_category_access' );

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

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

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

Сравнение вариантов реализации ограничения доступа

ВариантОписаниеПлюсыМинусы
Код на pre_get_posts и template_redirectСамописное решение на PHP для фильтрации товаров и редиректаПолный контроль, нет зависимости от плагиновТребует навыков программирования, возможны ошибки при обновлениях
Плагины контроля доступа (например, Members, User Role Editor)Использование готовых плагинов для управления видимостью товаровПростота настройки, удобный интерфейсДополнительная нагрузка на сайт, возможные конфликты с темой
WooCommerce: как исправить проблему с пустой родительской категорией после импорта товаров
11.05.2026
WooCommerce: как правильно настроить иерархию категорий и проблемы с производительностью
17.04.2026
WooCommerce: устранение проблем с автоматическим установлением родительских категорий при импорте товаров
29.05.2026
Как создать иерархию пользователей по географии в WordPress с примерами
08.04.2026
Как сделать иерархию постов с пользовательской логикой в WordPress
11.01.2026
×
Оптимизируй свой сайт!

Скидка -15% на премиум плагин Clearfy Pro

Купить плагин сейчас ⋙