カテゴリーのテンプレートを指定する方法
特定カテゴリーのみレイアウトを変えたい場合、そのカテゴリー用のテンプレートを作成する方法があります。
一般的にカテゴリーアーカイブは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カテゴリーの記事だったら」という意味になります。サンプルなので実際のカテゴリーに合わせて変更してください。