• 赤色のリンクは、まだ日本語Codexに存在しないページ・画像です。英語版と併せてご覧ください。(詳細

このWikiはいつでも誰でも編集できます

テンプレート階層

提供: WordPress Codex 日本語版
2015年2月21日 (土) 22:17時点におけるAkira Tachibana (トーク | 投稿記録)による版 (最新版と同期en:Template_Hierarchy 23:41, 4 November 2014‎ Kpdesign版)

移動先: 案内検索

はじめに

WordPress テンプレートはパズルのピースのように組み合わせられ、サイト上で Web ページを表示します。一部のテンプレート(例: ヘッダー・フッターテンプレート)はすべての Web ページ内で使用される一方、他のテンプレートはある条件の下でのみ使用されます。

このドキュメンテーションの目的

このドキュメンテーションは、次の疑問に答えてくれるでしょう。

ある種類のページを表示するとき、どのテンプレートファイルが使われるのか?

このドキュメンテーションの使い方

WordPress 1.5 で「テーマ」機能が導入されて以来、テンプレートはますまカスタマイズしやすくなりました。WordPress テーマを作成するには、WordPress がブログ上の各種ページを表示するためにどのようにテンプレートファイルを選択するのかを正しく理解する必要があります。すでにあるテーマをカスタマイズしたい場合にもどのテンプレートファイルを編集すればいいのかを知る手がかりになるでしょう。

条件分岐タグを使う

WordPress では、テンプレートとクエリの種類を一致させるための方法が複数用意されています。WordPress テーマ制作者は条件分岐タグを使って、あるページを生成するにはどのテンプレートが使われるのかをコントロールすることができます。ここで紹介するすべてのテンプレートファイルを使っていないテーマもありますし、条件分岐タグを使って他のテンプレートファイルを読み込ませているテーマもあります。詳しくは条件分岐タグおよびテーマの作成ページの「クエリベースのテンプレート」セクションをご覧ください。


仕組み

The General Idea

訪問者が WordPress サイト上のページにアクセスしたとき、WordPress は次のように動きます。

URI に含まれるクエリ文字列とクエリタイプを照合し、要求されているページの種類(メインページ、カテゴリーページなど)を判断。 該当するページ種類のテンプレート階層に基づき、現在のテーマディレクトリ内からテンプレートファイルを探す。 最初に見つかったテンプレートファイルを用いて、要求されたページを生成。

WordPress uses the Query String — information contained within each link on your website — to decide which template or set of templates will be used to display the page.

First, WordPress matches every Query String to query types — i.e. it decides what type of page (a search page, a category page, the home page etc.) is being requested.

Templates are then chosen — and web page content is generated — in the order suggested by the WordPress Template hierarchy, depending upon what templates are available in a particular WordPress Theme.

WordPress looks for template files with specific names in the current Theme's directory and uses the first matching template file listed under the appropriate query section below.

With the exception of the basic index.php template file, Theme developers can choose whether they want to implement a particular template file or not. If WordPress cannot find a template file with a matching name, it skips down to the next file name in the hierarchy. If WordPress cannot find any matching template file, index.php (the Theme's home page template file) will be used.

Examples

例えば、ブログが http://example.com/wp/ にあり、訪問者が http://example.com/wp/category/apple/ という「りんご」カテゴリーのアーカイブページにアクセスしたとしましょう。 WordPress は、現在のテーマディレクトリの中から「りんご」カテゴリーに使えるテンプレートファイルを探します。

カテゴリーページのテンプレート階層は次のとおりです。 WordPress はこのリストの上から順に、ファイルがないかどうか探していき、最初に見つけたファイルを使います。

  1. category-slug.php -- 特定のカテゴリー用テンプレート
  2. category-ID.php -- 特定のカテゴリー用テンプレート
  3. category.php -- カテゴリーの汎用テンプレート
  4. archive.php -- 汎用アーカイブテンプレート(タグ・日別アーカイブなどと共用)
  5. index.php

「りんご」カテゴリーのスラッグが 'apple' だった場合、 WordPress はまず category-apple.php というテンプレートファイルを探します。

テーマディレクトリ内にこのファイルがない場合、ID が4とすれば、category-4.php を探します。 これも見つからなければ category.phpを探します。 これでも見つからなければ archive.php を探します。 それもなければ、あらゆるページに使える基本のテーマテンプレートファイル index.php を使います。

index.php はテーマに必須ですが、テーマの作成者は他のテンプレートファイルを含めるかどうかを選べます。 WordPress は 一致する名前のテンプレートファイルが見つからなければそれをスキップして次の候補のファイル名を探してくれます。 例えば、他のページと違った表示にしたいのがカテゴリーID 4 だけなら、 テーマディレクトリ内に置くテンプレートファイルは category-4.phpindex.php のみでいいのです。

If your blog is at http://example.com/blog/ and a visitor clicks on a link to a category page like http://example.com/blog/category/your-cat/: Here is the progression of how WordPress uses the template hierarchy to find and generate the right file.

WordPress looks for a template file in the current Theme's directory that matches the category's ID.

  1. If the category's ID is 4, WordPress looks for a template file named category-4.php.
  2. If it is missing, WordPress next looks for a generic category template file, category.php.
  3. If this file does not exist either, WordPress looks for a generic archive template, archive.php.
  4. If it is missing as well, WordPress falls back on the main Theme template file, index.php.

If a visitor goes to your home page at http://example.com/blog/, the following happens:

  1. WordPress first determines whether it has a static front page. If a static front page has been set, then WordPress loads that page according to the page template hierarchy.
  2. If a static front page has not been set, then WordPress looks for a template file called home.php and uses it to generate the requested page.
  3. If home.php is missing, WordPress looks for a file called index.php in the active theme's directory, and uses that template to generate the page.

概観図

次の図は、WordPress テンプレート階層に基づいてウェブページを生成する際に呼ばれるテンプレートファイルを図解したものです。訪問者がアクセスする各種ページのクエリ文字列と、それに対応する条件分岐タグ、そして、WordPress が探すテンプレートファイル名の順序を示しています。

WordPress テンプレート階層構造図

Graphic Example of the WordPress Template Hierarchy Structure Full-Size Image (jpg) - Image courtesy Michelle Schulp at marktimemedia.com

View an interactive version

A more in depth hierarchy diagram, including template-related conditional tags and body CSS classes, can be found here.

WordCamp Minneapolis developed a poster with a more whimsical take on the template hierarchy. Download the PDF

条件分岐タグの利用

WordPress がページの種類(クエリタイプ)に合うテンプレートファイルを特定する方法は一つではありません。条件分岐タグは表示しようとしているページの種類を判定できるので、その判定結果によってテンプレートファイルを切り替えたり、複数のページ種類で共通のテンプレートファイルを使い、その中の一部分だけをページ種類に応じて切り替える、といった細かい制御もできます。具体的な活用例として、デフォルトテーマの sidebar.php が参考になるでしょう。詳しくは条件分岐タグおよびテーマの作成 - クエリベースのテンプレートをご覧ください。

ページ種類別テンプレート階層

以下、表示するページの種類別に、WordPress に呼ばれるテンプレートファイルの順序を示します。各セクションの見出しが、冒頭の問い「ある種類のページを表示するとき、どのテンプレートファイルが使われるのか?」の、「ある種類のページ」に当てはまります。

ホームページ表示

訪問者がサイトのメインページ(ホームページ)にアクセスした場合、WordPress はまず最初に、静的フロントページかどうかを判断します。静的フロントページが設定されている場合、固定ページのテンプレート階層に従ってテンプレートを読み込みます。設定されていなければ、次の順にテンプレートファイル名を探し、最初に見つかったテンプレートを使ってページを生成します。

  1. home.php
  2. index.php

Template file used to render the Blog Posts Index, whether on the site front page or on a static page. Note: on the Site Front Page, the Front Page template takes precedence over the Blog Posts Index (Home) template.

  1. home.php
  2. index.php

フロントページ表示

バージョン 3.0 以降。

  1. front-page.php - 管理 > 設定 > 表示設定 セクションで「フロントページの表示」が「最新の投稿」または「固定ページ」どちらになっている場合でも使われる。
  2. 固定ページ表示ルール - 管理 > 設定 > 表示設定 セクションの「フロントページの表示」で、「フロントページ」が設定されている場合
  3. ホームページ表示ルール - 管理 > 設定 > 表示設定 セクションの「フロントページの表示」で、「投稿ページ」が設定されている場合

Template file used to render the Site Front Page, whether the front page displays the Blog Posts Index or a static page. The Front Page template takes precedence over the Blog Posts Index (Home) template.

  1. front-page.php - Used for both Your latest posts or A static page as set in the Front page displays section of Settings -> Reading
  2. Page display rules - When Front page is set in the Front page displays section of Settings -> Reading
  3. Home Page display rules - When Posts page is set in the Front page displays section of Settings -> Reading


個別投稿表示

  1. single-{post_type}.php - 投稿タイプvideos の場合は single-videos.php (バージョン 3.0 以降)
  2. single.php
  3. index.php

Template file used to render a single post page.

  1. single-{post_type}.php - If the post type were product, WordPress would look for single-product.php.
  2. single.php
  3. index.php

固定ページ表示

固定ページ:

  1. カスタムテンプレート: ページ作成画面の「テンプレート」ドロップダウンメニューで選択したテンプレート名
  2. page-slug.php - 例えば固定ページのスラッグが "about" の場合は page-about.php
  3. page-ID.php - 例えば固定ページの ID が6の場合は page-6.php
  4. page.php
  5. index.php

注: これは「固定ページ」を指し、一般的なブログ投稿のページや Web ページのことではありません。

Template file used to render a static page (page post-type)

  1. custom template file - The Page Template assigned to the Page. See get_page_templates().
  2. page-{slug}.php - If the page slug is recent-news, WordPress will look to use page-recent-news.php
  3. page-{id}.php - If the page ID is 6, WordPress will look to use page-6.php
  4. page.php
  5. index.php


カテゴリー表示

カテゴリーテンプレート

  1. category-slug.php - 例えばカテゴリーのスラッグが "news" の場合は category-news.php
  2. category-ID.php - 例えばカテゴリーID 6 用のテンプレートであれば category-6.php
  3. category.php
  4. archive.php
  5. index.php

Template file used to render a Category Archive Index page

  1. category-{slug}.php - If the category's slug were news, WordPress would look for category-news.php
  2. category-{id}.php - If the category's ID were 6, WordPress would look for category-6.php
  3. category.php
  4. archive.php
  5. index.php


タグ表示

タグテンプレート/en

  1. tag-slug.php
  2. tag-ID.php
  3. tag.php
  4. archive.php
  5. index.php

Template file used to render a Tag Archive Index page

  1. tag-{slug}.php - If the tag's slug were sometag, WordPress would look for tag-sometag.php
  2. tag-{id}.php - If the tag's ID were 6, WordPress would look for tag-6.php
  3. tag.php
  4. archive.php
  5. index.php


カスタム分類表示

カスタム分類テンプレート。

  1. taxonomy-{taxonomy}-{term}.php - 例えば分類名が "sometax"、スラッグが "someterm" の場合は taxonomy-sometax-someterm.php
  2. taxonomy-{taxonomy}.php - 例えば分類名が "sometax" の場合は taxonomy-sometax.php
  3. taxonomy.php
  4. archive.php
  5. index.php

Template file used to render the Archive Index page for a Custom Taxonomy

  1. taxonomy-{taxonomy}-{term}.php - If the taxonomy were sometax, and taxonomy's term were someterm WordPress would look for taxonomy-sometax-someterm.php. In the case of Post Formats, the taxonomy is 'post_format' and the terms are 'post_format-{format}. i.e. taxonomy-post_format-post-format-link.php
  2. taxonomy-{taxonomy}.php - If the taxonomy were sometax, WordPress would look for taxonomy-sometax.php
  3. taxonomy.php
  4. archive.php
  5. index.php


カスタム投稿タイプ表示

カスタム投稿タイプテンプレート。

  1. archive-{post_type}.php - 例えば投稿タイプ名が "product" の場合は archive-product.php.
  2. archive.php
  3. index.php

(カスタム投稿タイプの個別ページを表示する場合は個別投稿表示を参照)

Template file used to render the Archive Index page for a Custom Post Type

  1. archive-{post_type}.php - If the post type were product, WordPress would look for archive-product.php.
  2. archive.php
  3. index.php

(For rendering a single custom post type, refer to the Single Post display section above.)

作成者表示

作成者テンプレート/en

  1. author-{nicename}.php - 例えば作成者の nicename が "hanako" の場合は author-hanako.php (バージョン 3.0 以降)
  2. author-{id}.php - 例えば作成者の ID が "6" の場合は author-6.php (バージョン 3.0 以降)
  3. author.php
  4. archive.php
  5. index.php

Template file used to render an Author Archive Index page

  1. author-{nicename}.php - If the author's nice name were rami, WordPress would look for author-rami.php.
  2. author-{id}.php - If the author's ID were 6, WordPress would look for author-6.php.
  3. author.php
  4. archive.php
  5. index.php


日付別表示

日時ごとのアーカイブテンプレート。

  1. date.php
  2. archive.php
  3. index.php

Template file used to render a Date-Based Archive Index page

  1. date.php
  2. archive.php
  3. index.php


検索結果表示

検索テンプレート

  1. search.php
  2. index.php

Template file used to render a Search Results Index page

  1. search.php
  2. index.php


404 (Not Found) 表示

404 テンプレート

  1. 404.php
  2. index.php

Template file used to render a Server 404 error page

  1. 404.php
  2. index.php


添付ファイル表示

記事本文への画像添付/enで 'Linked to Page' を選んだ場合に、画像のリンク先として使われるページ

  1. MIME_TYPE.php - image.php, video.php, audio.php, application.php, その他 MIME type の最初の部分のファイル名
  2. attachment.php
  3. single.php
  4. index.php

Template file used to render a single attachment (attachment post-type) page

  1. {MIME_type}.php - it can be any MIME type (image.php, video.php, application.php). For text/plain, in order:
    1. text.php
    2. plain.php
    3. textplain.php
  2. attachment.php
  3. single-attachment.php
  4. single.php
  5. index.php

Filter Hierarchy

The WordPress templates system allow you to filter the hierarchy. The filter (located in the get_query_template() function) uses this filter name: "{$type}_template" where $type is the a file name in the hierarchy without the .php extension.

Full list:

  • 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 (all mime types)
  • attachment_template
  • comments_popup

Example

For example, let's take the default author hierarchy:

  • author-{nicename}.php
  • author-{id}.php
  • author.php

To add author-{role}.php before author.php we can manipulate the actual hierarchy using the 'author_template' hook. This allows a request for /author/username where username has the role of editor to display using author-editor.php if present in the current themes directory.

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' );


変更履歴


ソースファイル

テンプレート階層関数群は wp-includes/theme.php にあります。

Plugins

Related

外部資料

最新英語版: WordPress Codex » Template Hierarchy最新版との差分