is_home() と is_front_page() の違い:表示設定ごとにどちらが true になるか

コラム
広告WordPress・PHP を学べる本

Amazonのアソシエイトとして、WordPress functions.phpは適格販売により収入を得ています。

概要説明

WordPress の is_home() と is_front_page() の違いを、「ホームページの表示」の設定ごとに表で比べました。投稿の一覧だけ・トップだけに出す例と、pre_get_posts で一覧の内容を変えるときの書き方も紹介します。

WordPress でトップページだけに何かを出したいとき、is_home() と is_front_page() のどちらを使うかで迷うことがあります。名前は似ていますが、見ているものが違うので、「設定」→「表示設定」の「ホームページの表示」によって結果が変わります。この記事では、設定ごとにどちらが true になるかを表にまとめ、使い分けの例を紹介します。

2 つの関数が見ているもの

is_front_page() は「サイトのトップ(https://example.com/)を開いているか」を見ます。is_home() は「投稿の一覧のページ(ブログのページ)を開いているか」を見ます。トップに投稿の一覧を出している間は 2 つが同じページを指すので違いに気づきにくく、固定ページをトップにしたときに差が出ます。

表示設定ごとの結果

ホームページの表示 開いているページ / is_front_page() / is_home()
最新の投稿 開いているページ:トップ(投稿の一覧)is_front_page():trueis_home():true
固定ページ 開いているページ:トップ(「ホームページ」に選んだ固定ページ)is_front_page():trueis_home():false
固定ページ 開いているページ:「投稿ページ」に選んだ固定ページ(投稿の一覧)is_front_page():falseis_home():true
どちらでも 開いているページ:記事・ほかの固定ページ・カテゴリーなどis_front_page():falseis_home():false

「固定ページ」にして「投稿ページ」を選ばなかったときは、投稿の一覧のページそのものがないので、is_home() が true になるページはありません。

使い分けの例

投稿の一覧のページだけに出す:is_home()

ブログの一覧の上にだけ案内を出したいときは is_home() を使います。トップを固定ページにしていても、「投稿ページ」の一覧で動きます。

if (is_home()) {
    echo '最新の投稿をチェックしてください!';
}

サイトのトップだけに出す:is_front_page()

キャンペーンの案内など、トップを開いた人だけに見せたいときは is_front_page() を使います。トップが投稿の一覧でも固定ページでも、トップでだけ動きます。

if (is_front_page()) {
    echo '特別オファー中!';
}

投稿の一覧に出す投稿タイプを変える:pre_get_posts

一覧に出す投稿そのものを変えるときは、テンプレートで条件分岐するより、pre_get_posts でメインクエリを書きかえるのが確実です。このときは関数の is_home() ではなく、渡されたクエリの $query->is_home() を使い、管理画面とメインクエリ以外には効かないようにします。custom_post_type の所は、表示したい投稿タイプの名前に置きかえてください。

function custom_homepage_query($query) {
    if (!is_admin() && $query->is_home() && $query->is_main_query()) {
        $query->set('post_type', 'custom_post_type'); // ここで表示したい投稿タイプを指定
    }
}
add_action('pre_get_posts', 'custom_homepage_query');

テンプレートの選ばれ方も同じ考え方

テーマのテンプレートも、この 2 つと同じ分け方で選ばれます。トップでは front-page.php があればそれが使われ、投稿の一覧のページでは home.php が使われます。「最新の投稿」の設定でトップに home.php の見た目を使いたいのに front-page.php が出てしまうときは、このしくみが原因です。

まとめ

テーマの中で is_home() を使っている所を探し、「ホームページの表示」を「固定ページ」に変えたときに、トップで動かなくなる処理がないかを見ます。見つかったら、トップで出したいものは is_front_page() に書きかえます。

参考

SiteBeacon(サイトビーコン)

サイトが止まったら、すぐに気づける。

ホームページを 5 分ごとにチェックして、止まったとき・エラーが出たとき・SSL やドメインの期限が近いときに、メールでお知らせします。2 サイトまでは、ずっと無料で使えます。

SiteBeacon を見る サイトを直す相談をする

監視で気づいたあとの直す作業も、同じ担当がお受けします。