当您查看源代码时,标记模板将按照以下方式加载到模板层次结构中
elseif ( is_tag() && $template = get_tag_template() ) :
在里面wp-includes/template-loader.php
get_tag_template()
使用get_query_template()
其中使用locate_template()
根据主题根文件夹的层次结构加载标记模板
因此,将模板移动到子文件夹将不会立即生效。get_query_template()
但是要有一个过滤器(apply_filters( "{$type}_template", $template )
)可以用来更改此行为并加载tag-{$tag->slug}.php
从子文件夹
因此,我们应该做以下工作
检查我们的tag-{$tag->slug}.php
存在于我们选择的子文件夹中
加载我们的tag-{$tag->slug}.php
来自子文件夹(如果存在)
如果出现以下情况,请从层次结构中加载默认模板tag-{$tag->slug}.php
子文件夹中不存在
以下类似的操作将起作用
add_filter( \'tag_template\', function ( $template )
{
$tag = get_queried_object();
// Alternative path to desired template
$alternative_template = locate_template( "custom-sub-folder/tag-{$tag->slug}.php" ); // Change subfolder name
// If we do have "tag-{$tag->slug}.php" in a subfolder, load "subfolder/tag-{$tag->slug}.php"
if ( $alternative_template )
return $template = $alternative_template;
// If we don\'t have a "tag-{$tag->slug}.php", load templates according to hierarchy
return $template;
});