对wordpress中子类别内的所有帖子使用单页模板

时间:2014-03-23 20:00:24

标签: php wordpress include categories

我有几个子类别(第3级)子类别下的几个帖子,当然还有一个以上类别的parnet类别。

我想为所有帖子制作一个特殊的single.php页面,但是

<?php if(in_category($id)) { include 'special-single-page.php'; }

仅适用于该类别下的帖子,不适用于子类别子类别中的帖子。

是否有办法为父类别的几个子类别下的帖子添加文件?

2 个答案:

答案 0 :(得分:1)

显然,wordpress有一个现成的脚本。它是这样的:

<?php if ( in_category( $id ) || post_is_in_descendant_category( $id ) ) {
    // your code goes here
}
?>

但您需要在主题的function.php文件中添加一个函数。这是要添加的功能:

<?php
if ( ! function_exists( 'post_is_in_descendant_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;
    }
}
?>

source

答案 1 :(得分:0)

查看get_category_parents()

我不知道代码的完整结构,但下面是一些帮助您入门的代码,但您可能需要对其进行调整。我不确定它是否有效。

$parents = explode('/', get_category_parents( $id ));
if(!isset($parents)) {
    if(in_category($id)) { 
        include 'special-single-page.php'; 
    }
} else {
    if(in_category($parents[0])) { 
        include 'special-single-page.php'; 
    }
}

或类似的东西。

有一点阅读,你可能会找到一个更好的方法来做到这一点。 http://codex.wordpress.org/Function_Reference/get_category_parents