有两种方法可以做到这一点。
通过检查类别/子类别的深度。如果我们正在浏览主/父类别,则显示自定义模板;如果我们在子类别上,则显示另一个模板,然后继续我们可以检查一个类别是否结束了not类别。结束类别意味着如果类别没有任何子类别,则应显示默认值category.php
模板您应该使用哪种方法取决于您的项目要求。在这里,我将解释第一个,因为它非常灵活,我认为会适合您的目的。
WordPress拥有template_include
在WordPress之前立即执行的函数包括预定的模板文件。这可以用来覆盖WordPress的默认模板行为。
function wpse_template_check( $template ) {
if ( is_category() ) {
// Get category information
$cat = get_query_var( \'cat\' );
$cats_str = get_category_parents( $cat, false, \'%#%\' );
$cats_array = explode(\'%#%\', $cats_str);
$cat_depth = sizeof( $cats_array )-2;
// Check category depth
$new_template = locate_template( array( \'category-custom-template.php\' ) );
if ( $cat_depth == 0 && \'\' != $new_template ) {
return $new_template;
}
}
return $template;
}
add_filter( \'template_include\', \'wpse_template_check\' );
此函数计算类别深度并检查当前类别是否为主/父类别。如果为true且类别模板存在,则将类别模板替换为
category-custom-template.php
.
我已经测试了它,它正在工作,但您应该注意,它是基于类别深度的,所以所有父类别都将具有相同的自定义模板。
尽管您可以自定义此功能以执行更多操作并满足您的需求。