Как скрыть часть контента от незарегистрированных пользователей в WordPress при помощи шорткодов

Очень часто на форумах можно встретить уведомления «Ссылки могут видеть только зарегистрированные пользователи» или «Скачивание файлов доступно только для зарегистрированных».

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

Рассмотренные в этой статье примеры закрывают контент не только от неавторизованных посетителей сайта, но и от поисковиков.

Отображение контента только для зарегистрированных пользователей

Сначала создаем шорткод, вставив этот код в functions.php текущей темы:

function true_logged_in_user_content( $atts, $content = null ) {
	if ( is_user_logged_in() && !is_null( $content ) && !is_feed() ) {
		return $content;
	}
	return ''; // тут в кавычках можете написать сообщение об ошибке, отображающееся для пользователей, у которых нет доступа, можно использовать HTML.
}
 
add_shortcode( 'member', 'true_logged_in_user_content' );

Теперь второй шаг, при написании поста, когда вы захотите скрыть какую-то часть текста, просто поместите его между [member] и [/member], например:

[member]
 
Этот текст увидят только зарегистрированные пользователи.
 
[/member]

Сюда можно засунуть не только текст, но также ссылки (например ограничить доступ к скачиванию файлов), картинки и прочий HTML.

Отображение контента в зависимости от роли пользователя

Тут действует тот же самый принцип, но только с некоторыми усовершенствованиями. Опять начинаем с создания шорткода через functions.php:

function true_content_by_user_cap( $attr, $content = null ) {
	// массив со значениями по умолчанию, которые будут применяться, если в шорткоде не был указан параметр
	$defaults = array(
		'capability' => 'read'
	);
	extract( shortcode_atts( $defaults, $attr ) );
	if ( current_user_can( $capability ) && !is_null( $content ) && !is_feed() ) {
		return $content;
	}
	return ''; // указываем сообщение об ошибке если нужно
}
 
add_shortcode( 'access', 'true_content_by_user_cap' );

Сам шорткод на странице редактирования поста будет выглядеть следующим образом:

[access capability="edit_posts"]
 
Эта часть контента видна пользователям, которые могут редактировать записи.
 
[/access]

А в этом случае будут применяться значения по умолчанию из массива $defaults:

[access]
 
Это сообщение увидят все зарегистрированные пользователи.
 
[/access]

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

Миша

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.

Пишите, если нужна помощь с сайтом или разработка с нуля.

Комментарии — 74

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

Миша Рудрастых и WordPress

Полезности из мира WordPress и жизни студии.

Мой телеграм-канал