Ограничение доступа к записям/страницам по ролям пользователей
Я ищу способ защитить контент с помощью ролей пользователей.
Пример:
пользователь должен быть зарегистрирован, чтобы просматривать записи (во фронтенде).
Если пользователь является подписчиком, он может читать записи 1, 2 и 3, но если пользователь является автором, он может просматривать записи 1,2,3 и 4,5,6...
кто-нибудь знает, как я могу это реализовать?

вы можете использовать такие условия, чтобы показывать приватные записи только вошедшим пользователям с ролью contributor
. Теперь вам нужно только сделать запись private
, чтобы она стала доступна для участника.
<?php
if ( have_posts() ) : while ( have_posts() ) : the_post();
$private = get_post_custom_values("private");
if (isset($private[0]) && $private == "true") {
if ( current_user_can( 'contributor' ) ) { //передача роли может иногда не работать
the_title();
the_content();
} else { // текст, который показывается вместо записи
echo 'эта запись приватна, только участник может её просматривать';
}
} else { // это видно всем
the_title();
the_content();
}
endwhile;
endif;
?>

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

Я только что попробовал этот вариант. Он не делает то, что мне нужно, но почти... или... слишком сложный!!

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

да, в админке, но мне нужно определить доступ на фронтенде. Кто может или не может читать записи, определяется по ролям пользователей.

Да, вы можете это сделать с помощью плагина (см. скриншот по ссылке http://s.wordpress.org/extend/plugins/advanced-access-manager/screenshot-4.jpg?r=580686)

Чтобы реализовать подобное, вы можете сделать некоторые записи приватными и показывать их только авторизованным пользователям. Сначала вам нужно добавить произвольное поле, которое можно назвать "private" и установить значение "True". Затем замените стандартный цикл WordPress на этот фрагмент кода:
<?php if (have_posts()) : while (have_posts()) : the_post();
$private = get_post_custom_values("private");
if (isset($private[0]) && $private == "true") {
if (is_user_logged_in()) {
// Отображать приватную запись для авторизованного пользователя
}
} else {
// Отображать публичную запись для всех
}
endwhile; endif; ?>
