这是场景 我有2个(或更多)类别,每个类别有5个(或更多)子类别
cat1 - veg(subcat:1)胡萝卜2)番茄等 cat2 - 水果(subcat:1)苹果2)橙等
我为每个类别创建了单个模板: single-veg.php,single-fruit.php ..
那么,有没有人知道在属于子类别的所有帖子上加载single-veg.php的正确函数应该是什么:'veg','carrot'等类别??
这是我采用的,但我认为必须有更好的方法..当然,如果你发现代码有任何问题......我是新手 任何帮助将不胜感激
/** Get Post Category and sub category */
function post_is_in_descendant_category( $cats, $_post = null )
{
foreach ( (array) $cats as $cat ) {
// get_term_children() accepts integer ID only
$descendants = get_term_children( (int) $cat, 'category');
if ( $descendants && in_category( $descendants, $_post ) )
return true;
}
return false;
}
/** Conditional Templates for Single posts */
function template_change( $template ){
if( is_single() && (post_is_in_descendant_category('12')) || in_category('12') ){
$templates = array("single-veg.php");
}
elseif( is_single() && (post_is_in_descendant_category('17')) || in_category('17') ){
$templates = array("single-fruit.php");
} elseif( is_single() && in_category('articles') ){
$templates = array("single-articles.php");
}
$template = locate_template( $templates );
return $template;
}
add_filter( 'single_template', 'template_change' ); //'template_include'/'single_template'
答案 0 :(得分:0)
1)使用帖子格式:
首先,您可以为两个类别创建不同的帖子格式(在functions.php中添加以下内容):
add_theme_support( 'post-formats', array( 'single-veg', 'single-fruit' ) );
现在您可以使用帖子格式了。您可以在每个帖子的管理区域中选择一个后期格式,然后在single.php中调用以下内容为每种格式加载不同的文件。
<?php
if ( has_post_format( 'single-veg' )) {
get_template_part( 'content', 'single-veg' ); // includes content-single-veg.php
} else if ( has_post_format( 'single-fruit' )) {
get_template_part( 'content', 'single-fruit' ); // includes content-single-fruit.php
}
?>
2)使用类别slugs: 如果&#39; single-veg&#39;和单果#39;是类别slugs,根据类别slugs将以下条件加载到single.php中的2个不同文件。
<?php
if(in_category('single-veg')) {
get_template_part( 'content', 'single-veg' ); // includes content-single-veg.php
}
elseif(in_category('single-fruit')) {
get_template_part( 'content', 'single-fruit' ); // includes content-single-fruit.php
}
?>