[WP Theme Dev] Twenty Seventeen の front-page.php が表示されない
動作確認のため手元でチャイルドテーマを作成していて気づきました。
どうやら、ダッシュボードの設定>表示設定>ホームページの表示
で、それぞれ以下の設定を行うと該当するテンプレートが読み込まれる振る舞いになっています。
- 最新の投稿 … index.php
- 固定ページ … front-page.php
今まで front-page.php
が存在すると、常に index.php よりも優先するものと認識していました。
テンプレート階層
1. front-page.php
3. home.php
3. index.php
ホームページ表示
サイトフロントページ、または固定ページの上にあるブログ投稿インデックスページの表示に使用されるテンプレートファイル。注意: サイトフロントページ上にある場合、フロントページテンプレートは、ブログ投稿インデックス (ホーム) テンプレートに優先します。
1. home.php
2. index.phpフロントページ表示
サイトフロントページの表示に使用されるテンプレートファイル。フロントページはブログ投稿インデックス、または固定ページを表示します。フロントページテンプレートは、ブログ投稿インデックス (ホーム) テンプレートに優先します。
- front-page.php – 管理 > 設定 > 表示設定 セクションで「フロントページの表示」が「最新の投稿」または「固定ページ」どちらになっている場合でも使われる。
- 固定ページ表示ルール – 管理 > 設定 > 表示設定 セクションの「フロントページの表示」で、「フロントページ」が設定されている場合
- ホームページ表示ルール – 管理 > 設定 > 表示設定 セクションの「フロントページの表示」で、「投稿ページ」が設定されている場合
が、どうやら違う様子。
functions.php を調べてみると add_filter
している箇所がありました。
/**
* Use front-page.php when Front page displays is set to a static page.
*
* @since Twenty Seventeen 1.0
*
* @param string $template front-page.php.
*
* @return string The template to be used: blank if is_home() is true (defaults to index.php), else $template.
*/
function twentyseventeen_front_page_template( $template ) {
return is_home() ? '' : $template;
}
add_filter( 'frontpage_template', 'twentyseventeen_front_page_template' );
同じような疑問を持った方がいらっしゃいました。
テーマの設計次第で、振る舞いをかえられるようです。
これは、通常のテンプレート階層の動作をフィルターフックを使って 適用されるテンプレートを変更しています。is_home()ならば、index.phpを適用、そうでなければ、テンプレート階層のfront-page.phpを使うという風に、テンプレート階層の動作を変更しているのです。
トピック: twentyseventeenのfront-page.phpが表示されない « サポートフォーラム — WordPress
深いところまで調べていませんが、そうなっていたという memo.