【WordPress】トップページにのみ表示する方法|is_front_pageとis_homeの違い・CSS・ウィジェット

バナーやお知らせなどをトップページにだけ表示したいことはよくあります。WordPressでは条件分岐タグ is_front_page() で実現できますが、「ホームページの表示」設定によって is_home() との判定が変わる点が最大のつまずきどころです。この記事では、その違いの整理から、テンプレート・CSS・ウィジェットでの実装までを解説します。

この記事でわかること

  • is_front_page()is_home() の違い(設定で挙動が変わる)
  • テンプレートで条件分岐して表示する
  • CSS(bodyクラス)で見た目だけ切り替える
  • ウィジェットをトップページだけに出す
スポンサーリンク

まず理解する:is_front_page() と is_home() の違い

2つの条件分岐タグは、管理画面の「設定 → 表示設定 → ホームページの表示」によって判定されるページが変わります。

ホームページの表示 is_front_page() is_home()
最新の投稿(既定) トップページで true トップページで true(両方true)
固定ページを指定 フロントに指定した固定ページで true 「投稿ページ」に指定したブログ一覧で true
「サイトの顔」なら is_front_page()
「トップページにのみ表示」の意図がサイトの入り口(フロントページ)なら、設定に関わらず is_front_page() を使えば意図どおりに動きます。is_home() は「ブログ記事一覧のページ」を指すため、固定ページをフロントにしている場合は別のページで true になります。

テンプレートで条件分岐して表示する

テーマのテンプレート(header.phpfront-page.php など)で、is_front_page() を使って出し分けます。

PHP:トップページでのみ表示する
<?php if (is_front_page()) : ?>
  <div class="top-banner">
    <p>このコンテンツはトップページでのみ表示されます。</p>
  </div>
<?php endif; ?>

逆に「トップページ以外で表示」なら if (!is_front_page()) と否定にします。

管理画面の「テーマファイルエディター」での直接編集は避ける
管理画面からのテンプレート編集は、構文エラー1つでサイト全体が表示不能(白画面)になる危険があります。編集は子テーマのファイルをローカルのエディタで行い、FTP等でアップロードするのが安全です。テンプレートの種類は、トップページなら front-page.php(最優先)→ home.phpindex.php の順に使われます。

CSSでトップページだけスタイルを変える

WordPressは body_class() を使うテーマなら、フロントページの <body>home クラスを自動で付与します。これを起点に、CSSだけで表示を切り替えられます。

CSS:トップページだけ表示する
.special-content {
  display: none; /* 通常ページでは非表示 */
}

.home .special-content {
  display: block; /* トップページだけ表示 */
}
CSSの非表示は「隠すだけ」
display: none でもHTMLは全ページに出力されたままです。読み込み量は減らず、ソースを見れば内容も見えます。会員限定情報などの出し分けには使わず、見た目の制御だけに使ってください。確実に出し分けたい場合は前章のPHP条件分岐を使います。

ウィジェットをトップページだけに表示する

ウィジェット単位で出し分けたい場合は、「Widget Logic」などのプラグインでウィジェットごとに is_front_page() の条件を設定するか、トップページ専用のウィジェットエリアを登録して front-page.php だけで読み込む方法があります。実装の詳細はウィジェットエリアを条件付きで出し分ける方法サイドバーウィジェットをページごとに出し分ける方法を参照してください。

関連カスタマイズ

よくある質問(FAQ)

Qis_home() と is_front_page() はどちらを使えばよいですか?
A「サイトの入り口(トップページ)で表示したい」なら is_front_page() です。「ホームページの表示」が最新の投稿なら両方トップページで true になりますが、固定ページをフロントにすると is_home() は「投稿ページ」(ブログ一覧)で true になり、フロントページでは false です。
Qfunctions.php でトップページ判定するとうまく動きません。
A条件分岐タグはクエリ確定後でないと正しく判定できません。functions.php の直下ではなく、wp 以降のフック(wp_headwp_footer など)やテンプレート内で使ってください。
Qウィジェットをトップページにのみ表示するには?
AWidget Logic などのプラグインでウィジェットごとに is_front_page() を条件設定するか、トップ専用のウィジェットエリアを register_sidebar() で登録して front-page.php だけで呼び出します。条件付き出し分けの実装例も参照してください。

まとめ

  • 基本is_front_page() で判定(「入り口」の意図ならこちら)
  • is_home() はブログ一覧の判定。固定ページフロント構成では別ページを指す
  • 見た目だけ.home bodyクラス+CSS(ソースに残る点に注意)
  • ウィジェット:プラグインの条件設定 or 専用ウィジェットエリア
  • 編集は子テーマで:管理画面のテーマファイルエディター直編集は白画面のリスク

まず is_front_page()is_home() の違いを押さえれば、「トップページにのみ表示」は確実に実装できます。