閉じる

WordPressの条件分岐 is_front_page と is_single の使い方:実装コードと注意点を解説

WordPressでウェブサイトを構築する際、特定のページだけに特定のコンテンツを表示させたい場面は非常に多く存在します。

例えば、トップページだけに巨大なメインビジュアルを表示させたり、投稿ページだけに広告やSNSシェアボタンを配置したりといったカスタマイズです。

このような動的な表示の切り替えを実現するために不可欠なのが、WordPressに標準で備わっている「条件分岐タグ」という仕組みです。

今回は、数ある条件分岐タグの中でも特によく使われるis_front_pageis_singleに焦点を当てて解説します。

これらのタグを正しく理解して使い分けることで、テンプレートファイルの共通化を図りつつ、柔軟なサイト設計が可能になります。

初心者の方でも迷わず実装できるように、具体的なコード例を交えながらその使い方と注意点を詳しく説明していきます。

WordPressの条件分岐タグとは

WordPressの条件分岐タグとは、現在表示されているページが「どの種類のページか」を判定するための関数です。

これらの関数は、判定結果が正しい場合にはtrue(真)を、そうでない場合にはfalse(偽)を返します。

PHPのif文と組み合わせることで、「もしトップページならこの処理をする」といったプログラムを書くことができます。

WordPressにはページの種類ごとに多くのタグが用意されており、投稿、固定ページ、カテゴリー一覧、アーカイブなど細かく指定が可能です。

条件分岐を活用することで、一つのテンプレートファイルを複数のページで使い回しながら、部分的に表示内容を変えることができます。

これにより、コードの管理が容易になり、サイト全体のメンテナンス性が大幅に向上します。

is_front_pageの使い方:サイトの顔を判定する

is_front_pageは、現在表示されているページがサイトのフロントページ(最上位のトップページ)であるかどうかを判定するタグです。

WordPressの設定により、フロントページが「最新の投稿」を表示している場合でも、「固定ページ」を表示している場合でも機能します。

is_front_pageの基本的な記述方法

最もシンプルな使い方は、header.phpなどでメインビジュアルの表示を切り替えるケースです。

以下のコードは、フロントページの場合のみ特別なメッセージを表示する例です。

PHP
<?php
if ( is_front_page() ) {
    // フロントページでのみ実行される処理
    echo '<h1>ようこそ!公式サイトへ</h1>';
}
?>
実行結果
<h1>ようこそ!公式サイトへ</h1>
(※フロントページを表示している場合のみ出力されます)

is_homeとの決定的な違い

is_front_pageと混同されやすいタグにis_homeがあります。

この2つの違いを正しく理解しておくことは、意図しない表示トラブルを防ぐために非常に重要です。

is_homeは「投稿一覧ページ」を表示しているときにtrueを返します。

WordPressの管理画面にある「設定 > 表示設定」で、ホームページの表示を「最新の投稿」にしている場合、is_front_pageis_homeは両方ともtrueになります。

しかし、ホームページの表示を「固定ページ」に設定し、別のページを「投稿ページ」に指定した場合は挙動が変わります。

設定状況表示ページis_front_pageis_home
最新の投稿を表示サイトトップtruetrue
固定ページをフロントに設定サイトトップtruefalse
固定ページをフロントに設定投稿一覧ページfalsetrue

一般的に「サイトの入り口であるトップページ」を判定したい場合は、is_front_pageを使用するのが最も安全です。

is_front_pageの実用的な活用シーン

フロントページだけで読み込みたいCSSやJavaScriptがある場合、functions.phpで以下のように記述します。

これにより、不要なページでスクリプトが読み込まれるのを防ぎ、サイトの表示速度を高速化できます。

PHP
function my_enqueue_scripts() {
    if ( is_front_page() ) {
        // フロントページ専用のCSSを読み込む
        wp_enqueue_style( 'front-page-style', get_template_directory_uri() . '/css/front-page.css' );
    }
}
add_action( 'wp_enqueue_scripts', 'my_enqueue_scripts' );

is_singleの使い方:個別投稿ページを判定する

is_singleは、現在表示されているページが個別の投稿ページであるかどうかを判定するタグです。

なお、固定ページ(page)や添付ファイルページ(attachment)はこの判定には含まれません。

ブログ記事の本文下に関連記事を表示したり、特定のカテゴリーの記事にだけ特定の広告を出したりする際に重宝します。

引数なしでの基本的な使い方

引数を指定せずにis_single()と記述すると、すべての個別投稿ページでtrueを返します。

PHP
<?php
if ( is_single() ) {
    // すべての投稿ページで表示したい内容
    echo '<p>この記事が気に入ったらシェアしてください!</p>';
}
?>

特定の投稿を指定する方法

is_singleには引数を渡すことで、特定の投稿だけをピンポイントで判定できます。

引数には「投稿ID」「投稿タイトル」「投稿スラッグ」のいずれか、あるいはそれらを配列で指定することが可能です。

