WordPressでサイトを運用していると、特定のカテゴリーだけデザインやレイアウトを変更したい場面が多くあります。
例えば、ニュースカテゴリーではシンプルなリスト形式を採用し、制作実績カテゴリーではグリッドレイアウトで画像を中心に魅せるといった使い分けです。
WordPressには、こうした要望を実現するための仕組みが標準で備わっており、開発の要件に応じて最適な方法を選択できます。
本記事では、2026年現在のWeb開発シーンでも広く活用されている、PHPベースのテーマでカテゴリーテンプレートを切り替える3つの主要な手法を紹介します。
各手法のメリット・デメリットを理解し、プロジェクトに最適な実装コードを確認していきましょう。
1. テンプレート階層を利用した自動切り替え
WordPressには、ファイル名に基づいて自動的に適用されるテンプレートを決定する「テンプレート階層」という仕組みがあります。
この仕組みを利用するのが、最もシンプルで管理がしやすい方法です。
特定のカテゴリーに対して個別のテンプレートを用意する場合、以下のルールに従ってPHPファイルを作成します。
- category-{slug}.php:カテゴリーのスラッグ(例:news)を指定します。
- category-{id}.php:カテゴリーのID(例:5)を指定します。
例えば、スラッグが「service」というカテゴリーに専用のデザインを適用したい場合は、category-service.phpというファイルを作成します。
WordPressは、このファイルが存在すれば、汎用的なcategory.phpやarchive.phpよりも優先して読み込みます。
実装例:ファイル構成のイメージ
テーマディレクトリ内でのファイル構成は以下のようになります。
wp-content/themes/your-theme/
├── category-service.php (スラッグ「service」専用)
├── category-news.php (スラッグ「news」専用)
├── category.php (その他のカテゴリー用)
└── index.php (最終的なフォールバック)
この手法の最大の利点は、条件分岐のコードを記述する必要がなく、ファイルが存在するだけで動作する点にあります。
一方で、カテゴリーが増えるたびにファイルを作成する必要があるため、デザインのバリエーションが膨大な場合には管理が煩雑になる可能性があります。
2. 条件分岐タグ「is_category」による切り替え
一つのテンプレートファイル(category.phpなど)の中で、特定の条件に応じて表示内容を切り替える方法です。
この手法では、WordPressの組み込み関数であるis_category()を使用します。
ファイル数を増やしたくない場合や、一部のパーツ(サイドバーやバナー)だけを差し替えたい場合に非常に有効です。
実装コード:is_categoryの使用例
以下のコードは、category.php内でカテゴリーごとに読み込むテンプレートパーツを切り替える例です。
<?php get_header(); ?>
<main>
<?php
if ( is_category( 'news' ) ) :
// ニュースカテゴリーの場合
get_template_part( 'template-parts/content', 'news' );
elseif ( is_category( array( 'blog', 'column' ) ) ) :
// ブログまたはコラムカテゴリーの場合(配列で複数指定可能)
get_template_part( 'template-parts/content', 'blog' );
else :
// それ以外のカテゴリーの場合
get_template_part( 'template-parts/content', 'default' );
endif;
?>
</main>
<?php get_footer(); ?>
is_category()関数には、スラッグだけでなく、IDやカテゴリー名を指定することも可能です。
また、上記のように配列を使うことで、複数のカテゴリーに対して同一のテンプレートを適用することも簡単にできます。
この方法は、ロジックが一箇所に集約されるため、全体の見通しが良くなるというメリットがあります。
3. template_includeフィルターフックによる柔軟な切り替え
より高度な制御を行いたい場合は、functions.phpでtemplate_includeフィルターフックを利用します。
この手法は、WordPressがテンプレートを決定するプロセスに割り込み、強制的に特定のファイルを指定するものです。
特定の親カテゴリーを持つ子カテゴリーすべてに共通のテンプレートを適用したい場合など、複雑な動的条件が必要なシーンで威力を発揮します。
実装コード:functions.phpへの記述
テーマのfunctions.phpに以下の関数を追加します。
/**
* カテゴリーに応じてテンプレートファイルを強制的に変更する
*/
function custom_category_template( $template ) {
// カテゴリーアーカイブページであるかを確認
if ( is_category() ) {
// 現在表示しているカテゴリーの情報を取得
$cat = get_queried_object();
// 親カテゴリーのIDが「10」の場合、特定のテンプレートを適用
if ( $cat->category_parent === 10 ) {
$new_template = locate_template( array( 'category-child-design.php' ) );
if ( '' !== $new_template ) {
return $new_template;
}
}
}
return $template;
}
add_filter( 'template_include', 'custom_category_template' );
このコードでは、表示中のカテゴリーが特定の親(ID:10)を持っているかどうかを判定しています。
条件に合致した場合、locate_template関数を使用して独自のテンプレートファイルを検索し、存在すればそれを返します。
テンプレートファイルの名前は自由に決められるため、「category-」から始まらない独自のディレクトリ構造での管理も可能になります。
各手法の比較と使い分けのポイント
紹介した3つの手法について、それぞれの特徴を以下の表にまとめました。
| 手法 | 難易度 | 柔軟性 | 主な用途 |
|---|---|---|---|
| テンプレート階層 | 初級 | 低 | 特定の数カテゴリーを完全に別デザインにしたい時 |
| 条件分岐タグ | 中級 | 中 | パーツ単位での変更や、共通ファイルで管理したい時 |
| フィルターフック | 上級 | 高 | 親子関係や複雑な条件で自動的に切り替えたい時 |
小規模なサイトや、特定のカテゴリーだけを変更したい場合は「テンプレート階層」が最適です。
多くのカテゴリーで共通のレイアウトを使いつつ、部分的に要素を変えたい場合は「条件分岐タグ」を選びましょう。
大規模なポータルサイトなどで、階層構造に基づいた自動的なテンプレート割り当てが必要な場合は「フィルターフック」を検討してください。
まとめ
WordPressでカテゴリーごとにテンプレートを切り替える方法は、サイトの規模や運用ルールによって最適な選択肢が異なります。
まず検討すべきは、WordPress標準の機能であるテンプレート階層を活用したファイル作成です。
もし、より細かいパーツの制御が必要であれば、is_category()による条件分岐を取り入れてみてください。
そして、階層構造や特定のカスタムフィールド値など、複雑な条件を伴う場合はフィルターフックを活用することで、メンテナンス性の高いコードを実現できます。
2026年のWeb制作においても、これらの基礎的なPHPの実装スキルは、高品質なWordPressサイトを構築する上で欠かせない要素です。
プロジェクトの要件に合わせて、これらの手法を適切に使い分けていきましょう。
