• WordPressのis_front_page()とis_home()はsiteの先頭pageと投稿一覧を分けて使う

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へ出ることがあります。

  1. 先頭URLへ何を出すかを決める。
  2. 最新投稿の一覧を先頭URLへ出すか、別の投稿pageへ出すかを決める。
  3. is_front_page()で出すpartsと、is_home()で出すpartsを書き出す。
  4. 先頭URL、投稿page、通常の固定pageをそれぞれ開く。
  5. 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を開き、役割どおりの内容が出ているかを確認します。

戻る