この記事は、「カテゴリーアーカイブを使った講師一覧」をサブカテゴリーでさらに絞り込む方法について記したものです。
スクリーンショット
手順
「講師」カテゴリ(スラッグ名:teacher)の下にさらに細分化したサブカテゴリを追加し、各講師の紹介記事を「講師」カテゴリおよびそれらサブカテゴリから選択して投稿します。
「講師」カテゴリーアーカイブテンプレートである「category-teacher.php」を、そのサブカテゴリにも適用するので、下記のコードを「functions.php」に追加します。
なお、「category-teacher.php」のサンプルは、「カテゴリーアーカイブを使った講師一覧」で作成したものを使います。
/**
* 子カテゴリのテンプレートファイルがない場合は親カテゴリのテンプレートファイルを使う
*/
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」に追加します。
/*
* 「講師(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 );
}
}
}
}
}




コメントを残す