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

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

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

Причины могут быть разные, но основные из них:

  • Защита опубликованного контента от изменений без контроля.
  • Разделение ответственности между авторами и редакторами.
  • Соблюдение бизнес-правил или юридических ограничений.

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

Запрет редактирования постов через пользовательские возможности (capabilities)

В WordPress возможность редактировать посты контролируется правами (capabilities), такими как edit_posts и edit_published_posts. Чтобы запретить редактирование, можно удалить эти права у ролей через remove_cap() или не добавлять их при создании кастомной роли.

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

function wordpressa_remove_editor_edit_published_caps() {
    $role = get_role('editor');
    if ($role) {
        $role->remove_cap('edit_published_posts');
    }
}
add_action('init', 'wordpressa_remove_editor_edit_published_caps');

После применения этой функции редактор сможет создавать и редактировать свои неопубликованные записи, но не сможет править уже опубликованные.

Запрет редактирования своих постов после публикации

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

function wordpressa_restrict_author_edit_published($caps, $cap, $user_id, $args) {
    if ($cap === 'edit_post') {
        $post = get_post($args[0]);
        if ($post && $post->post_author == $user_id && $post->post_status == 'publish') {
            // Запрещаем редактирование опубликованных постов Автора
            $caps[] = 'do_not_allow';
        }
    }
    return $caps;
}
add_filter('map_meta_cap', 'wordpressa_restrict_author_edit_published', 10, 4);

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

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

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

  • User Role Editor — мощный инструмент для настройки ролей и прав. Позволяет в интерфейсе убрать возможность редактирования опубликованных постов у выбранных ролей.
  • Advanced Access Manager — более гибкий плагин, который позволяет создавать сложные правила доступа, включая запрет редактирования определённых постов или категорий.
  • WPFront User Role Editor — упрощённый редактор ролей для базовых задач.

Все эти плагины можно найти на официальном репозитории WordPress или установить через админку.

Настройка плагина User Role Editor для запрета редактирования

После установки и активации:

  1. Перейдите в меню Пользователи > User Role Editor.
  2. Выберите роль, например, Редактор.
  3. Снимите галочки с прав edit_published_posts и edit_others_posts.
  4. Нажмите «Обновить» для сохранения.

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

Дополнительный пример: запрет редактирования определённых постов по ID

Иногда нужно запретить редактирование конкретных записей, например, важных страниц или новостей. Для этого можно использовать следующий код:

function wordpressa_block_edit_post_by_id($allcaps, $cap, $args, $user) {
    $blocked_post_ids = array(12, 45, 78); // ID постов, которые нельзя редактировать

    if (isset($args[0]) && in_array($args[0], $blocked_post_ids)) {
        if ($cap === 'edit_post') {
            $allcaps['edit_posts'] = false;
            $allcaps['edit_published_posts'] = false;
        }
    }
    return $allcaps;
}
add_filter('user_has_cap', 'wordpressa_block_edit_post_by_id', 10, 4);

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

Советы по безопасной настройке запретов редактирования

При изменении прав пользователей:

  • Тщательно тестируйте на тестовом сайте, чтобы не заблокировать себя.
  • Делайте резервные копии базы данных перед внесением изменений.
  • Используйте дочерние темы или собственные плагины для кода, чтобы не потерять изменения при обновлении.
  • Комбинируйте права и фильтры для точного контроля доступа.

Важность ведения журнала действий

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

Итог

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

Как удалить старые ревизии записей и оптимизировать базу WordPress
09.02.2026
Как использовать REST API для авторизации пользователей в WordPress
16.02.2026
Как создать автозадачу в WordPress без использования WP-Cron
04.04.2026
Как сделать автоматический откат обновлений в WordPress при ошибках
29.03.2026
Как добавить кастомные области виджетов в тему WordPress
26.01.2026