WordPress имеет встроенную функцию обозначить любую страницу или пост как «личный». По умолчанию эти страницы не отображаются во всех списках постов и меню (включая навигацию) и генерируют 404 ошибку если зайти по прямой ссылке — до тех пор пока пользователь не залогинен. Несмотря на практичность, чаще всего это не идеальный вариант в плане юзабильности.

Часто, сайты информируют посетителей о том, что полное содержимое некоторых страниц или постов доступно только для зарегистрированных пользователей. Дружественное сообщение, указывающее пользователям, что они попали на страницу доступную только зарегистрированным пользователям и формой авторизации, может стать отличным решением. Контент-ориентированные сайты могут дразнить публику, показывая интригующую часть всем посетителям, а давать читать до конца только после авторизации/регистрации.

Этот пример предлагает фреймворк для реализации «гибридного» (авторизован/не авторизован) способа отображения страниц и использует следующий сценарий: содержимое поста над отметкой «Read more» будет отображаться всем пользователям; контент под отметкой — зарегистрированным пользователям. Под тегом more незарегистрированным пользователям будет предложено авторизоваться или зарегистрироваться.
Этот подход будет работать не для всех постов подряд, а идентифицировать посты по custom полю, которое будет определять пост «эксклюзивным для зарегистрированных пользователей».

1. Создайте страницу или запись.
2. Напишите текст, видимый для пользователей.
3. Вставьте тэг «more» в конце.
4. Напишите текст видимый только для зарегистрированных пользователей.
5. Добавьте custom поле с названием «member_content» и значением 1
6. Опубликуйте запись / страницу.

wp-member-content.gif

Следующий шаг включает в себя редактирование файлов шаблона. Это будут файлы «page.php» и «single.php». Для этого примера будем считать, мы создали запись (не страницу) с эксклюзивным контентом. Таким образом, нам нужно редактировать «single.php». Внутри шаблона найдите запрос the_content используемый для вывода содержимого. Вот как он обычно выглядит:

the_content();

Вот новый код с требуемой нам функциональностью:

if(!get_post_meta($post->ID, 'member_content', true) || is_user_logged_in()) {
the_content('<p class="serif">Читать дальше »</p>');
} else {
global $more;
$more = 0;
the_content("");
echo "<p><em>Полный текст статьи доступен только для зарегистрированных пользователей. Пожалуйста авторизуйтесь, чтобы дочитать до конца. </em></p>";
}

Совет: скомбинируйте это с «фишкой» описанной в следущей статье, чтобы получить форму, которая будет возвращать пользователей к текущему посту.

h++p://habrahabr.ru/blogs/wordpress/65452/

Категория: WordPress

Оставьте свой комментарий