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