Перенос иерархии шаблона в подпапку

По умолчанию все файлы шаблона, например 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 );
}