Главная Новости

Template_include — Срабатывает перед подключением подобранного файла шаблона темы, например: single.php, page.php, search.php, 404.php и т.д. Этот фильтр используется для изменения пути до такого файла. Хук-фильтр WordPress


Опубликовано: 01.09.2018

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

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

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

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

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

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

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

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

add_filter( 'template_include', 'filter_function_name_11' ); function filter_function_name_11( $template ) { // Фильтр... return $template; } $template(строка) Полный путь до файла, который будет подключен в качестве шаблона. Пр: home/wptest.ru/wp-content/themes/publisher/page.php.

Примеры

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

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

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

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

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

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

#3. Фильтр template_include

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

add_filter( 'template_include', 'portfolio_page_template', 99 ); function portfolio_page_template( $template ) { if( is_page('portfolio') ){ if ( $new_template = locate_template( array( 'portfolio-page-template.php' ) ) ) $template = $new_template ; } return $template; }

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

#4 Подключение 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(); }

Нужно знать!

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

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

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

Для этого посмотрите что передается в фильтр 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; }

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

В файле: /wp-includes/template-loader.php

... elseif ( is_category() && $template = get_category_template() ) : elseif ( is_tag() && $template = get_tag_template() ) : elseif ( is_author() && $template = get_author_template() ) : elseif ( is_date() && $template = get_date_template() ) : elseif ( is_archive() && $template = get_archive_template() ) : else : $template = get_index_template(); endif; /** * Filters the path of the current template before including it. * * @since 3.0.0 * * @param string $template The path of the template to include. */ if ( $template = apply_filters( 'template_include', $template ) ) { include( $template ); } elseif ( current_user_can( 'switch_themes' ) ) { $theme = wp_get_theme(); if ( $theme->errors() ) { wp_die( $theme->errors() ); } } return; endif;
rss