WordPress как на ладони
rgbcode is looking for WordPress developers.

template_includeхук-фильтрWP 3.0.0

Позволяет изменить путь до подобранного файла шаблона отображения текущей страницы, например: single.php, page.php.

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

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

Во время этого фильтра уже можно использовать условные теги и переменная $post уже определена.

Для каждого типа страницы, файл шаблона разный: см. Иерархию файлов темы. Например, мы зашли на постоянную страницу, WordPress подбирает какой файл шаблона должен быть показан - это файл page.php: home/example.com/wp-content/themes/mytheme/page.php. С помощью этого фильтра можно изменить путь такого файла.

Подобные хуки для работы с файлом шаблона:

  • (type)_template_hierarchy - фильтрует массив названий файлов иерархии, по которому будет идти поиск нужного файла. С WP 4.7.

  • (type)_template - фильтрует путь до уже определившегося файла шаблона. Аналог template_include, только срабатывает чуть раньше.

Все варианты параметра type смотрите в одноименном параметр $type функции get_query_template().

Использование

add_filter( 'template_include', 'wp_kama_template_include_filter' );

/**
 * Function for `template_include` filter-hook.
 * 
 * @param string $template The path of the template to include.
 *
 * @return string
 */
function wp_kama_template_include_filter( $template ){

	// filter...
	return $template;
}
$template(строка)
Полный путь до файла, который будет подключен в качестве шаблона. Пр: home/example.com/wp-content/themes/publisher/page.php.

Примеры

3

#1 Фильтр template_include

И третий способ создать отдельный файл шаблона для страницы с ярлыком portfolio - это использовать фильтр template_include:

add_filter( 'template_include', 'portfolio_page_template', 99 );
function portfolio_page_template( $template ) {

	if( is_page('portfolio') ){

		$new_template = locate_template( array( 'portfolio-page-template.php' ) );

		if ( $new_template ){
			$template = $new_template ;
		}
	}

	return $template;
}

Такой способ может быть полезен при написании плагинов или дополнений к шаблону. Когда нужно просто создать страницу с определенным слагом и все.

1

#2 Шаблон для всех дочерних страниц

Допустим у нас есть шаблон страница и у этой страницы есть дочерние страницы (под страницы). Давайте установим свой шаблон страницы для этой родительской и всех её дочерних страниц.

add_filter( 'template_include', 'wp_kama_template_include_filter' );

function wp_kama_template_include_filter( $template ) {

	$parent_page_id = 25;
	$post = get_queried_object();

	if( is_page( $parent_page_id ) || $parent_page_id === $post->post_parent ){
		return get_theme_file_path( 'templates/page-myname.php' );
	}

	return $template;
}
0

#3 Файл в каталоге темы

Шаблон постоянной странице можно задать создав файл в каталоге темы и в начале файла указать PHP комментарий:

<?php
/**
 * Template Name: Портфолио
 */

Затем при создании страницы, в выпадающем списке нужно выбрать созданный шаблон

Файл темы с точным названием

Или в теме создайте файл page-portfolio.php. В этом случае ярлык страницы должен быть равен "portfolio".

0

#4 Как узнать какой файл шаблона используется в текущий момент

Для этого посмотрите что передается в фильтр template_include:

## Какой шаблон используется в текущий момент
add_filter( 'template_include', 'echo_cur_tplfile', 99 );
function echo_cur_tplfile( $template ){

	echo '<span style="color:red">'. wp_basename( $template ) .'</span>';

	return $template; 
} 

-1

#5 Подключение PHP функции как файл шаблона

Иногда удобно не создавать файл с кодом шаблона, а создать PHP функцию с кодом этого файла. И чтобы такая функцию отработала как файл, её можно вызывать в хуке template_include:

<?php
// подключаем шаблон страницы
add_filter('template_include', 'book_archive_tpl_include');
function book_archive_tpl_include( $template ){
	if( ! is_post_type_archive('book') )
		return $template;

	book_archive_tpl();
}

// шаблон страницы
function book_archive_tpl(){
	get_header();
	get_sidebar();
	?>

	<div>
		<h1>Заголовок</h1>
		<p>Какой-то текст</p>
	</div>

	<?php
	get_footer();
}

Нужно знать!

Технически это неправильное решение, но оно работает! В этом случае фильтр используется как событие. А так как этот фильтр вызываться последним среди фильтров не относящихся к шаблону, то в момент его вызова можно вывести на экран нужный нам код шаблона...

Вообще, не рекомендую использовать этот способ. Но если нельзя, но очень хочется, то можно...

Список изменений

С версии 3.0.0 Введена.

Где вызывается хук

В файле: /wp-includes/template-loader.php
template_include
wp-includes/template-loader.php 104
$template = apply_filters( 'template_include', $template );

Где используется хук в WordPress

Использование не найдено.
6 комментариев
    Войти