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

投稿日 : 2019年09月04日   更新日 : 2020年05月24日
カテゴリー : 技術情報 / PHP/javascript/CSS/nodejs / Wordpress
is_home(), is_front_page(), is_single()の違いの画像

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

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()としなければならない

ソースレビュー企画-私にソースレビューをさせてください!-

皆様のプログラムのソースを、私に読ませてください!

ソースレビュー企画-私にソースレビューをさせてください!-

プログラムを勉強し始めたばかりの方から、業界云十年のベテランの方でも大歓迎です!どんなソースでもありがたく拝見します!

※無料です

ソースレビュー企画-私にソースレビューをさせてください!-の詳細、お申し込みはこちらからお願いします。

運営サイト紹介

みんなのきょうのごはん-みんごは-

みんなのきょうのごはん-みんごは-

「みんなのきょうのごはん-みんごは-」きょうのみんなのごはんは?Twitterに投稿された美味しそうな「食べ物」画像を、リアルタイムで表示します。

みんごははここからアクセスしてね !

その他広告