不同分类文章调用不同模板,解决子分类问题

我们知道,很多企业网站都有新闻和产品,这是时常都需要更新的,所以在wordpress中,这些新闻和产品都必须是文章类型,而不 能是页面。所以,一个single.php是不够用的,往往我们喜欢新建single-news.php和single-pro.php,一个显示新闻, 一个显示产品,各有各的样式。

我们知道,当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( ’3′ ) || post_is_in_descendant_category( 3 ) ) {
include(TEMPLATEPATH . ‘/single-pro.php’);
} elseif( in_category( ’4′ ) || post_is_in_descendant_category( 4 ) ) {
include(TEMPLATEPATH . ‘/single-news.php’);}
else{include(TEMPLATEPATH . ‘/single-other.php’);}
?>

从上面的代码中可以看出,如果在分类ID3和分类ID3以下所有分类中的文章,将使用single-pro.php模板,如果在分类ID4和分类 ID4以下所有分类中的文章,将使用single-news.php,如果是其它一切分类,使用single-other.php。

这样也还是有局域性,就是必须写死一个分类ID号,但总的来说,最高父类是很少变动的,以后要添加的话,也只是加多一条elseif和新建一个single模板罢了。

希望对大家有帮助.

http://www.novow.com/guide/wordpress/1651.html

分享