web-dev-qa-db-ja.com

カテゴリのすべてのサブカテゴリの投稿用の異なるテンプレート

あるカテゴリのすべてのサブカテゴリの投稿に異なるテンプレートを使用したいです。以下は私が使っているコードです。

add_filter( 'single_template', 'get_custom_cat_template' ) ;
function get_custom_cat_template( $single_template ) {
    global $post;
    if ( is_category( 'blog' ) || in_category( 'blog' ) ) {
        $single_template = dirname( __FILE__ ) . '/single-blog.php';
    }

    return $single_template;
}

ここで「ブログ」はカテゴリです。このコードは、親カテゴリ(ブログ)に対してのみ機能します。サブカテゴリの投稿については、デフォルトのsingle.phpファイルを読み込んでいます。

親カテゴリのすべてのサブカテゴリで機能するようにコードを変更する方法を教えてください。

1
Rajpreet

現在のカテゴリがブログカテゴリの子であるかどうかを cat_is_ancestor_of() functionまたは term_is_ancestor_of() で確認できます。現在は、in_category()を使用することをお勧めしますが、子カテゴリも確認します。

add_filter( 'single_template', 'get_custom_cat_template' ) ;
function get_custom_cat_template( $single_template ) {


    // You want to filter only template for single posts of default post type    
    if( is_singular( 'post' ) ) {

        $post = get_queried_object();
        // Replace '3' with the ID of the 'blog' category
        $child_blog_categories = get_term_children( '3', 'category' );

        if ( in_category( 'blog', $post ) || in_category( $child_blog_categories, $post ) ) {

            $single_template = locate_template( 'single-blog.php' );

        }

    }

    return $single_template;
}

とにかく、自分で投稿のカテゴリを作成し、そのカテゴリ内で異なる方法で投稿を管理しているのであれば、カスタム投稿の種類を確認することをお勧めします。

3
cybmeta