ホーム > 投稿記事 > is_home(), is_front_page(), is_single()の違い

is_home(), is_front_page(), is_single()の違い

投稿日 : 2019年09月04日   更新日 : 2019年10月04日
カテゴリー : WordPress
is_home(), is_front_page(), is_single()の違いの画像

こんにちわ、PHPエンジニアのエンジニア婦人(@naho_osada)です。
私はPHPエンジニアとして6年~の経験があります。WordPressは2年~の経験があります。
ここでは主に過去に納品した案件や自サイト運営(エンジニア婦人ノート)で遭遇したことについて書いています。

WordPressのテーマをごそごそしていると、トップページだけ云々したい、というときがあります。

トップページかどうかを判定するのに使うタグは「is_front_page()」が多いと思います。

ではis_home()は何のために使うの?というところに迫りたいと思います。

is_front_page()

英語の名称が既に言っているように、「フロントページかどうか」を判定します。

その結果、表示しているページがトップページであればtrue、そうでなければfalseを返します。

分岐で使いますね。

if(is_front_page()) {
    // トップページだけやりたい処理を記述
}

if(!is_front_page()) {
    // トップページ以外でやりたい処理を記述
}

is_home()

こちらも英文からすると「ホームかどうか」を見ています。一見するとis_front_page()と同じ動作をすると思われがち…ですが、実際は違います。

is_home()は「ブログ投稿のトップページかどうか」を見ています。

WordPressでは、表示設定からトップページに「ブログの最新投稿」を表示することができます。

しかし、「トップページに最新の投稿を表示する」設定でis_front_page()でトップページかどうかの判定をさせようとすると、「トップページなのにis_front_page()で判定が無視されている!」となります。

これはis_home()自体が過去の遺物であり、先にあったもので、その後にis_front_page()が追加されたために起きたもののようです。

ちゃんと関数リファレンスにありますね。

参考:関数リファレンス/is_home-WordPress

両者の罠

is_home()は「トップページがブログ投稿インデックスかどうか(トップページに最新の投稿を表示する)を判定する」

is_front_page()は「トップページが静的ページ(固定ページ)かどうかを判定する」

と言い換えられます。

例えば「ブログの最新投稿を表示する」にしているときは以下の動きになります。

if(is_front_page()) {
    // トップページだと判断されないので、実行されない
}

if(!is_front_page()) {
    // ブログ投稿インデックスなので、実行されない
}

…お気づきでしょうか。

そう、ここがまさに「ブログの最新投稿を表示する」に設定しているときに起きる落とし穴です。

「ブログの最新投稿を表示」しているかどうか、というのはis_home()でしか判定できません。is_front_page()では判定できないのです!

そのため、「トップページが固定ページ表示でも、ブログの最新投稿を表示でも、どちらでも処理をしたいよ」というときは以下のように書く必要があります。

if(is_front_page() || is_home()) {
    // トップページに固定ページ表示、ブログの最新投稿を表示で処理
}

if(!is_front_page() || is_home()) {
    // トップページがブログの最新投稿表示のときのみで、かつ固定のトップページ以外で実行
}

if(is_home()) {
    // トップページがブログ最新投稿のときのみ実行
}

WordPressの中で「ブログの最新投稿を表示」というのはそれだけで固有の状態と言えますね。

is_signle()でもis_page()でもなく、更にis_front_page()でもない…is_home()でしか判定されません。

使いどころ

「トップページには記事タイトルと日付を表示したくないけれど、トップページにブログの最新投稿を設定しているときは表示したい」

などのわがままさんの希望に応えます。

if(is_single() || is_home()) {
    // 投稿ページ、またはトップページにブログの最新投稿を表示しているとき
}

上にも書きましたが、ブログの最新投稿を表示しているときは、is_single()扱いされません。

投稿ページではなくトップページ表示、WordPressとしては「ブログ投稿インデックスだから」です

少々ややこしい仕様ではありますが、覚えておくといざというときに使えます。

まとめ

  • is_home()は「トップページがブログ投稿インデックスかどうか(トップページに最新の投稿を表示する)を判定する」
  • is_front_page()は「トップページが静的ページ(固定ページ)かどうかを判定する」
  • is_home()はis_single()とも違うので、両方で動作させたいときはis_home() || is_single()としなければならない

よく使うWordPress関数は使ううちに暗記してしまいます。

たまにわからなくなっていたり、いつの間にか誤認していることがあるので気を付けましょう。

楽しい物造りを

NaoLight

自分のブログやサイトを、楽しく作ってもらえたら。

プログラムを使って望み通りに、拡張しやすく、自分の思うように。

できたときに、すごく楽しい!と思ったら。

控えめに言って、「最高です」。

NaoLight -NAOT-(なおらいと、なおと、と呼んでください)はそんな思いをカタチにする、WordPressのテーマです。

ご購入はこちらからお願いします(BOOTHへ移動します)。

Nao Light-NAOT-公式サイト



この記事にコメントする

入力エリアすべてが必須項目です。承認制のため、表示までに時間がかかる場合があります。

CAPTCHA


内容を確認の上、コメントをお願いします。