(type)_template_hierarchy
Дозволяє змінити список php-файлів ієрархії шаблону для поточної сторінки (поточного запиту).
Це динамічний хук, в якому (type)
може бути одним з:
index
– index_template_hierarchy .404
– 404_template_hierarchy .archive
– archive_template_hierarchy .author
– author_template_hierarchy .category
– category_template_hierarchy .tag
– tag_template_hierarchy .taxonomy
– taxonomy_template_hierarchy .date
– Date_template_hierarchy .embed
– embed_template_hierarchy .home
– Home_template_hierarchy .frontpage
– frontpage_template_hierarchy .privacypolicy
– privacypolicy_template_hierarchy .page
– page_template_hierarchy .paged
– paged_template_hierarchy .search
– search_template_hierarchy .single
– single_template_hierarchy .singular
– Singular_template_hierarchy .attachment
– attachment_template_hierarchy .
Останній елемент у масиві завжди має бути дефолтним файлом шаблону. Наприклад, для типу page
– це page.php
, для типу singular
– це single.php
і т.д.
Ієрархія файлів теми .
Використання
add_filter( '(type)_template_hierarchy', 'wp_kama_type_template_hierarchy_filter' ); /** * Function for `(type)_template_hierarchy` filter-hook. * * @param string[] $templates A список віртуальних літератур, в подальшому ордері priority. * * @return string[] */ function wp_kama_type_template_hierarchy_filter( $templates ){ // Filter... return $templates; }
-
$templates
(масив) Список файлів шаблону як їх використання. Буде використано перший існуючий файл зі списку.
Список є масив у кожному елементі якого шлях до файлу щодо теми. Наприклад, для запиту до запису типу page масив буде такий:
Array( [0] => page-contacts.php [1] => page-25.php [2] => page.php )
Приклади
#1 Додамо свій файл шаблону до ієрархії
Допустимо у нас у темі є папка tpl
, в якій лежать файли шаблону. Нам потрібно для сторінок з ярликами my-page
та your-page
вказати файл шаблону tpl/some-page.php
. Для цього використовуємо такий код:
add_filter( 'page'.'_template_hierarchy', function( $templates ){ $cur_name = str_replace( [ 'page-', '.php' ], '', $templates[0] ); $custom_tpls = [ 'my-page' => 'tpl/some-page.php' 'your-page' => 'tpl/some-page.php' ]; if( in_array( $cur_name, array_keys( $custom_tpls ), 1 ) ){ array_unshift($templates, $custom_tpls[$cur_name]); } return $templates; } );
Тепер на самому початку ієрархії файлів теми для записів типу page буде файл tpl/some-page.php
і якщо він є в темі, він буде використовуватися як файл шаблону для поточної сторінок.
#2 Додамо файл шаблону для кастомного типу записів
Припустимо, ми зареєстрували тип запису book
і хочемо, щоб файл шаблону окремої сторінки цього типу запису лежав у папці теми templates
і називався book.php
. Тобто. нам потрібно щоб за висновок відповідав файл шаблону templates/book.php
, якщо цього файлу немає, то буде працювати стандартна ієрархія файлів теми .
add_filter( 'single'.'_template_hierarchy', function( $templates ){ if( is_singular('book') ){ array_unshift($templates, 'templates/book.php'); } return $templates; } );
#3 Перенаправимо всю ієрархію файлів теми до папки templates
Зробимо так, щоб усі файли шаблону знаходилися в папці теми templates, а не в кореневій папці теми:
$types = [ '404', 'archive', 'author', 'category', 'tag', 'taxonomy', 'date', 'embed', 'home', 'frontpage', 'privacypolicy', 'paged', 'search', 'page', 'Single', 'singular', // include attachments 'attachment', //'index', leave /index.php as is ]; // add a prefix for all template files foreach( $types as $type ){ add_filter( "{$type}_template_hierarchy", 'prefix_template_hierarchy', 20); } function prefix_template_hierarchy( $templates ){ $subfolder = 'templates'; $type = str_replace( '_template_hierarchy', '', current_filter() ); // add `taxonomy.php` file after last `category.php` and `tag.php` element. if( in_array( $type, [ 'category', 'tag' ) ) ){ $templates[] = 'taxonomy.php'; } // add global prefix `self::$basedir/` ex: `tpl/`. foreach( $templates as $index => $relpath ){ if( ! str_starts_with( $relpath, "$subfolder/" ) ){ $templates[ $index ] = "$subfolder/$relpath"; } } return $templates; }
Виняток тут лише файл index.php – він має бути докорінно теми. Також, як приклад, я показав, як визначити поточний тип ієрархії і, наприклад, додати в ієрархію для категорії та тегів файл taxonomy.php
. За замовчуванням його немає в ієрархії файлів теми (хоча логічно, щоб він там був).
Такі стандартні файли, як comments.php, header.php, footer.php, sidebar.php і т.д. не беруть участь в ієрархії файлів теми, тому їх потрібно буде обробити окремо, якщо ви хочете, щоб і всі вони лежали в папці templates, а не в корені теми.
список змін
З версії 4.7.0 | Введено. |
Де викликається хук
$templates = apply_filters( "{$type}_template_hierarchy", $templates );
Де використовується хук у WordPress
Використання не знайдено.