WordPressのフロントページの表示設定とテンプレートの関係

管理画面で設定できる表示設定とhome.phpとfront-page.phpなどの関係についてのメモです。
※WordPress4.0での結果。バージョン違うと変わるかも。

テーマのテンプレートの適用具合は、テンプレート階層の順…なのですが、管理画面の表示設定の選択具合によっては、この通りにはいかない(front-page.php/home.phpの適用具合が違う)ので調べてみました。

管理画面のフロントページの表示の指定による、テンプレートの適用具合と持ってくるデータがどのように変化するかを調査。

なんでこのことを調べようかと思ったかといいますと、
「投稿(post)のカテゴリ指定しないアーカイブページをトップページ以外のパーマリンクで表示したい」ということが多々あったためです。

例として以下のような。

http://example.net/
トップページ用の表示(投稿・カスタム投稿の一覧なんかを表示)
http://example.net/news/
投稿(post)の一覧(アーカイブ)表示(カテゴリー指定なしの全てののpostを表示)

カスタム投稿タイプを利用する前は、投稿をカテゴリー分けしてそれぞれのカテゴリー毎に一覧(アーカイブ)ページを表示というのが一般的でした。
カテゴリー別のアーカイブページはパーマリンク・テンプレート共に特に設定せずとも適用されます。

カスタム投稿タイプを利用するようになると、カスタム投稿タイプ別のアーカイブページと共に、カテゴリー分けしていない投稿(post)だけの一覧ページの必要性が出てきたのでした。

「表示設定」の指定

管理画面のメニュー「設定」→「表示設定」の「フロントページの表示」の項目でフロントページをどう表示するか変更できます。
設定項目は下記なのですが、どうしたらどうなるかわかりにくい…ので選択したものによって表示がどうなるかの一覧を書き出します。

WordPressの表示設定

「最近の投稿」を選択(デフォルト)

WordPressの表示設定

フロントページ(http://example.net/)を表示した時

テンプレート適用順

front-page.php → home.php→index.php

投稿の値

  • wp_title():空文字列
  • the_title():投稿(post)のタイトル
  • the_content():投稿(post)の本文

条件分岐

  • is_front_page():true
  • is_home():true
  • is_page():false

「固定ページ」を選択、「フロントページ」と「投稿ページ」を指定

WordPressの表示設定

下記のように指定したとします。

  • 「フロントページ」に固定ページ「サンプル1(slug:sample1)」
  • 「投稿ページ」に固定ページ「サンプル2(slug:sample2)」

フロントページ(http://example.net/)を表示した時

テンプレート適用順

front-page.php → index.php

条件分岐

  • is_front_page():true
  • is_home():false
  • is_page():true

投稿の値

  • wp_title():空文字列
  • the_title():固定ページ(page)のタイトル
  • the_content():固定ページ(page)の本文

※ フロントページに指定した固定ページは一時的にパーマリンク(slug 内部的には name か pagename)が設定できなくなる(固定ページの編集ページからテキストボックスが消える)。指定からはずすと元に戻る。

※ 固定ページに指定してあったURLにアクセスするとフロントページに飛ばされる。
http://example.net/sample1/ → http://example.net/ に飛ばされる(404にはならない)

投稿ページ(http://example.net/sample2)を表示した時

テンプレート適用順

home.php -> index.php

条件分岐

  • is_front_page():false
  • is_home():true
  • is_page():false

投稿の値

  • wp_title():固定ページ(page)のタイトル
  • the_title():投稿(post)のタイトル
  • the_content():投稿(post)の本文

※ ちなみに、「固定ページ」を選択して「フロントページ」と「投稿ページ」どちらか指定一方しか指定しないということもできるけど、この指定に意味があるの不明。

テンプレートの適用具合まとめ

  • 最近の投稿 : front-page.php → home.php → index.php

  • 固定ページ

    • フロントページ: front-page.php → index.php
    • 投稿ページ : home.php → index.php

カスタム投稿タイプのアーカイブテンプレートのように archive-post.php を置くと、post一覧が表示できるといいのになと思ったりしたのでした。
この設定はややこしい。