この記事は 2013年10月 の投稿で、現在では状況が異なる可能性があります。
この記事は、「カテゴリーアーカイブを使った講師一覧」をサブカテゴリーでさらに絞り込む方法について記したものです。
スクリーンショット
手順
「講師」カテゴリ(スラッグ名:teacher)の下にさらに細分化したサブカテゴリを追加し、各講師の紹介記事を「講師」カテゴリおよびそれらサブカテゴリから選択して投稿します。
「講師」カテゴリーアーカイブテンプレートである「category-teacher.php」を、そのサブカテゴリにも適用するので、下記のコードを「functions.php」に追加します。
なお、「category-teacher.php」のサンプルは、「カテゴリーアーカイブを使った講師一覧」で作成したものを使います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
/** * 子カテゴリのテンプレートファイルがない場合は親カテゴリのテンプレートファイルを使う */ add_filter( 'category_template', 'my_category_template' ); function my_category_template( $template ) { $category = get_queried_object(); if ( $category->parent != 0 && ( $template == "" || strpos( $template, "category.php" ) !== false ) ) { $templates = array(); while ( $category->parent ) { $category = get_category( $category->parent ); if ( !isset( $category->slug ) ) break; $templates[] = "category-{$category->slug}.php"; $templates[] = "category-{$category->term_id}.php"; } $templates[] = "category.php"; $template = locate_template( $templates ); } return $template; } |
親カテゴリと子カテゴリの間で共通のカテゴリーアーカイブテンプレートを使用するので、体裁上、どちらも1ページ当たりの記事数を同じにする必要があります。そのため、下記のコードを「functions.php」に追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
/* * 「講師(teacher)」とそのサブカテゴリだけ1ページ当たりの記事数を3件にする */ add_action('pre_get_posts', 'category_teacher_per_page'); function category_teacher_per_page($wp_query){ if(!is_admin()) { if($wp_query->is_main_query()){ if($wp_query->is_category()){ $c = get_category($wp_query->query['cat']); while($c->parent){ $c = get_category($c->parent); if($c->slug == 'teacher'){ break; } } if($c->slug == 'teacher'){ $wp_query->set('posts_per_page', 3 ); } } } } } |
コメントを残す