不使用template_redirect
加载备用模板,因为您可以破坏任何使用此挂钩以低于您的优先级运行的功能。右钩子是template_include
. 这是根据WP首席开发人员之一马克·贾奎斯的说法。https://markjaquith.wordpress.com/2014/02/19/template_redirect-is-not-for-loading-templates/
也就是说,使用category_template
在这种情况下过滤。
我是根据我找到的一段代码片段使用此代码的,但没有记录源代码:-(
function wpse_233263_parent_category_hierarchy() {
$templates = array();
$category = get_queried_object();
if ( $category->category_parent != 0 ) {
$parent = get_category( $category->category_parent );
if(!empty($parent)) {
$templates[] = "category-{$parent->slug}-{$category->slug}.php";
$templates[] = "category-{$parent->slug}.php";
$templates[] = "category-{$parent->term_id}.php";
}
} else {
// Otherwise use the usual default category template files
$templates[] = "category-{$category->slug}.php";
$templates[] = "category-{$category->term_id}.php";
}
$templates[] = \'category.php\';
return locate_template( $templates );
}
add_filter( \'category_template\', \'wpse_233263_parent_category_hierarchy\' );
它在调用类别模板时激发,如果您在子类别中,则基本上会设置一个模板列表,如果不在子类别中,则会设置默认列表。
在子类别中,可以有一个模板类别:父级\\u slug-child\\u slug。php,如果不存在,则返回父级。调整列表以满足您的需要。