今まで適当に扱っていたhome.phpとfront-page.phpとindex.php。
これらの違いと表示設定による挙動の違いをしっかり把握しないといけない事情がやってまいりました。
いろんなブログを読んでみても、やっぱり自分でテストした方がしっくり来ますね。
front-page.phpとhome.phpとindex.phpを用意
とりあえず上記のファイルを用意します。
内容はすべてメインループです。
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<h2><?php the_title(); ?></h2>
<?php endwhile; ?>
<?php endif; ?>
WordPressでは、ファイルの優先度がfront-page.php → home.php → index.phpの順に決まっています。
ホームページの表示を「最新の投稿」にする

front-page.phpとhome.phpとindex.php
https://test.com(トップページ)にアクセスするとfront-page.phpが表示されます。
内容はブログ記事一覧です。
また、is_front_page()もis_home()もtrueを返します。
home.phpとindex.php
https://test.comにアクセスするとhome.phpが表示されます。
内容はブログ記事一覧です。
また、is_front_page()もis_home()もtrueを返します
index.php
https://test.comにアクセスするとindex.phpが表示されます。
内容はブログ記事一覧です。
また、is_front_page()もis_home()もtrueを返します
固定ページを2つ用意し、ホームページの表示を「固定ページ」にする:その1
まず固定ページを2つ用意します。
それぞれ、「トップページ」「ブログ記事一覧」というタイトルをつけ、URLのslugも「top」「blog」にしました。
そして、表示設定を固定ページに変更します。

front-page.phpとhome.phpとindex.php
https://test.com(トップページ)にアクセスするとfront-page.phpが表示されます。
https://test.com/topにアクセスするとhttps://test.comにリダイレクトされます。
内容は固定ページで作ったトップページだけです。
また、is_front_page()とis_page()がtrueを返し、is_home()はfalseを返します。
https://test.com/blog(ブログ記事一覧)にアクセスするとhome.phpが表示されます。
内容はブログ記事一覧です。
また、is_home()だけがtrueを返し、is_front-page()とis_page()はfalseを返します。
home.phpとindex.php
https://test.com(トップページ)にアクセスするとpage.phpが表示されます。
内容は固定ページで作ったトップページの内容が表示されます。
また、is_front_page()とis_page()がtrueを返し、is_home()はfalseを返します。
https://test.com/blog(ブログ記事一覧)にアクセスするとhome.phpが表示されます。
内容はブログ記事一覧です。
また、is_home()だけがtrueを返し、is_front-page()とis_page()はfalseを返します。
index.php
https://test.com(トップページ)にアクセスするとpage.phpが表示されます。
内容は固定ページで作ったトップページの内容が表示されます。
また、is_front_page()とis_page()がtrueを返し、is_home()はfalseを返します。
https://test.com/blog(ブログ記事一覧)にアクセスするとindex.phpが表示されます。
内容はブログ記事一覧です。
また、is_home()だけがtrueを返し、is_front-page()とis_page()はfalseを返します。
front-page.phpとindex.php
https://test.com(トップページ)にアクセスするとfront-page.phpが表示されます。
内容は固定ページで作ったトップページだけです。
また、is_front_page()とis_page()がtrueを返し、is_home()はfalseを返します。
https://test.com/blog(ブログ記事一覧)にアクセスするとindex.phpが表示されます。
内容はブログ記事一覧です。
また、is_home()だけがtrueを返し、is_front-page()とis_page()はfalseを返します。
固定ページを2つ用意し、ホームページの表示を「固定ページ」にする:その2

先ほどは、ホームページにトップページ(固定ページ)、投稿ページにブログ記事一覧(固定ページ)をそれぞれ設定しました。
今回は、ホームページにトップページ(固定ページ)のみを指定し、投稿ページは空欄です。
front-page.phpとhome.phpとindex.php
https://test.com(トップページ)にアクセスするとfront-page.phpが表示されます。
固定ページで作ったトップページの内容が表示されます。
また、is_front_page()とis_page()がtrueを返し、is_home()はfalseを返します。
https://test.com/blog(ブログ記事一覧)にアクセスするとpage.phpが表示されます。
固定ページで作った「ブログ記事一覧」の内容が表示されますが、ブログ記事の一覧が表示されるわけではありません。これはそうですよね。投稿ページに何も設定していないので、ブログ一覧を表示するページが指定されていない状態です。
また、is_page()だけがtrueを返し、is_front-page()とis_home()はfalseを返します。
home.phpとindex.php
https://test.com(トップページ)にアクセスするとpage.phpが表示されます。
固定ページで作ったトップページの内容が表示されます。
また、is_front_page()とis_page()がtrueを返し、is_home()はfalseを返します。
https://test.com/blog(ブログ記事一覧)の挙動は上に同じです。
index.php
home.phpがあるとき(上記)と同じです。
front-page.phpとindex.php
https://test.com(トップページ)にアクセスするとfront-page.phpが表示されます。
固定ページで作ったトップページの内容が表示されます。
また、is_front_page()とis_page()がtrueを返し、is_home()はfalseを返します。
https://test.com/blog(ブログ記事一覧)にアクセスするとindex.phpが表示されます。
内容はこれまでと同じく、記事一覧ではなく固定ページ「ブログ記事一覧」の内容です。
is_page()だけがtrueを返します。
コーポレートサイトでベストな設定
投稿ページを設定せずにブログ記事一覧を表示するには、固定ページのテンプレートを特別に作る必要が出てきます。
<?php
/*
Template Name:ブログ記事一覧用
*/
?>
この場合は、post_per_pageを設定しないで記事一覧を取得しましょう。そうでなければWordPressの表示件数設定が効かなくなります。
WordPressでコーポレートサイトを作る場合で上記のテンプレートを特別に作りたくない場合は、まずfront-page.phpとindex.phpを用意し、ホームページと合わせて投稿ページも設定するのがベストかと思います。
(index.phpはどちらにせよ用意しなくてはいけないので、ファイル数を最低限にするという意味ではhome.phpを削ってもいいのでは?という結論です。)
正直ぶっちゃけ検証してるうちによくわからなくなってきました(笑)。
というのも、パターンによって「え、なんでそれis_home()がtrue!?」とかhome.phpいらなくね!?とか疑問がわんさか出てくるのです。
WordPress奥が深し(!?)