Как добавить владельцев страниц в WordPress с разными ролями и ограничениями

Почему важно разграничивать владельцев страниц в WordPress

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

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

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

Как настроить владельцев страниц с разными ролями: обзор решений

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

  • Использование плагинов для управления ролями и доступом;
  • Добавление пользовательских полей и логики в коде темы или плагина;
  • Создание кастомных ролей и capability с помощью кода.

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

Плагины для управления владельцами страниц

1. User Role Editor — мощный плагин для создания и редактирования ролей и прав пользователей. Позволяет гибко настраивать доступ к страницам и типам записей.

2. PublishPress Permissions — позволяет устанавливать права доступа на уровне отдельных страниц, категорий и таксономий, включая назначение владельцев и редакторов.

3. Advanced Access Manager — детальный контроль доступа с возможностью назначать владельцев к контенту и ограничивать редактирование.

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

Пример добавления поля владельца страницы и фильтрации доступа через код

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

Добавим метабокс для выбора владельца:

add_action('add_meta_boxes', 'wpsource_add_owner_metabox');
function wpsource_add_owner_metabox() {
    add_meta_box('wpsource_owner', 'Владелец страницы', 'wpsource_owner_metabox_callback', 'page', 'side');
}

function wpsource_owner_metabox_callback($post) {
    $users = get_users(['role__in' => ['author', 'editor', 'administrator']]);
    $owner = get_post_meta($post->ID, '_wpsource_owner', true);
    echo '<select name="wpsource_owner" style="width:100%">';
    echo '<option value="">Не назначен</option>';
    foreach ($users as $user) {
        $selected = selected($owner, $user->ID, false);
        echo "<option value=\"{$user->ID}\" $selected>{$user->display_name}</option>";
    }
    echo '</select>';
    wp_nonce_field('wpsource_owner_save', 'wpsource_owner_nonce');
}

Сохраним выбранного владельца при сохранении страницы:

add_action('save_post_page', 'wpsource_save_owner_meta');
function wpsource_save_owner_meta($post_id) {
    if (!isset($_POST['wpsource_owner_nonce']) || !wp_verify_nonce($_POST['wpsource_owner_nonce'], 'wpsource_owner_save')) {
        return;
    }
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }
    if (isset($_POST['wpsource_owner'])) {
        update_post_meta($post_id, '_wpsource_owner', intval($_POST['wpsource_owner']));
    }
}

Теперь ограничим редактирование страниц только владельцам или администраторам:

add_filter('map_meta_cap', 'wpsource_restrict_page_edit', 10, 4);
function wpsource_restrict_page_edit($caps, $cap, $user_id, $args) {
    if ($cap === 'edit_page' && !empty($args[0])) {
        $post_id = $args[0];
        $owner_id = get_post_meta($post_id, '_wpsource_owner', true);
        if ($owner_id && $owner_id != $user_id) {
            $user = get_userdata($user_id);
            if (!in_array('administrator', $user->roles)) {
                $caps[] = 'do_not_allow';
            }
        }
    }
    return $caps;
}

Как отображать владельцев страниц в административной таблице

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

add_filter('manage_pages_columns', 'wpsource_add_owner_column');
function wpsource_add_owner_column($columns) {
    $columns['wpsource_owner'] = 'Владелец';
    return $columns;
}

add_action('manage_pages_custom_column', 'wpsource_show_owner_column', 10, 2);
function wpsource_show_owner_column($column, $post_id) {
    if ($column === 'wpsource_owner') {
        $owner_id = get_post_meta($post_id, '_wpsource_owner', true);
        if ($owner_id) {
            $user = get_userdata($owner_id);
            echo esc_html($user ? $user->display_name : 'Не назначен');
        } else {
            echo 'Не назначен';
        }
    }
}

Это позволит сразу видеть ответственных за каждую страницу и быстрее ориентироваться в контенте.

Рекомендации по использованию и расширению

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

Для сложных проектов рекомендую рассмотреть PublishPress Permissions — он позволяет создать детальные правила доступа, включая владельцев страниц, категории и типы записей.

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

WooCommerce: решение проблем с оплатой через разные платёжные системы
21.05.2026
Как удалить метаданные из изображений в WordPress для ускорения сайта
03.02.2026
Отсрочка загрузки картинок (Lazy Load) в WordPress с поддержкой WooCommerce
25.12.2025
Удаление невалидных атрибутов и тегов из WooCommerce HTML для улучшения SEO
21.04.2026
WooCommerce: как изменить атрибуты товара после оформления заказа
05.06.2026