Как скрыть часть контента от незарегистрированных пользователей в 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 WooCommerce

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

Впервые познакомился с WordPress в 2009 году, и после двух лет мучений с Joomla и самописными движками это был просто бальзам на душу. С 2014 года меня можно встретить на WordCamp — официальной конфе по WP в Москве, иногда там выступаю. Также в настоящее время веду курсы по WordPress в Epic Skills в Питере.

Смотрите также