PHP
<?php
// 投稿IDが17の場合
if ( is_single( 17 ) ) { ... }

// 投稿スラッグが 'hello-world' の場合
if ( is_single( 'hello-world' ) ) { ... }

// 投稿タイトルが 'こんにちは' の場合
if ( is_single( 'こんにちは' ) ) { ... }

// IDやスラッグを複数指定する場合(配列)
if ( is_single( array( 17, 'web-design', 'news-update' ) ) ) { ... }
?>

保守性の観点からは、管理画面から変更されにくい「投稿ID」や「投稿スラッグ」での指定が推奨されます。

is_singleとis_singularの違い

よく似た名前の関数にis_singularがありますが、これらは判定範囲が異なります。

is_singleは「投稿」に限定されますが、is_singularは「投稿」「固定ページ」「カスタム投稿タイプ」のすべてを網羅します。

「投稿も固定ページも、とにかく詳細ページであれば何でも」という場合にはis_singularを使用しましょう。

is_front_page と is_single を組み合わせた実装テクニック

実際のサイト制作では、複数の条件分岐を組み合わせて複雑なロジックを組むことがよくあります。

論理演算子(&&||!)を用いることで、表示条件をより細かく制御できます。

パンくずリストの表示制御

パンくずリストは、一般的にトップページには不要であり、詳細ページ(投稿ページ)などには必要です。

以下のコードは、フロントページ以外、かつ個別投稿ページの場合のみパンくずリストを呼び出す例です。

PHP
<?php
if ( ! is_front_page() && is_single() ) {
    // フロントページではなく、かつ投稿ページの場合のみ実行
    get_template_part( 'parts/breadcrumb' );
}
?>

ここで使用している!(エクスクラメーションマーク)は「否定」を意味します。

つまり、! is_front_page() は「フロントページではない場合」という条件になります。

サイドバーのウィジェット切り替え

サイドバーの内容を、トップページと投稿ページでガラリと変えたい場合も条件分岐が有効です。

PHP
<aside id="sidebar">
    <?php if ( is_front_page() ) : ?>
        <!-- フロントページ用サイドバー -->
        <div class="widget">注目コンテンツ</div>
    <?php elseif ( is_single() ) : ?>
        <!-- 投稿ページ用サイドバー -->
        <div class="widget">最新記事一覧</div>
        <div class="widget">カテゴリー一覧</div>
    <?php else : ?>
        <!-- それ以外のページ用サイドバー -->
        <div class="widget">検索フォーム</div>
    <?php endif; ?>
</aside>

実装時の注意点とトラブルシューティング

条件分岐タグが正しく動作しない場合、いくつかの典型的な原因が考えられます。

特に初心者の方が陥りやすいポイントを整理しましたので、実装前に確認しておきましょう。

ループの外での使用とGlobal $postの影響

is_singleなどのタグは、基本的にWordPressの「メインクエリ」に基づいています。

しかし、functions.php内の特定のフックなどで使用する場合、期待通りの結果が得られないことがあります。

これは、タグが実行されるタイミングでまだグローバルな投稿オブジェクトがセットアップされていないためです。

特にwp_enqueue_scriptsより早い段階のフックでは、条件分岐タグが正しく動作しない可能性があることに注意してください。

カスタム投稿タイプの場合

is_singleは標準の「投稿」を判定しますが、カスタム投稿タイプ(例:施工事例、商品情報など)の場合は注意が必要です。

カスタム投稿タイプの詳細ページを判定するには、is_singular( 'カスタム投稿タイプ名' ) を使用するのが一般的です。

もしis_singleでカスタム投稿を判定したい場合は、is_single( '投稿のスラッグ' ) のように引数を指定する必要があります。

キャッシュプラグインの影響

強力なページキャッシュプラグインを導入している場合、条件分岐の結果がキャッシュされてしまうことがあります。

例えば、ログインユーザーにだけ特別なメッセージを出す処理を書いたとしても、非ログイン状態のキャッシュが表示されてしまうといった不具合です。

条件分岐を多用するサイトでは、キャッシュの設定や動作確認を念入りに行うようにしましょう。

まとめ

本記事では、WordPressのカスタマイズに欠かせないis_front_pageis_singleの使い方について解説しました。

is_front_pageはサイトの顔であるトップページを判定し、is_singleは各記事の詳細ページを判定します。

特にis_front_pageis_homeの違いは、設定によって挙動が変わるため、開発時には必ず意識すべきポイントです。

また、これらを否定演算子や論理演算子と組み合わせることで、複雑なレイアウトの出し分けもシンプルに記述できます。

条件分岐をマスターすることは、ユーザーにとっても最適化された、利便性の高いWebサイトを作るための第一歩です。

今回紹介した実装コードを参考に、ご自身のWordPressテーマをより高度にカスタマイズしてみてください。

正しく条件分岐を活用して、効率的で美しいコードを目指しましょう。

URLをコピーしました!