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