我不完全明白你在问什么,但我猜。。。
假设您具有具有以下术语树的层次分类法(例如类别):
新闻(ID:1)世界(ID:2)非洲(ID:5)亚洲(ID:6)欧洲(ID:7)商业(ID:3)科学(ID:4)现在您可以访问/category/news/world/africa/
WordPress将查找以下模板:category-africa.php
或category-5.php
但这两者都不存在,所以WordPress只能回到category.php
或archive.php
.
如果您在问“WordPress可以将树升级到第一个现有模板吗?”那就不行了。但您可以通过以下方式实现此功能。。。
/**
* Recurisively check if a term or term parent has a specific template
*
* @param WP_Term $term
* @return ?string
*/
function parent_term_template( WP_Term $term ) {
/**
* Find template by pattern: taxonomy_name-term_slug.php || taxonomy_name-term_id.php
*
* @link https://developer.wordpress.org/reference/functions/locate_template/
* @var ?string
*/
$template = locate_template( "{$term->taxonomy}-{$term->slug}.php" ) ?: locate_template( "{$term->taxonomy}-{$term->term_id}.php" );
/**
* If template exists, return it
*/
if ( $template ) {
return $template;
}
/**
* Else, check if parent template exists
*/
else if ( !empty( $term->parent ) ) {
return parent_term_template( get_term_by( \'id\', $term->parent, $term->taxonomy ) );
}
/**
* No template
*/
return null;
}
/**
* Filter the path of the current template before including it
*
* @link https://developer.wordpress.org/reference/hooks/template_include/
*/
add_filter( \'template_include\', function( string $template ) {
/**
* Apply to all taxonomies
*/
if ( is_category() || is_tag() || is_tax() ) {
/**
* Get term specific template location
*
* @var string
*/
$found = parent_term_template( get_queried_object() );
/**
* If template exists, return it
*/
if ( $found ) {
return $found;
}
}
return $template;
} );
这将检查当前视图是类别、标记还是自定义分类法存档页。如果是这样,它将接受查询的术语并将其传递给递归函数,该函数在父级树上查找匹配的模板,直到找到一个为止。
例如,如果我们正在查看/category/news/world/africa/
而且没有category-africa.php
模板,此代码将查找直接父模板。在这种情况下:category-world.php
如果不存在,它将移动到category-news.php
最后,如果这不存在,它将回到默认状态。
我仍然不知道这是否回答了你的问题,但它可能会帮助一些人!