あるカテゴリのすべてのサブカテゴリの投稿に異なるテンプレートを使用したいです。以下は私が使っているコードです。
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
ファイルを読み込んでいます。
親カテゴリのすべてのサブカテゴリで機能するようにコードを変更する方法を教えてください。
現在のカテゴリがブログカテゴリの子であるかどうかを 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;
}
とにかく、自分で投稿のカテゴリを作成し、そのカテゴリ内で異なる方法で投稿を管理しているのであれば、カスタム投稿の種類を確認することをお勧めします。