子カテゴリーのアーカイブページで親カテゴリーと共通のテンプレートを適用する方法

子カテゴリーのアーカイブページで親カテゴリーと共通のテンプレートを適用する方法

子カテゴリーのアーカイブページで親カテゴリーと共通のテンプレートを適用する方法

特定のカテゴリーアーカイブ用のテンプレートを作成する場合、category-news.phpのようなテンプレートを追加します。category-news.phpを追加すると、newsというカテゴリーのアーカイブでは、archive.phpやcategory.phpではなく、category-news.phpが適用されるようになります。

先日とある案件で、特定カテゴリーのアーカイブページではテンプレートを分け、さらにその子カテゴリーでも親カテゴリーと同じテンプレートを適用したいというケースがありました。

通常は、親子関係であっても、カテゴリー名やIDが異なるので、親カテゴリー用に追加したテンプレートは適用されず、子カテゴリーではarchive.phpやcategory.phpが適用されてしまいます。

それぞれの子カテゴリー用にテンプレートを追加するのはちょっとなー…と思っていたら、WordPress私的マニュアルさんにドンピシャな記事がありましたので、ご紹介したいと思います。

子カテゴリーのアーカイブページで親カテゴリーと共通のテンプレートを適用する方法

子カテゴリーのアーカイブページでも親カテゴリーと共通のテンプレートを適用するには、functions.phpに以下を追加します。

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;
}
add_filter( 'category_template', 'my_category_template' );

例えば、category-news.phpを追加すると、newsの子カテゴリーでもcategory-news.phpが適用されるようになります。

category-8.phpのようにタームIDで作成したテンプレートにも対応しています。

あとがき

共通のテンプレートを利用することで、子カテゴリーが後から増えても対応できますね。

なかなかニッチな状況かもしれませんが、親子関係にあるカテゴリーで共通のテンプレートを適用したい時は、ぜひお試しください。

この記事が気に入ったら
いいね!してね♪

Twitter で

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です