
Для разграничения доступа в Wordpress написано немало плагинов. Но как правило они либо недостаточно функциональны, либо реализуют слишком много ненужных функций, тем самым излишне замедляя работу сайта. Если же вам просто нужно ограничить доступ к странице (или её частям) для определенных групп- можно обойтись парой функций темы. Далее я пошагово распишу как это сделать.
Привожу листинг кода с комментариями.
Он добавляет к форме редактирования поста блок с выбором групп, которым нужно открыть доступ к данному посту (если не выбрана ни одна группа- доступ имеют все).
Выглядит данный блок примерно так:
Данный код следует поместить в конец файла functions.php вашей темы:
Здесь потребуется две функции.
Первая. Проверяет доступ пользователя к текущей странице.
По-умолчанию проверяется текущая страница и текущий пользователь. Однако функции можно указать параметры:
$p - ID или URL проверяемой страницы;
$user_id - ID пользователя.
Вторая. Проверяет наличие роли у пользователя.
Данную функцию можно использовать отдельно для проверки роли пользователя.
Принимает два параметра:
$role - название роли (обязательный);
$user_id - ID пользователя, которого нужно проверить (по-умолчанию- текущий).
Обе функци так же следует поместить в конец файла functions.php вашей темы.
Теперь у нас есть все необходимое для сокрытия страниц. Осталось добавить проверку доступа в шаблон.
Заметьте- wordpress позволяет очень гибко настраивать шаблоны страниц, поэтому вы должны понимать анатомию вашей темы.
Например: по-умолчанию используется index.php, но его может переопределить page.php для отображения статичной страницы, а single.php - когда запрошен конкретный пост. Подробнее можно почитать в документации.
Итак, что бы скрыть содержимое страницы- нужно поместить его в условие как показано на примере:
Также в любом месте темы можно скрыть часть кода, например болк с публикациями только для определенных групп:
Во-вторых плагины реализовывают больше ненужного функционала, следовательно при них тратится больше ресурсов.
Хотя такая реализация привязана к функционалу темы, а значит если вы меняете их как перчатки выбирая из готовых- это решение не для вас)