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
Використання не знайдено.