wordpress某一分类及子分类使用同一模板
     2016-11-6    +0°    563  

为了让wordpress主题模板更加的炫而与众不同,作为wordpress主题的作者,我们可以让我们的wordpress主题的分类页在不同的分类下,显示不同的前端效果,也就是说,不同的分类采取不同的模板,这是完全可以实现的。在高时银博客里就已经实现了这样的效果,大家可以点击高时银博客导航的几个菜单,就可以看到效果。那么,如何让我们的wordpress主题不同的分类采用不同的分类模板呢?
其实,很简单,我们只需要在wordpress主题的分类文件category.php中添加一个判断语句,就可以实现。代码如下:

<?php
        $post = $wp_query->post;
        if(in_category('833')) {
        include(TEMPLATEPATH.'/category/category-movie.php');
        }
        else if (in_category('834')){
        include(TEMPLATEPATH.'/category/category-tv.php');
        }
        else if (in_category('836')){
        include(TEMPLATEPATH.'/category/category-picture.php');
        }
        else if (in_category('839')){
        include(TEMPLATEPATH.'/category/category-blog.php');
        }
        else if (in_category('831')){
        include(TEMPLATEPATH.'/category/category-novel.php');
        }
        else {
        include(TEMPLATEPATH.'/category/category-default.php');
        }
?>

 
但in_category()有局限性,不能判断子分类和子分类以下的分类,如产品分类,底下可能有数十种分类,而in_category()只能单一写死分类ID。
官方给出了解决方法,让文章自行判断,需用配合post_is_in_descendant_category()函数,我们首先在模板文件functions.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;
}

 
然后,将判断语句替换成:

<?php
        $post = $wp_query->post;
        if(in_category('833')||post_is_in_descendant_category('833')) {
        include(TEMPLATEPATH.'/category/category-movie.php');
        }
        else if (in_category('834')||post_is_in_descendant_category('834')){
        include(TEMPLATEPATH.'/category/category-tv.php');
        }
        else if (in_category('836')||post_is_in_descendant_category('836')){
        include(TEMPLATEPATH.'/category/category-picture.php');
        }
        else if (in_category('839')||post_is_in_descendant_category('839')){
        include(TEMPLATEPATH.'/category/category-blog.php');
        }
        else if (in_category('831')||post_is_in_descendant_category('831')){
        include(TEMPLATEPATH.'/category/category-novel.php');
        }
        else {
        include(TEMPLATEPATH.'/category/category-default.php');
        }
?>

 
现在上述判断语句就能判断子分类和子分类以下的分类和父分类使用同一模板了!!!