- 赤色のリンクは、まだ日本語Codexに存在しないページ・画像です。英語版と併せてご覧ください。(詳細)
テンプレート階層
目次
はじめに
WordPress テンプレートはパズルのピースのように組み合わせられ、サイト上で Web ページを表示します。一部のテンプレート(例: ヘッダー・フッターテンプレート)はすべての Web ページ内で使用される一方、他のテンプレートはある条件の下でのみ使用されます。
このドキュメンテーションの目的
このドキュメンテーションは、次の疑問に答えてくれるでしょう。
ある種類のページを表示するとき、どのテンプレートファイルが使われるのか?
このドキュメンテーションの使い方
WordPress 1.5 で「テーマ」機能が導入されて以来、テンプレートはますますカスタマイズしやすくなりました。WordPress テーマを作成するには、WordPress がブログ上の各種ページを表示するためにどのようにテンプレートファイルを選択するのかを正しく理解する必要があります。すでにあるテーマをカスタマイズしたい場合にもどのテンプレートファイルを編集すればいいのかを知る手がかりになるでしょう。
条件分岐タグの利用
WordPress がページの種類(クエリタイプ)に合うテンプレートファイルを特定する方法は一つではありません。WordPress テーマ開発者は条件分岐タグを使用して、あるページの生成にどのテンプレートを使うかを制御できます。テーマの中にはここで紹介するすべてのテンプレートファイルを実装しないテーマもありますし、条件分岐タグを使って他のテンプレートファイルを読み込むテーマもあります。より詳細な情報については条件分岐タグおよびテーマの作成ページの「クエリベースのテンプレート」セクションを参照してください。
テンプレートファイルの階層
概念
WordPress はクエリ文字列 — Web サイトの各リンク内に含まれる情報 — を使用して、ページの表示にどのテンプレートあるいはテンプレートの集合を使用すべきかを決定します。
まず WordPress はすべてのクエリ文字列とクエリタイプを照合し、どの種類のページ(検索ページ、カテゴリーページ、ホームページ等) が要求されているかを決定します。
次にテンプレートが選択され — そして、Web ページが生成されます。テンプレートは、WordPress テンプレート階層で規定された順番に、WordPress テーマ内で該当のテンプレートが利用かどうかにより決まります。
WordPress は現在のテーマディレクトリ内から特定のファイル名でテンプレートを探し、以下の該当の節で挙げたリストから最初に見つけたテンプレートファイルを使用します。
基本の index.php テンプレートファイルはテーマに必須ですが、テーマ開発者は他のテンプレートファイルを含めるかどうかを選択できます。 WordPress は 一致する名前のテンプレートファイルが見つからなければそれをスキップして次の候補のファイル名を探します。最後まで一致するテンプレートファイルが見つからなければ index.php (テーマのホームページテンプレートファイル) が使用されます。
例
例えば、ブログが http://example.com/blog/ にあり、ユーザーがカテゴリーページへのリンク http://example.com/blog/category/your-cat/ をクリックしたとします。WordPress はテンプレート階層を使用して、以下の順番で正しいファイルを探し、生成します。
WordPress は現在のテーマディレクトリ内で、カテゴリーID に合致するテンプレートファイルを探します。
- カテゴリーID が 4 なら、WordPress はテンプレートファイル category-4.php を探します。
- 見つからなければ、次に WordPress は一般的なカテゴリーテンプレートファイル category.php を探します。
- このファイルもなければ、WordPress は一般的なアーカイブテンプレートファイル archive.php を探します。
- これもなければ、WordPress はメインテーマテンプレートファイル index.php を使用します。
ユーザーがホームページ http://example.com/blog/ にアクセスすると、以下の順番でテンプレートファイルが決定されます。
- WordPress は、まず、静的フロントページがあるかどうかを判断します。静的フロントページが設定されている場合、WordPress は固定ページのテンプレート階層に従ってテンプレートを読み込みます。
- 静的フロントページが設定されていない場合、WordPress はテンプレートファイル home.php を探し、これを使用して要求されたページを生成します。
- home.php が見つからない場合、WordPress は現在のテーマディレクトリ内でファイル index.php を探し、このテンプレートを使用してページを生成します。
概観図
次の図は WordPress テンプレート階層に基づいて WordPress ページを生成する際、どのテンプレートが呼ばれるかを示します。
Full-Size Image (jpg) - Image courtesy Michelle Schulp at marktimemedia.com
テンプレート関連の条件タグや BODY CSS クラスを含む詳細な階層図は こちら を参照。
WordCamp Minneapolis ではちょっと変わったテンプレート階層図が作成された。PDF をダウンロード
ページ種類別テンプレート階層
以下、表示するページの種類別に、WordPress に呼ばれるテンプレートファイルの順序を示します。各セクションの見出しが、冒頭の問い「ある種類のページを表示するとき、どのテンプレートファイルが使われるのか?」の、「ある種類のページ」に当てはまります。
ホームページ表示
サイトフロントページ、または固定ページの上にあるブログ投稿インデックスページの表示に使用されるテンプレートファイル。注意: サイトフロントページ上にある場合、フロントページテンプレートは、ブログ投稿インデックス (ホーム) テンプレートに優先します。
- home.php
- index.php
フロントページ表示
サイトフロントページの表示に使用されるテンプレートファイル。フロントページはブログ投稿インデックス、または固定ページを表示します。フロントページテンプレートは、ブログ投稿インデックス (ホーム) テンプレートに優先します。
個別投稿表示
個別投稿ページの表示に使用されるテンプレートファイル。
- single-{post_type}.php - 投稿タイプが product ならば WordPress は single-product.php を探す。
- single.php
- singular.php
- index.php
固定ページ表示
固定ページ (page 投稿タイプ) の表示に使用されるテンプレートファイル。
- カスタムテンプレートファイル - ページ作成画面の「テンプレート」ドロップダウンメニューで選択したテンプレート名。get_page_templates()参照。
- page-{slug}.php - 固定ページのスラッグが recent-news ならば WordPress は page-recent-news.php を探す。
- page-{id}.php - 固定ページIDが 6 ならば WordPress は page-6.php を探す。
- page.php
- singular.php
- index.php
参照: 固定ページ
カテゴリー表示
カテゴリーアーカイブインデックスページの表示に使用されるテンプレートファイル。
- category-{slug}.php - カテゴリーのスラッグが news ならば WordPress は category-news.php を探す。
- category-{id}.php - カテゴリー ID が 6 ならば WordPress は category-6.php を探す。
- category.php
- archive.php
- index.php
参照: カテゴリーテンプレート
タグ表示
タグアーカイブインデックスページの表示に使用されるテンプレートファイル。
- tag-{slug}.php - タグのスラッグが sometag ならば WordPress は tag-sometag.php を探す。
- tag-{id}.php - タグ ID が 6 ならば WordPress は tag-6.php を探す。
- tag.php
- archive.php
- index.php
カスタム分類表示
カスタム分類アーカイブインデックスページの表示に使用されるテンプレートファイル。
- taxonomy-{taxonomy}-{term}.php - 分類名が sometax、項目が someterm ならば WordPress は taxonomy-sometax-someterm.php を探す。投稿フォーマットの場合、分類名は 'post_format'、項目は 'post_format-{format}'、つまり taxonomy-post_format-post-format-link.php 。
- taxonomy-{taxonomy}.php - 分類名が sometax ならば WordPress は taxonomy-sometax.php を探す。
- taxonomy.php
- archive.php
- index.php
参照: カスタム分類
カスタム投稿タイプ表示
カスタム投稿タイプ アーカイブインデックスページの表示に使用されるテンプレートファイル。
- archive-{post_type}.php - 投稿タイプ が product ならば WordPress は archive-product.php を探す。
- archive.php
- index.php
(カスタム投稿タイプの個別ページを表示する場合は個別投稿表示を参照)
参照: カスタム投稿タイプ
作成者表示
作成者別アーカイブインデックスページの表示に使用されるテンプレートファイル。
- author-{nicename}.php - 作成者の nicename がramiならば WordPress は author-rami.php を探す。
- author-{id}.php - 作成者の作成者ID が 6 ならば WordPress は author-6.php を探す。
- author.php
- archive.php
- index.php
日付別表示
日付別アーカイブインデックスページの表示に使用されるテンプレートファイル。
- date.php
- archive.php
- index.php
検索結果表示
検索結果インデックスページの表示に使用されるテンプレートファイル。
- search.php
- index.php
参照: 検索テンプレート
404 (Not Found) 表示
サーバーエラー 404 ページの表示に使用されるテンプレートファイル。
- 404.php
- index.php
参照: 404 テンプレート
添付ファイル表示
個別添付ファイルページ (attachment 投稿タイプ) の表示に使用されるテンプレートファイル。
- {MIME_type}.php - 任意の MIME タイプ (image.php, video.php, application.php)。text/plainならば、以下の順番:
- text.php
- plain.php
- textplain.php
- attachment.php
- single-attachment.php
- single.php
- index.php
- {MIME_type}.php - 任意の MIME タイプ (image.php, video.php, application.php)。text/plainならば、以下の順番:
階層のフィルター
WordPress テンプレートシステムでは階層にフィルターを適用できます。get_query_template() /en 関数内にあるフィルターはファイル名 "{$type}_template" です。このとき $type は階層内の拡張子 .php なしのファイル名。
すべてのリスト:
- index_template
- 404_template
- archive_template
- author_template
- category_template
- tag_template
- taxonomy_template
- date_template
- home_template
- front_page_template
- page_template
- paged_template
- search_template
- single_template
- text_template, plain_template, text_plain_template (すべての MIME タイプ)
- attachment_template
- comments_popup
例
例として、デフォルトの作成者別階層を以下に挙げます。
- author-{nicename}.php
- author-{id}.php
- author.php
ここで author.php の前に author-{role}.php を追加する場合、'author_template' フックを使用して実際の階層を操作できます。/author/username に要求があり、username が編集者権限グループに所属するなら author-editor.php が現在のテーマディレクトリ内で探され、存在すれば表示に使用されます。
function author_role_template( $templates='' ) { $author = get_queried_object(); $role=$author->roles[0]; if(!is_array($templates) && !empty($templates)) { $templates=locate_template(array("author-$role.php",$templates),false); } elseif(empty($templates)) { $templates=locate_template("author-$role.php",false); } else { $new_template=locate_template(array("author-$role.php")); if(!empty($new_template)) array_unshift($templates,$new_template); } return $templates; } add_filter( 'author_template', 'author_role_template' );
変更履歴
- 3.1: archive-{post_type}.php を追加。
- 3.0: single-{post_type}.php、author-{nicename}.php、author-{id}.php、taxonomy.php、taxonomy-{taxonomy}.php、taxonomy-{taxonomy}-{term}.php を追加。
- 2.9 : page-slug.php、page-id.php、category-slug.php、tag-id.php を追加。
- 2.3 : タグページを追加。
- 2.0 : 添付ファイルテンプレートを追加。
- 1.5 : テーマシステムの導入
ソースファイル
- テンプレート階層関数群は
wp-includes/theme.php
で定義されています。 - テンプレートロード階層は
wp-includes/template-loader.php
で定義されています。
プラグイン
関連
テンプレート階層: カテゴリーテンプレート, タグテンプレート, タクソノミーテンプレート, ページテンプレート, 投稿タイプテンプレート, 投稿者テンプレート, 日付テンプレート, 検索テンプレート, 404 テンプレート, 添付ファイルテンプレート, ループテンプレート /en