WordPressのテンプレートファイルの種類とテンプレート階層

WordPressのテンプレートファイルの種類とテンプレート階層

WordPressを使い始めたばかりのとき、よくわからなくて困ったのがWordPressで使用するテンプレートファイル。

こっちの本では○○.phpを使ってるけど、あっちの本では××.phpを使ってる!
かと思ったらindex.phpにif文で分岐させて表示してるのもある!!

本のとおりに作るだけなら問題ないけど、オリジナルのテーマを作るときに、どのテンプレートファイルを使えばいいのか自分なりにまとめてみました。

テンプレートファイルとは

WordPressのテーマを構成しているindex.phpやsingle.php、page.phpなどのファイルのことをテンプレートファイルと言います。

テンプレートファイルにはheader.phpやfooter.phpのように、すべてのページ内で使用できるファイル(パーツテンプレート)と、single.phpやarchive.phpのように、ある条件の下でのみ使用されるファイルがあります。

テンプレートファイルの種類

基本のテンプレートファイル

index.php
テーマに必要なメインテンプレート。
該当するテンプレートファイルがないときはすべてindex.phpが表示される。

おもなパーツテンプレート

header.php
ヘッダ出力用のテンプレート。
<?php get_header(); ?>でheader.phpを読み込む。
footer.php
フッター出力用のテンプレート。
<?php get_footer(); ?>でfooter.phpを読み込む。
sidebar.php
サイドバー出力用のテンプレート。
<?php get_sidebar(); ?>でsidebar.phpを読み込む。
searchform.php
検索フォーム出力用のテンプレート。
<?php get_search_form(); ?>でsearchform.phpを読み込む。
comments.php
コメント出力用のテンプレート。
<?php comments_template(); ?>でcomments.phpを読み込む。

その他のおもなテンプレートファイル

front-page.php
サイトのホーム(トップ)ページのテンプレート。
管理画面の表示設定の「フロントページの表示」が設定してあるときに表示される。
home.php
サイトのホーム(トップ)ページのテンプレート。
管理画面の表示設定の「フロントページの表示」が設定してあるときはその設定が優先される。
single.php
個別投稿ページのテンプレート。
page.php
固定ページのテンプレート。
category.php
カテゴリーページのテンプレート。
search.php
検索結果ページのテンプレート。
archive.php
記事一覧のテンプレート。
404.php
404エラーページのテンプレート。

テンプレート階層とは

テンプレート階層とは、WordPressでページを表示するときに「○○ページの出力には○○.phpを読み込む」といった、読み込むテンプレートファイルの優先順位の事です。

WordPressはテンプレート階層の優先順位の高い順番にファイルを探して、最初に見つかったテンプレートファイルを使ってページを表示します。

テンプレート階層 | WordPress Codex 日本語版

テンプレート階層によるテンプレートの優先度

ページの種類 高←テンプレート階層優先度→低
404エラーページ 404.php index.php
検索結果ページ search.php index.php
カスタム分類アーカイブ taxonomy-{taxonomy}-{term}.php taxonomy-{taxonomy}.php taxonomy.php archive.php index.php
カテゴリーアーカイブ category-{slug}.php category-{id}.php category.php archive.php index.php
タグアーカイブ tag-{slug}.php tag-{id}.php tag.php archive.php index.php
作成者アーカイブ author-{nicename}.php author-{id}.php author.php archive.php index.php
日付別アーカイブ date.php archive.php index.php
カスタム投稿タイプアーカイブ archive-{post_type}.php archive.php index.php
カスタム投稿ページ single-{post_type}.php single.php index.php
個別投稿ページ single-post.php single.php index.php
固定ページ ページテンプレート page-{slug}.php page-{id}.php page.php index.php
フロントページ front-page.php index.php
ホーム(トップ)ページ home.php index.php

{ } には使用するテンプレートのスラッグやIDが入ります。

例えばカテゴリーのスラッグが"news"の場合はcategory-news.php、カテゴリーのIDが6の場合はcategory-6.phpになります。

カスタムテンプレートとは

WordPressで決められたテンプレートファイルとは別に、自分で自由にファイル名を付けて作ったテンプレートを「カスタムテンプレート」といいます。
固定ページでページによってテンプレートを変えたいときに、カスタムテンプレートを作成すれば、固定ページの編集画面で使用するテンプレートでカスタムテンプレートを選択できるようになります。

カスタムテンプレートの作り方

① ファイルの先頭に以下のように記述して、mypage.php(任意のファイル名)という名前で保存して、テーマのディレクトリ内に置きます。

<?php
/*
Template Name: マイページ(管理画面で表示されるテンプレート名)
*/
?>

② ページの編集画面で、適用するテンプレートを選択します。
通常は「デフォルトテンプレート」が選択されているので、選択リストから使用したいカスタムテンプレートを選んでページを保存します。

使用したいカスタムテンプレートを選ぶ

条件分岐で表示を変える方法

特定のカテゴリーだけ表示を変えたいとか、他は同じだけど一部分だけ表示を変えたい、というときはPHPの条件分岐を使って表示を変えることができます。

個別投稿ページでカテゴリーがwordpressの時とcolumnの時とその他の時で表示内容を変える場合

表示内容を変える

single.php

<?php
if ( in_category( 'wordpress' ) ) {
	echo 'wordpressカテゴリーで表示させたい内容を記述';
} elseif ( in_category( 'column' ) ) {
	echo 'columnカテゴリーで表示させたい内容を記述';
} else {
	echo 'その他のカテゴリーで表示させたい内容を記述';
}
?>
他のテンプレートファイルを読み込む

single-post.php

<?php
if ( in_category( 'wordpress' ) ) {
	//wordpressカテゴリーはsingle-wordpress.phpを読み込む
	get_template_part( 'single-wordpress' );
} elseif ( in_category( 'column' ) ) {
	//columnカテゴリーはsingle-column.phpを読み込む
	get_template_part( 'single-column' );
} else {
	//その他のカテゴリーはsingle.phpを読み込む
	get_template_part( 'single' );
}
?>

個別投稿ページに複数のカテゴリーが設定してあるときは、条件分岐の上から条件に当てはまったカテゴリーの内容が表示されます。

テーマの作成 クエリベースのテンプレート | WordPress Codex 日本語版

最後に

WordPressで使うテンプレートファイルはちょっとややこしいけど、ルールがわかるとテーマをカスタマイズするときも「どれを使うんだっけ?」と迷う事がなくなるし、デザインの自由度もあがるのですごく便利だなーと思います。

テンプレート階層の詳細図はWordPress テンプレート階層 概観図でご覧頂けます。

Top