Перенос иерархии шаблона в подпапку
По умолчанию все файлы шаблона, например page.php лежат корневой папке темы. Иногда удобнее, чтобы все такие файлы лежали в отдельной папке, например templates. Код ниже показывает как расширить иерархию файлов темы.
Код ниже не затрагивает подключаемые файлы (не относящиеся напрямую к шаблону): header.php, footer.php, functions.php и т.д.
Также не затрагивается файл index.php.
// добавляет папку 'templates' для поиска шаблонов в иерархию файлов темы
foreach( [
/*'index',*/'frontpage', 'home', '404', 'archive', 'author',
'category', 'tag', 'taxonomy', 'date', 'page', 'paged', 'search',
'single', 'singular', 'attachment'
] as $type ){
add_filter( $type .'_template_hierarchy', function( $templates ) use ( $type ){
$prefix = 'templates';
// страницы могут находится в папках
if( 'page' === $type ){
global $post;
array_unshift( $templates, "$prefix/page-$post->post_name/main.php" );
}
// добавим всем префикс `templates/`
foreach( $templates as & $relpath ){
if( "$prefix/" !== substr($relpath, 0, 10) )
$relpath = "$prefix/$relpath";
}
return $templates;
}, 20 );
}