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

|

В WordPress из коробки есть стандартная система ролей и прав доступа, но она довольно ограничена, если вам нужна более сложная иерархия пользователей с множеством уровней и гибким управлением разрешениями. В этой статье подробно разберём, как можно создать иерархию пользователей в WordPress, расширить стандартные возможности и на практике решить задачу разграничения доступа по уровням.

Почему стандартной системы ролей WordPress недостаточно

Стандартные роли (администратор, редактор, автор, подписчик и т.д.) покрывают базовые задачи, но часто в проектах требуется:

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

Создание иерархии пользователей с помощью плагина WP User Frontend Pro

Один из удобных способов — использовать плагин WP User Frontend Pro, который позволяет создавать кастомные роли и управлять правами доступа на уровне фронтенда. Плагин поддерживает создание форм пользовательского профиля и назначение ролей динамически.

Пример настройки:

  1. Установите и активируйте WP User Frontend Pro.
  2. Создайте новые роли в меню «Пользователи» → «Роли».
  3. Настройте права для каждой роли, включая возможность создавать, редактировать и просматривать записи.
  4. Используйте условия для отображения контента в зависимости от роли.

Так вы получите гибкую систему, где каждый пользователь видит и может редактировать только те данные, которые ему разрешены.

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

Если вы хотите более тонко контролировать иерархию, можно добавить кастомное метаполе для пользователя, которое будет хранить ID родительского пользователя. Таким образом формируется древовидная структура.

Пример добавления поля «Руководитель» в профиль пользователя:

function wphierarchy_add_user_hierarchy_field($user) {
    $parent_id = get_user_meta($user->ID, 'wphierarchy_parent_user', true);
    ?>
    <h3>Иерархия пользователей</h3>
    <table class="form-table">
        <tr>
            <th><label for="wphierarchy_parent_user">Руководитель (ID)</label></th>
            <td>
                <input type="number" name="wphierarchy_parent_user" id="wphierarchy_parent_user" value="<?php echo esc_attr($parent_id); ?>" class="regular-text" />
                <p class="description">Введите ID пользователя, который является руководителем данного пользователя.</p>
            </td>
        </tr>
    </table>
    <?php
}
add_action('show_user_profile', 'wphierarchy_add_user_hierarchy_field');
add_action('edit_user_profile', 'wphierarchy_add_user_hierarchy_field');

function wphierarchy_save_user_hierarchy_field($user_id) {
    if (!current_user_can('edit_user', $user_id)) {
        return false;
    }
    if (isset($_POST['wphierarchy_parent_user'])) {
        update_user_meta($user_id, 'wphierarchy_parent_user', intval($_POST['wphierarchy_parent_user']));
    }
}
add_action('personal_options_update', 'wphierarchy_save_user_hierarchy_field');
add_action('edit_user_profile_update', 'wphierarchy_save_user_hierarchy_field');

Теперь вы можете в профиле пользователя указать ID его руководителя, формируя иерархическую структуру.

Функция получения подчинённых пользователя

Для работы с иерархией полезно уметь получать всех подчинённых пользователя — прямых и косвенных. Ниже пример функции для получения всех подчинённых по рекурсии:

function wphierarchy_get_subordinates($user_id) {
    $subordinates = [];
    $args = [
        'meta_key' => 'wphierarchy_parent_user',
        'meta_value' => $user_id,
        'fields' => 'ID',
        'number' => -1
    ];
    $direct_subs = get_users($args);
    foreach ($direct_subs as $sub_id) {
        $subordinates[] = $sub_id;
        $subordinates = array_merge($subordinates, wphierarchy_get_subordinates($sub_id));
    }
    return $subordinates;
}

Эта функция возвращает массив ID всех пользователей, у которых в поле «Руководитель» указан текущий пользователь, включая всех на нижних уровнях.

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

Допустим, у вас есть каталог с записями, и вы хотите, чтобы пользователь видел только записи, созданные им и его подчинёнными.

Можно использовать следующий код, который фильтрует запросы на фронтенде и в админке:

function wphierarchy_restrict_posts_by_user_hierarchy($query) {
    if (is_admin() && !$query->is_main_query()) {
        return;
    }
    if (!is_user_logged_in()) {
        return;
    }
    $current_user_id = get_current_user_id();
    $allowed_users = wphierarchy_get_subordinates($current_user_id);
    $allowed_users[] = $current_user_id;
    $query->set('author', $allowed_users);
}
add_action('pre_get_posts', 'wphierarchy_restrict_posts_by_user_hierarchy');

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

Интеграция с плагином Clearfy Pro для оптимизации и безопасности

Если вы используете Clearfy Pro, его инструменты помогут оптимизировать работу сайта с кастомными ролями и метаполями, обеспечив безопасность и ускорение загрузки. Например, можно отключить ненужные роли, заблокировать доступ к REST API для определённых пользователей и др.

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

Выводы и рекомендации

Создание иерархии пользователей в WordPress — задача, требующая как понимания внутренней модели ролей WordPress, так и навыков PHP-программирования. Использование кастомных метаполей для хранения родительских связей и рекурсивных функций для получения подчинённых — универсальный и расширяемый метод.

Для проектов, где нужна тонкая настройка ролей и прав, рекомендуем комбинировать программные решения и мощные плагины, такие как WP User Frontend Pro и Clearfy Pro. Это позволит добиться максимальной гибкости и безопасности.

Как отключить виджеты в WordPress по ролям пользователей: практическое руководство
15.02.2026
Создание дерева категорий с подсчетом постов в WordPress
06.03.2026
Как создать иерархию коротких URL в WordPress с поддержкой кастомных типов постов
29.03.2026
Как создать иерархию виджетов с поддержкой AJAX в WordPress
05.04.2026
Как создать и использовать иерархию пользователей в WordPress для управления доступом
15.12.2025
×
День SEO
Время сделать подарок своему WordPress!
-20% на премиум

шаблоны и плагины

Порадуй свой сайт ⋙