wordpress不同分类文章调用不同模板
内容纲要
在一般的cms中都会可以设置不同的分类列表和不同的分类文章采用不同的模板,这样更为灵活自由,也是由于作为CMS需要配合各种需求的界面设计要求,一般的企业站、门户站等不同的分类采用不同的模板较多,或者几个类型的模板,这是非常必要的。
而在WP里,默认是只有一个模板为single.php的,这显然对于cms是不够用的。
那么我们怎么解决这个问题呢?
我们知道,当wordpress读取一篇文章,会调用single.php,那么我们在single.php中加入加入条件判断语句,最常用的是in_category()函数,可以判断文章在哪个分类下,调用哪个single模板,但in_category()有局限性,不能判断子分类和子分类以下的分类,而in_category()只能单一写死分类ID。
解决方法是让文章自行判断,配合post_is_in_descendant_category()函数,首先在模板文件function.php中加入以下代码:
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; }
然后,将single.php内容替换成:
<?php if ( in_category('1') || post_is_in_descendant_category( 1) ){ include(TEMPLATEPATH .'/single-1.php'); } elseif( in_category('2') || post_is_in_descendant_category( 2 ) ){ include(TEMPLATEPATH . '/single-2.php'); }else{ include(TEMPLATEPATH . '/single-3.php'); } ?>
以上代码表示,如果分类ID1和分类ID1以下所有分类中的文章,将使用single-1.php的模板,如果分类2和分类2及其所有子分类文章,使用single-2.php模板,其他分类使用single-3.php模板。
不过还是觉得wordpress的对于CMS的主题有局限性,毕竟是BLOG嘛,需要指定ID,没有DEDECMS这样的方便,不过也是有办法可以扩展解决的。编写主题后台配置ID,变量传值也还不错。(转自:COCSS)