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

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

В стандартном WooCommerce все пользователи с ролью «Customer» видят одинаковый список своих заказов. Но в проектах с разными типами клиентов (например, оптовики и розничные покупатели) часто нужно показывать разные наборы заказов или скрывать определённые. Стандарт WooCommerce не предусматривает гибкой фильтрации списка заказов в личном кабинете, поэтому приходится реализовывать кастомные решения.

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

1. Определение роли пользователя

Первым делом нужно получить роль текущего пользователя для дальнейшей логики фильтрации. Обычно это делается через wp_get_current_user():

$user = wp_get_current_user();
$roles = (array) $user->roles;

2. Использование хука для изменения запроса заказов

Для изменения списка заказов в кабинете пользователя используется фильтр woocommerce_my_account_my_orders_query. Он позволяет модифицировать WP_Query, который загружает заказы.

add_filter('woocommerce_my_account_my_orders_query', 'filter_orders_by_user_role');
function filter_orders_by_user_role($args) {
    $user = wp_get_current_user();
    $roles = (array) $user->roles;

    // Пример: если роль 'wholesaler', показываем только заказы со статусом completed
    if (in_array('wholesaler', $roles)) {
        $args['status'] = array('completed');
    }

    // Если роль 'retailer', показываем все статусы, кроме cancelled
    if (in_array('retailer', $roles)) {
        $args['status'] = array('pending', 'processing', 'completed');
    }

    return $args;
}

3. Кастомизация вывода заказов

Если требуется не только фильтровать, но и менять вывод списка (например, добавить дополнительные колонки или изменить стили), то можно использовать хук woocommerce_my_account_my_orders_columns и хуки для контента колонок.

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

Чтобы проверить, что фильтрация работает:

  • Залогиньтесь под пользователем с ролью wholesaler и убедитесь, что в списке заказов отображаются только выполненные (completed) заказы.
  • Залогиньтесь под пользователем с ролью retailer и проверьте, что заказов со статусом cancelled нет.
  • Попробуйте сменить роли и проверить влияние на список заказов.

Также можно временно добавить дебаг-вывод в фильтр для проверки параметров:

error_log(print_r($args, true));

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

  • Неверное определение роли пользователя: Помните, что у пользователя может быть несколько ролей, поэтому проверяйте роль через in_array в массиве ролей.
  • Перезапись статусов заказов: При установке $args['status'] будьте аккуратны, чтобы не удалить нужные статусы. Лучше явно указывать массив нужных статусов.
  • Кэширование WooCommerce: Иногда кэширование может мешать обновлению списка заказов. Очистите кэш сайта и браузера.
  • Конфликты с плагинами: Некоторые плагины, которые модифицируют личный кабинет WooCommerce, могут влиять на запросы. Временно отключите их для диагностики.

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

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

Сравнение способов фильтрации заказов по ролям

МетодПлюсыМинусы
Использование фильтра woocommerce_my_account_my_orders_queryПростой, встроенный способ, легко поддерживаемыйОграничен стандартными параметрами WP_Query
Создание кастомной страницы с WP_QueryМаксимальная гибкость, можно реализовать любые фильтрыТребует больше кода и поддержки, возможно дублирование функционала
Плагины для кастомизации кабинетаБыстрое внедрение без кодаМогут конфликтовать, не всегда подходят под точные требования
Как добавить настройку отключения редактора Gutenberg в WordPress для конкретных постов и ролей
24.03.2026
Как изменить список заказов WooCommerce для разных ролей пользователей
12.06.2026
Как добавить локализацию в плагин WordPress
13.02.2026
Как использовать WPCommunity для создания клубов и сообществ на WordPress
04.03.2026
Как удалить метабоксы в WordPress без плагинов
25.02.2026

Ниже мы подобрали самые актуальные материалы по Вордпресс