WPコーディングメモ:ページによって表示/非表示を切り替える条件分岐

WPコーディングメモ:ページによって表示/非表示を切り替える条件分岐

WordPressでサイトを運営していると、トップページと2ページ目以降で表示内容を変えたいことがある。例えば、トップページにだけスライダーやピックアップ記事を表示したり、逆に2ページ目以降にだけ特定のバナーを表示したり。複雑そうに聞こえて実はこれって意外と簡単で…けどすぐ忘れちゃう。

今回は自分用の備忘録として、WordPressのトップページと2ページ目以降、さらにカテゴリーページや検索結果ページなど、様々なケースでの条件分岐テクニックをまとめておく。後で「あれ?どうやるんだっけ?」ってなったとき用。

目次

    WordPressのページネーションと条件分岐の基本

    まず、WordPressでページによって表示を切り替えるには、テンプレートファイル内で条件分岐タグを使う。これらのタグは、現在表示しているページの種類や状態を判断してくれる優れもの。

    主な条件分岐タグには次のようなものがある。

    • is_front_page() – フロントページ(トップページ)かどうか
    • is_home() – 投稿一覧のホームページかどうか
    • is_paged() – ページネーションの2ページ目以降かどうか
    • is_category() – カテゴリーアーカイブページかどうか
    • is_tag() – タグアーカイブページかどうか
    • is_search() – 検索結果ページかどうか

    これらを組み合わせることで、様々なパターンの条件分岐が可能になる。覚えておくと本当に便利だ。

    トップページと2ページ目以降で表示を切り替える方法

    まずは実際によくあるケースから。トップページ(1ページ目)にはスライダーやピックアップコンテンツを表示し、2ページ目以降では非表示にしたい場合。

    トップページにのみ表示するコンテンツ

    <?php if( is_front_page() && !is_paged() ): ?>
      <!-- ここにトップページの1ページ目だけに表示したいコンテンツを記述 -->
      <div class="top-slider">
        <!-- スライダーコンテンツ -->
      </div>
    <?php endif; ?>

    この条件分岐は、is_front_page()!is_paged()の両方がtrueのときだけコンテンツを表示する。つまり「フロントページかつ1ページ目」という条件だ。

    2ページ目以降にのみ表示するコンテンツ

    <?php if( is_front_page() && is_paged() ): ?>
      <!-- ここにトップページの2ページ目以降だけに表示したいコンテンツを記述 -->
      <div class="pagination-notice">
        <p>過去の記事をご覧いただいています</p>
      </div>
    <?php endif; ?>

    こちらは「フロントページかつ2ページ目以降」という条件になる。例えば、2ページ目以降に「過去の記事をご覧いただいています」といった通知を表示したり、特定のバナーを出したりするのに使える。

    特定のアーカイブページでの表示制御

    次に、アーカイブページと他のページタイプで表示を切り替える方法。

    アーカイブページにのみ表示するコンテンツ

    <?php if( is_archive() && !is_category() && !is_tag() ): ?>
      <!-- カテゴリーページとタグページ以外のアーカイブページにだけ表示したいコンテンツ -->
      <div class="archive-description">
        <p>月別アーカイブページです</p>
      </div>
    <?php endif; ?>

    これは「アーカイブページだけど、カテゴリーページでもタグページでもない」という条件。主に日付別アーカイブページなどに特定のコンテンツを表示したい場合に使える。

    カテゴリーページにのみ表示するコンテンツ

    <?php if( is_category() ): ?>
      <!-- カテゴリーページにだけ表示したいコンテンツ -->
      <div class="category-description">
        <h3>カテゴリー: <?php single_cat_title(); ?></h3>
        <p><?php echo category_description(); ?></p>
      </div>
    <?php endif; ?>

    特定のカテゴリーページだけに表示したい場合は、さらに条件を追加できる。

    <?php if( is_category('wordpress') ): ?>
      <!-- WordPressカテゴリーページにだけ表示したいコンテンツ -->
    <?php endif; ?>

    特定のカテゴリーIDで判定する方法

    カテゴリー名だと将来変更される可能性があるので、IDで指定するほうが安全な場合もある。

    <?php if( is_category(5) ): ?>
      <!-- カテゴリーID 5のページにだけ表示したいコンテンツ -->
    <?php endif; ?>

    検索結果ページとカテゴリーページの表示制御

    検索結果ページには表示したくないけど、アーカイブページには表示したいというケースも多い。

    検索結果ページには表示しないコンテンツ

    <?php if( !is_search() ): ?>
      <!-- 検索結果ページ以外で表示したいコンテンツ -->
      <div class="related-posts">
        <!-- 関連記事など -->
      </div>
    <?php endif; ?>

    アーカイブページにのみ表示し、検索結果やカテゴリーページには表示しないコンテンツ

    <?php if( is_archive() && !is_category() && !is_tag() && !is_search() ): ?>
      <!-- 日付ベースのアーカイブページだけに表示したいコンテンツ -->
      <div class="date-archive-notice">
        <p>月別アーカイブをご覧いただいています</p>
      </div>
    <?php endif; ?>

    条件を組み合わせればかなり細かい制御ができるのが分かる。便利なんだけど自分でも使おうとするたびに「あれ?どうだっけ?」となるので、このメモが役立つはず…。

    条件分岐は複雑になればなるほど、テストが重要になります。使用する際は実際のサイトに反映する前に動作確認することを忘れないでください。

    実践的なコード例と応用パターン

    もう少し実践的なコード例を。これらもそのままコピペして使えるものばかりだ。

    ページ番号に基づいた表示制御

    特定のページ番号だけに表示したい場合(例:2ページ目だけに表示)。

    <?php
    $paged = get_query_var('paged');
    if( $paged == 2 ): ?>
      <!-- 2ページ目だけに表示したいコンテンツ -->
      <div class="page-2-special">
        <p>2ページ目限定コンテンツです</p>
      </div>
    <?php endif; ?>

    投稿一覧の最初の投稿だけ大きく表示する

    トップページの1ページ目だけ、最初の投稿を目立たせたい場合。

    <?php if( have_posts() ): ?>
      <?php $post_count = 0; ?>
      <?php while( have_posts() ): the_post(); ?>
        <?php $post_count++; ?>
        
        <?php if( is_front_page() && !is_paged() && $post_count == 1 ): ?>
          <!-- トップページの1ページ目の最初の投稿だけ特別なスタイルで表示 -->
          <article class="featured-post">
            <h2><?php the_title(); ?></h2>
            <div class="featured-thumbnail">
              <?php the_post_thumbnail('large'); ?>
            </div>
            <div class="entry-content">
              <?php the_content(); ?>
            </div>
          </article>
        <?php else: ?>
          <!-- それ以外の投稿は通常表示 -->
          <article class="normal-post">
            <h2><?php the_title(); ?></h2>
            <div class="normal-thumbnail">
              <?php the_post_thumbnail('thumbnail'); ?>
            </div>
            <div class="entry-content">
              <?php the_excerpt(); ?>
            </div>
          </article>
        <?php endif; ?>
        
      <?php endwhile; ?>
    <?php endif; ?>

    記事数が多いカテゴリーだけバナーを表示

    記事数が10以上あるカテゴリーページだけ特別なバナーを表示したい場合。

    <?php 
    if( is_category() ):
      $category = get_queried_object();
      $post_count = $category->count;
      
      if( $post_count >= 10 ): ?>
        <!-- 記事が10件以上あるカテゴリーだけバナーを表示 -->
        <div class="popular-category-banner">
          <p>人気カテゴリー: <?php echo $category->name; ?> (<?php echo $post_count; ?>記事)</p>
        </div>
      <?php endif;
    endif; ?>

    まとめ:条件分岐テクニックの活用ポイント

    WordPressの条件分岐タグを使いこなせば、サイトの見た目をかなり細かく制御できる。特に覚えておきたいポイントは次の通り。

    1. 基本的な条件分岐タグ(is_front_page(), is_home(), is_paged()など)の使い方
    2. 複数の条件を組み合わせる方法(&&でANDの条件、||でORの条件)
    3. 否定条件の使い方(!をつける)
    4. ページ番号の取得方法(get_query_var('paged')

    これらを組み合わせれば、トップページ、アーカイブページ、カテゴリーページ、検索結果ページなど、様々なページタイプで異なる表示を実現できる。

    個人的によく使うのは、トップページの1ページ目だけに特別なコンテンツを表示する条件分岐と、検索結果ページには特定のコンテンツを表示しない条件分岐だ。サイトの見栄えやサイト回遊率を少しでも高めたい場合は試行錯誤して試してみてほしい。

    条件分岐は複雑になりがちなので、このメモを見返して、必要なときにサクッとコードを書けるようになれば…いいな。


    ※この記事(2025/04/11)は自分用の備忘録として作成しました。WordPressのバージョンやテーマによって動作が異なる場合があります。もし使用する際は、必ずテスト環境で動作確認してから本番環境に適用してください。