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

Недавно я столкнулся с очень интересной задачей и решил поделиться этим с вами. Мне нужно было подключать другой шаблон темы WordPress для пользователей, у которых есть доступ к курсу.

Все мы знакомы с интерфейсом шаблонов страниц и типов записей в WordPress, который в Gutenberg выглядит вот так:

интерфейс выбора шаблонов страниц WordPress
В моём примере у меня есть два шаблона – лендинга для курса. Моя цель, чтобы шаблон продающего лендинга отображался только для неавторизованных пользователей.

Если вам интересно лучше разбираться, как устроены файлы тем в WordPress и как работает их иерархия, то рекомендую посмотреть этот видеоурок.

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

/**
 * @snippet Меняем шаблон WordPress для неавторизованных пользователей
 * @author  Миша Рудрастых
 * @url     https://misha.agency/wordpress/menyaem-podklyuchaemyj-shablon-straniczy-na-letu.html
 */
 
add_filter( 'template_include', 'true_change_template', 25 );
 
function true_change_template( $template ) {
 
	// если это страница определённого типа записи
	// и если пользователь авторизован
	// то лендинг ему вообще ни к чему
	if ( is_singular( 'course' ) && is_user_logged_in() ) {
 
		// $template = __DIR__ . '/single-course.php';
		$template = locate_template( 'single-course.php' );
 
	}
 
	return $template;
 
}
  • Данный код подходит для файла functions.php, обратите внимание, что он лежит в одной директории с файлом single-course.php.
  • Для того, чтобы получить полный путь на сервере к файлу шаблона, мы можем воспользоваться функцией locate_template(), но в то же время, магической константы __DIR__ тоже будет достаточно.

Миша

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

Если вам нужна помощь с сайтом или разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда будем рады вам помочь!

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