カテゴリーのテンプレートを指定する方法

WordPress個別サポート

特定カテゴリーのみレイアウトを変えたい場合、そのカテゴリー用のテンプレートを作成する方法があります。

一般的にカテゴリーアーカイブはcategory.php、個別投稿はsingle.phpというテンプレートが有名ですが、特定カテゴリーに適用する場合は注意が必要です。

カテゴリーアーカイブのテンプレートはcategory.php

カテゴリー記事の一覧ページ(カテゴリーアーカイブ)で使われるテンプレートはcategory.phpです。

特定カテゴリーで違うテンプレートを使いたい場合、category-スラッグ.phpというファイル名にします。たとえば、category-event.phpというファイルを作成すればeventカテゴリーのアーカイブで使われます。

具体的な作成方法は説明しませんが、基本的にはテーマのcategory.phpをコピーしてcategory-スラッグ.phpという名前に変更すればよいでしょう。

category.phpが存在しないテーマではarchive.phpやindex.phpが使われます。これらをコピーしてカテゴリーアーカイブを作っても構いませんが、archive-スラッグ.phpはカテゴリーアーカイブではなくカスタム投稿タイプのアーカイブということに注意してください。

つまり、archive-event.phpはeventというカスタム投稿タイプのアーカイブページのテンプレートとして使われます。

どのタイミングでどのようなテンプレートが使われるのか、詳しくは以下のページも参考にしてください。

【参考】テンプレート階層 - WordPress Codex 日本語版

  • category.php --- カテゴリーアーカイブのテンプレート
  • category-スラッグ.php --- 特定カテゴリーのアーカイブ(category.phpから作る)
  • category.phpがない場合 --- archive.phpやindex.phpが使われる
  • archive-スラッグ.php --- 特定カスタム投稿タイプのアーカイブ

個別記事のテンプレートはsingle.php

個々の記事のテンプレートはsingle.phpですが、カテゴリーの個別記事のテンプレートはsingle-スラッグ.phpではないので注意してください。

single-スラッグ.phpは特定のカスタム投稿タイプの個別記事のテンプレートです。たとえば、single-event.phpは「event」というカスタム投稿タイプの個別記事のテンプレートになります。

  • single.php --- 個別投稿のテンプレート
  • single-スラッグ.php --- カスタム投稿のテンプレート(カテゴリー記事ではない)

特定カテゴリーの個別記事にテンプレートを指定する場合

eventカテゴリーの個別投稿でsingle-event.phpというテンプレートを使いたい場合、次のコードを子テーマのfunctions.phpなどに入力します。

/* 特定カテゴリーの個別投稿のテンプレートを指定 */
function my_template_include($template) {
  if (is_single() && in_category('event')) {
    $template = dirname(__FILE__) . '/single-event.php';
  }
  return $template;
}
add_filter('template_include', 'my_template_include', 999);

in_category('event')は「これがeventカテゴリーの記事だったら」という意味になります。サンプルなので実際のカテゴリーに合わせて変更してください。