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()
最新の投稿 トップ(投稿の一覧) true true
固定ページ トップ(「ホームページ」に選んだ固定ページ) true false
固定ページ 「投稿ページ」に選んだ固定ページ(投稿の一覧) false true
どちらでも 記事・ほかの固定ページ・カテゴリーなど false 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_front_page() はサイトのトップ、is_home() は投稿の一覧のページ
  • 「最新の投稿」の設定ではトップで両方 true、「固定ページ」の設定では別々のページで true になる
  • 一覧の中身を変えるときは pre_get_posts で $query->is_home() と is_main_query() を確かめる
  • テンプレートは、トップが front-page.php、投稿の一覧が home.php

参考

関連機能

  1. WordPress のアクセス解析:Site Kit by Google の使い方と、プラグインを使わずに GA4 のタグを入れるコード(ほかの解析プラグインとの比べつき)

  2. WordPress の SEO のプラグインの選び方:Yoast SEO・Rank Math・All in One SEO・SEOPress を比べる(入れるのは 1 つだけ)

  3. WordPress の記事を SNS に流す 3 つの方法:共有のボタン・自動投稿のプラグイン・API

サイドバー

よく使うカスタマイズ

最近の記事

Profile

PAGE TOP