WordPress「テンプレート」の優先順位
★更新:
WordPressの「テンプレート」と「パーツテンプレート」について、
また、「テンプレート」の種類と優先順位について、整理します。
「テンプレート」
WordPressで作るサイトは、「テンプレート」と呼ばれるPHPファイルによって、ブラウザにHTMLとして出力されます。
「テンプレート」の最も代表的なものが「index.php」。これが無いとテーマとしてWordPressに認識されないので必須。
極端な話、index.phpだけでサイトを作る事もできます。
が、実際は、投稿ページのアーカイブ(一覧)用のテンプレート「archive.php」が必要だったり、ページの用途によってテンプレートを用意する必要があります。
アーカイブページ用のテンプレート「archive.php」を作ると、自動的にアーカイブページの場合はコレを使って出力されます。これは「テンプレートの優先順位」が決まっているから。とても便利な仕組みです。(「テンプレートの優先順位」はこのページの後半に記載)
「パーツテンプレート」
また、「テンプレート」内は、ブラウザで表示したときの共通部分(ヘッダー、フッター、サイドバーなど)を別ファイルにして呼び出します。
これが「パーツテンプレート」と呼ばれる、言わば構成部品。
こうしたほうが、1つのパーツテンプレートを修正するだけで全体に反映させられるなど、作業効率がアップします。
パーツテンプレートと、それを呼び出すテンプレートタグ
よく使われるヘッダー、サイドバー、フッター、コメント欄には、それぞれ
「header.php」「sidebar.php」「footer.php」「comments.php」というパーツテンプレート名が用意されています。
これらのパーツテンプレートは、
テンプレート内に以下のテンプレートタグで呼び出します。
- header.phpは「get_header();」で呼び出す
- footer.phpは「get_footer();」
- sidebar.phpは「get_sidebar();」
- comments.phpは「comments_template();」
このほかに、必要な場合は自由にパーツテンプレートを作る事ができ、
呼び出しは「get_template_part(‘パーツテンプレート名’);」というタグを使います。
(abcd.phpという自作パーツテンプレートなら「get_template_part(‘abcd’);」で呼び出す)
例として、このサイトではこのように分割しています。
<article id=”contents”>内では、単独記事の出力部分をさらにパーツテンプレート化しています。それらを読み込むテンプレート(index.php)のソースは下記。
<?php get_header(); ?> <article id="contents"> <?php if (have_posts()) : while (have_posts()) : the_post(); get_template_part('content'); endwhile; endif; ?> </article><!-- #contents END --> <?php get_sidebar();?> <?php get_footer();?>
テンプレートの種類と優先順位
テンプレートには「index.php」「archive.php」のほかに下記のモノがあります。
- 「front-page.php」「home.php」(トップページ用)
- 「page.php」(固定ページ用)
- 「single.php」(投稿用)
- 「category.php」(カテゴリー別アーカイブページ用)
- 「search.php」(検索結果ページ用)
- 「404.php」(404(file not found)ページ用)
- 「date.php」(日付別アーカイブページ用)
- 「tag.php」(タグ別アーカイブページ用)
- 「author.php」(著者別アーカイブページ用)
- 「taxonomy.php」(カスタム分類別アーカイブページ用)
それぞれ「スラッグ」や「ID」をつけて、特定の記事や、特定のアーカイブページの「専用テンプレート」にする事もできます。
これらのテンプレートには「優先順位」があり、優先度の高いものから先に使われるようになっています。
例えば固定ページの場合、page.phpを作れば、index.phpより優先度が高いので、こちらが自動的に使用されます。(下の表の*4)
page-スラッグ.phpを作れば、ある特定の固定ページでは、page.phpより優先度が高くなり、こちらが自動的に使われます。(下の表の*2)
例えば「page-abc.php」を作れば、スラッグを「abc」にした固定ページでは、「page.php」ではなくこっちが優先的に使われ、構成やデザインを変える事ができます。
各テンプレートの優先順位はこのようになっています。
★まずは、個別のページ
優先順位( 高い←← →→低い ) | |||||
---|---|---|---|---|---|
トップページ | front-page.php (固定ページの場合) |
home.php (投稿の場合) |
トップが固定ページの場合、固定ページの優先順位のテンプレート*1〜*4 | index.php | |
固定ページ | カスタム テンプレート *1 |
page-[slug].php *2 |
page-[ID].php *3 |
page.php *4 |
index.php |
投稿 | single- [posttype].php |
single.php | index.php |
★アーカイブ(一覧)ページ
優先順位( 高い←← →→低い ) | |||||
---|---|---|---|---|---|
カテゴリー別 | category- [slug].php |
category- [ID].php |
category.php | archive.php | index.php |
日付別 | date.php | archive.php | index.php | ||
タグ別 | tag-[slug].php | tag-[ID].php | tag.php | archive.php | index.php |
著者別 | author- [name].php |
author-[ID].php | author.php | archive.php | index.php |
カスタム分類 | taxonomy- [taxonomy]- [slug].php |
taxonomy- [taxonomy].php |
taxonomy.php | archive.php | index.php |
★その他のページ
優先順位( 高い←← →→低い ) | |||||
---|---|---|---|---|---|
検索結果 | search.php | index.php | |||
404 | 404.php | index.php |
ちなみに、このサイトは「index.php」「archive.php」「search.php」の3つのテンプレートでできています。必要最低限ですね。
トップページ、投稿、固定ページは、まったく同じレイアウトなので、すべて「index.php」で出力されます。
さすがにアーカイブページや、検索結果ページは、レイアウトを変えなければならないので、それぞれ「archive.php」「search.php」を作りました。
それらは「index.php」より優先度が高いので、自動的にそれらに切り替わって表示されているわけです。