WordPressのis_front_page()とis_home()はsiteの先頭pageと投稿一覧を分けて使う
公開日: 執筆:佐藤
WordPressのis_front_page()は、siteの先頭URLに表示しているpageを判定します。is_home()は、時系列の投稿一覧を表示しているpageを判定します。先頭URLへ最新投稿を出す設定なら両方がtrueになりますが、固定pageを先頭にして投稿一覧を別pageへ置くと、二つは別のpageでtrueになります。
WordPress 4.5のQuery APIでは、is_front_page()がReading Settingsのshow_on_frontとpage_on_frontに従い、siteのmain URLへ表示するpageを調べます。is_home()はshow_on_frontとpage_for_postsに従い、時系列の投稿一覧を調べます。固定pageを先頭に設定した場合、is_home()は「投稿page」に設定したpageでだけtrueになります。
名前が似ているため、先頭pageを出す条件にis_home()を使い、投稿一覧にだけ出す条件にis_front_page()を使う間違いが起きます。最初に「home」という言葉を忘れ、どのURLへ何を出すかで考えます。会社の案内を先頭URLへ出したいのか、日付順のお知らせを出したいのかで、選ぶ条件は変わります。
Reading Settingsを替えることは、表示の場所を替える作業です。先頭に固定pageを置くと、以前は先頭URLにあった投稿一覧が別の投稿pageへ移ります。themeが先頭URLにだけ出すmain visual、投稿一覧にだけ出すpage navigation、投稿の有無で変わる見出しを持っているなら、設定を替える前にどこへ移るかを確認します。設定画面で固定pageを選んだだけで、themeの表示意図まで移るわけではありません。
siteの先頭pageと投稿一覧は同じとは限らない
WordPressでは、Reading Settingsで次の二通りを選べます。themeで大きなimageや導入文を出すときは、先にどちらの設定かを確認します。
| Reading Settings | 先頭URL | 投稿一覧 | is_front_page() |
is_home() |
|---|---|---|---|---|
| 最新の投稿 | 最新投稿の一覧 | 先頭URLと同じ | true | true |
| 固定page | 指定した固定page | 別に指定した投稿page | 先頭URLでtrue | 投稿pageでtrue |
会社siteでは、先頭URLにサービス案内や問い合わせへの導線を置き、newsやblogを別の投稿pageへ置く形があります。この場合、投稿一覧にだけ出す一覧用の見出しやpage navigationを、is_front_page()だけで制御すると先頭URLにも出てしまいます。反対に、先頭pageだけのmain visualをis_home()で制御すると、固定pageを使ったときに表示されません。
最初から最新投稿を先頭へ出すsiteでも、後から会社案内を先頭に置きたくなることがあります。そのときに、投稿一覧を表示するpageをどこへ置くか、menuのlinkをどこへ向けるか、検索から来た人が最新情報へ進めるかを決めます。先頭URLの見た目だけを固定page用に直しても、newsへの入口が消えれば運用しにくくなります。先頭pageの役割と投稿一覧の役割を別に書きます。
固定pageを先頭にする場合、先頭pageの本文と投稿pageの本文を同じように扱うとは限りません。先頭pageはサービス説明や画像を出し、投稿pageは日付順の一覧を出すというthemeでは、二つのtemplateが違うことがあります。固定pageの編集欄に文章を書いたからといって、それが投稿一覧の上へ表示されると考えず、公開画面で確認します。
表示したい内容からconditional tagを選ぶ
判定するのは「homeという名前のpageか」ではなく、どの種類のpageへ出したい内容かです。
<?php if ( is_front_page() ) : ?>
<section class="main-visual">
<h1>事業の案内</h1>
</section>
<?php endif; ?>
<?php if ( is_home() ) : ?>
<h1>お知らせ</h1>
<?php endif; ?>
この例では、先頭URLに表示する事業案内はis_front_page()で、投稿一覧の見出しはis_home()で分けています。最新投稿を先頭に表示する設定では両方がtrueになるので、二つの表示が同時に出ます。それが不要なら、設定を固定pageへ変える前に、先頭URLで両方がtrueになる場合も確認します。
二つの条件を組み合わせるときも、条件式を複雑にすることが目的ではありません。先頭URLが最新投稿の一覧なのか、固定pageなのかという表示上の違いを、themeへ伝えるために使います。条件を増やしても、先頭pageの役割が決まっていなければ、どの部分を出すべきかは判断できません。先に画面に出す内容を決め、必要な条件だけを使います。
条件分岐を外部の制作者へ依頼する場合は、is_front_page()やis_home()という名前だけを渡しません。先頭URLに出す内容、投稿一覧に出す内容、最新投稿を先頭にした場合の見え方、固定pageを先頭にした場合の見え方を伝えます。codeを書ける人が、siteのnewsをどこから読ませるかまで決める必要はありません。表示の役割をsite側で決めてから実装を頼みます。
先頭URLだけで、最新投稿を出す場合と固定pageを出す場合をさらに分けたいときは、二つの結果を組み合わせます。
<?php if ( is_front_page() && is_home() ) : ?>
<p>先頭URLで最新投稿を表示しています。</p>
<?php elseif ( is_front_page() ) : ?>
<p>先頭URLで固定pageを表示しています。</p>
<?php elseif ( is_home() ) : ?>
<p>投稿一覧pageを表示しています。</p>
<?php endif; ?>
設定を替える前に三つのURLを確認する
Reading Settingsを変える作業と、themeの条件分岐を直す作業は分けます。設定だけを替えると、themeが想定していた内容が別のpageへ出ることがあります。
- 先頭URLへ何を出すかを決める。
- 最新投稿の一覧を先頭URLへ出すか、別の投稿pageへ出すかを決める。
is_front_page()で出すpartsと、is_home()で出すpartsを書き出す。- 先頭URL、投稿page、通常の固定pageをそれぞれ開く。
- title、main visual、投稿一覧、page navigationが重複または欠落していないか確認する。
投稿pageに指定した固定pageは、通常の固定pageと同じように本文を使うとは限りません。投稿一覧として出す内容と、固定pageの編集欄へ書いた文章を同じものと考えず、実際の表示を確認します。themeの変更を外部へ任せる場合も、先頭URLと投稿pageをどのように分けるかはsite側で決めておきます。
三つのURLを確認するときは、先頭URLと投稿pageだけを開いて終えません。通常の固定pageも開き、先頭page用のmain visualや投稿一覧用の見出しが誤って出ていないかを見ます。さらに記事の個別pageを開き、投稿一覧用のpage navigationやarchive用の文章が混ざっていないかを確認します。条件を直すと、似たtemplateを使う別のURLにも影響することがあります。
menuも設定変更の影響を受けます。以前は先頭URLを押せば最新投稿の一覧が見えたのに、固定pageへ替えた後も同じlinkだけを置くと、newsを読みに行く入口が分かりません。header、footer、sidebar、記事末のlinkから、投稿pageへ進めるかを確認します。先頭pageを整えることと、投稿を更新し続けられる導線を残すことは別の作業です。
変更後に画面が崩れた場合は、Reading Settingsを戻す前に、設定を替えた時刻、themeで直したfile、出ているURL、重複または欠落した部分を記録します。設定だけを戻して一時的に表示が直ると、どの条件が足りなかったかが残りません。復旧を急ぐ場合でも、何を戻したかを分けて書きます。
最初に決めるのは、先頭URLで利用者にしてほしいことと、投稿一覧で読ませたい情報です。この二つを別に書けば、is_front_page()とis_home()を名前の印象で選ばずに済みます。設定を替えた後は、先頭URL、投稿page、通常の固定page、記事pageを開き、役割どおりの内容が出ているかを確認します。
関連記事

