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

Зачем ограничивать доступ к заказам в WooCommerce

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

Диагностика текущих прав доступа к заказам

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

  • Перейдите в админку WordPress → Пользователи → Все пользователи и проверьте роли пользователей.
  • С помощью плагина User Role Editor можно посмотреть, какие возможности (capabilities) привязаны к ролям.
  • По умолчанию заказ — это тип записи shop_order. Возможность читать заказы — read_shop_order или edit_shop_order у менеджера и администратора.

Пошаговое решение: ограничение доступа к заказам по авторству

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

Пример кода, который добавьте в файл functions.php вашей дочерней темы или в кастомный плагин:

add_action('pre_get_posts', function($query) {
    if (is_admin() 
        && $query->is_main_query() 
        && $query->get('post_type') === 'shop_order') {
        $user = wp_get_current_user();
        // Разрешаем администраторам и менеджерам видеть все заказы
        if (in_array('administrator', $user->roles) || in_array('shop_manager', $user->roles)) {
            return;
        }
        // Остальные пользователи видят только свои заказы
        $query->set('author', $user->ID);
    }
});

Объяснение:

  • Проверяем, что мы в админке и основной запрос для заказов.
  • Если пользователь — админ или менеджер, ограничений нет.
  • Если любая другая роль, фильтруем заказы по автору.

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

Обратите внимание, что для корректной работы нужно, чтобы пользователь был автором заказа. По умолчанию заказы создаются системой, и автор может быть администратор. Для этого при создании заказа вручную или программно указывайте автора:

$order = wc_create_order();
$order->set_customer_id(get_current_user_id());
wp_update_post(['ID' => $order->get_id(), 'post_author' => get_current_user_id()]);

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

Для проверки результата:

  • Залогиньтесь под пользователем с ролью, отличной от администратора или менеджера.
  • Перейдите в раздел WooCommerce → Заказы. Вы должны увидеть только те заказы, которые вы создали.
  • Под администратором или менеджером доступ к полному списку заказов сохраняется.
  • Для дополнительной проверки можно создать заказ от имени другого пользователя и убедиться, что он не отображается.

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

  • Заказы не отображаются у пользователя
    Причина: пользователь не является автором заказа. Решение: при создании заказа обязательно указывайте автора (как показано в примере кода).
  • Все заказы скрыты, даже для администратора
    Причина: условие в фильтре pre_get_posts неверно прописано или роли проверяются неправильно.
    Решение: проверьте, что условие in_array('administrator', $user->roles) корректно и что фильтр применяется только в админке.
  • Пользователь видит чужие заказы
    Причина: фильтр не применился, возможно, из-за плагина кэширования или других хуков.
    Решение: временно отключите кэш и плагины, проверяйте конфликт.

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

  • Не используйте этот код для ролей с административными привилегиями — они должны видеть все заказы.
  • Если у вас много заказов, фильтрация по автору может влиять на производительность. Рассмотрите индексацию поля post_author в базе данных.
  • При интеграции с внешними сервисами следите, чтобы авторство заказа сохранялось корректно.
  • Для расширения функционала используйте плагины с осторожностью — некоторые могут конфликтовать с кастомными ограничениями доступа.

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

МетодПлюсыМинусы
Фильтр pre_get_posts для ограничения списка заказовПростота реализации, гибкость настройкиТребуется корректное управление авторством, может влиять на производительность при большом объеме
Плагины для многосайтовости или мультивендорности (например, Dokan)Расширенный функционал, готовые решения для разделения доступаСложнее настраивать, могут быть избыточны для простых задач
Изменение прав ролей через User Role EditorКонтроль прав на уровне ролейНе обеспечивает фильтрацию по авторству, требует дополнительной доработки
Как создать автоматический отчет по заказам в WordPress без WooCommerce
10.04.2026
Как создать автоматический скрипт для резервирования товаров в WooCommerce
16.02.2026
Как добавить автоматическое возврашение денег в WooCommerce
27.01.2026
Добавление пользовательских статусов заказов в WooCommerce: подробное руководство с примерами кода
03.04.2026
Как сделать автоматическое создание отчета по заказам в WordPress без WooCommerce
24.02.2026