template_include
Дозволяє змінити шлях до підібраного файлу шаблону відображення поточної сторінки, наприклад: 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 Додаток до включення.
*
* @return string
*/
function wp_kama_template_include_filter( $template ){
// Filter...
return $template;
}- $template
(рядок) - Повний шлях до файлу, який буде підключений як шаблон. Пр:
home/example.com/wp-content/themes/publisher/page.php .
Приклади
#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;
}Такий спосіб може бути корисним при написанні плагінів або додатків шаблону. Коли потрібно просто створити сторінку з певним складом і все.
#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;
}#3 Файл у каталозі теми
Шаблон постійної сторінки можна задати створивши файл у каталозі теми та на початку файлу вказати PHP коментар:
<?php /** * Template Name: Портфоліо */
Потім при створенні сторінки, у випадаючому списку потрібно вибрати створений шаблон
Файл теми з точною назвою
Або в темі створіть файл page-portfolio.php. У цьому випадку ярлик сторінки повинен дорівнювати “portfolio”.
#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;
}#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
Де використовується хук у WordPress
Використання не знайдено.