【保存版】WordPress条件分岐タグまとめ|よく使う関数と使い方を一覧で解説

1. はじめに

WordPress テーマ開発で「ここはトップページだけデザインを変えたい」「特定の投稿タイプだけサイドバーを非表示にしたい」といった場面はよくあります。そんなときに大活躍するのが 条件分岐タグ (Conditional Tags) です。この記事では、中級者の方向けに 代表的な条件分岐タグを用途別に整理 し、コード例落とし穴 まで網羅しました。ブックマークしておけば、テーマ編集のたびに検索する手間が省けます。

2. よく使う条件分岐タグ一覧(用途別)

🚩 ポイント:以下の h3 見出しをコピーして目次プラグイン用のアンカーにすると UX が上がります。

2‑1. 投稿・ページタイプの判別

この図のように、WordPressではページタイプごとに使う条件分岐タグが異なります。以下の表でそれぞれの関数の特徴を詳しく確認していきましょう。

タグざっくり説明使用例
is_single()単一投稿ページかどうか投稿詳細ページで関連記事を表示
is_page()固定ページかどうか固定ページだけで CTA を変更
is_singular()投稿・固定・ CPT 全部を含む「単体表示」ビルドイン + CPT をまとめて判別
is_home()ブログ一覧 (設定 > 表示で選択)ホームだけアイキャッチを非表示
is_front_page()サイトのフロントページトップだけヒーローヘッダーを表示
is_archive()アーカイブ(一覧)ページ全般一覧ページでグリッド幅を変更
is_single() とは?

is_single() は、URL が単一投稿を指しているとき true を返します。カテゴリーやタグの一覧ページでは false になるので注意。

<?php if ( is_single() ) : ?>
  <!-- 単一投稿ページ用の処理 -->
<?php endif; ?>

▶ 公式ドキュメント – is_single()

2‑2. カテゴリー・タグ・タクソノミー関連

タグざっくり説明使用例
in_category()投稿が 指定カテゴリに属しているニュースカテゴリだけラベル表示
has_category()投稿に カテゴリが付いているか無分類投稿に警告を出す
has_tag()投稿に タグが付いているかタグ未設定の投稿にバッジ
is_category()現在のページが カテゴリアーカイブカテゴリページのタイトル装飾
is_tag()現在のページが タグアーカイブタグ一覧で説明文を差し替え
is_tax()カスタムタクソノミーを含む 汎用タクソノミCPT のタクソノミーで絞り込み
<?php
// ニュースカテゴリ(ID: 3)に属する投稿なら
if ( in_category( 3 ) ) {
  echo '<span class="badge">NEWS</span>';
}
?>

2‑3. 投稿タイプ・カスタム投稿タイプ関連

タグざっくり説明使用例
is_post_type_archive()CPT の アーカイブページイベント CPT 一覧ページを判別
is_singular('event')CPT の 個別ページイベント詳細だけ地図を表示

2‑4. 固定ページや特定 ID の指定

  • is_page('about') … スラッグ
  • is_page(42) … ID
  • is_single(array(1, 2, 3)) … 複数 ID の投稿
<?php if ( is_page(array('about', 'company')) ) : ?>
  <!-- 会社情報関連ページ用 -->
<?php endif; ?>

2‑5. その他便利タグ

タグざっくり説明
is_user_logged_in()ユーザーがログイン済みか
current_user_can()ユーザー権限を判定
is_search()検索結果ページか
is_404()404 ページか

3. コード実践例

3‑1. functions.php で条件分岐

wp_enqueue_scripts フック内で、トップページだけ別の CSS を読み込む例です。

add_action( 'wp_enqueue_scripts', function() {
  if ( is_front_page() ) {
    wp_enqueue_style( 'top-only', get_theme_file_uri( 'css/top.css' ), [], '1.0' );
  }
} );

3‑2. テンプレートファイルで条件分岐

single.php の記事下部に 同一カテゴリの関連記事 を表示します。

<?php if ( have_posts() ) :
  while ( have_posts() ) : the_post(); ?>
    <article>…</article>

    <?php // ── 同一カテゴリの関連記事 START
      if ( in_category( 'news' ) ) {
        get_template_part( 'template-parts/related-news' );
      } else {
        get_template_part( 'template-parts/related-default' );
      }
    ?>

<?php   endwhile;
endif; ?>

3‑3. 条件を組み合わせるテクニック

<?php
if ( ( is_single() || is_page() ) && ! is_front_page() ) {
  // 投稿・固定ページ共通、かつトップページ以外
}
?>

4. よくある注意点・落とし穴

  1. 早すぎるタイミングで判定しない
    • 例: init アクションより前。template_redirect 以降なら安心。
  2. is_page() と is_singular() の混同
    • CPT を含むなら is_singular()、固定ページ限定なら is_page()。
  3. リライトルール変更後はパーマリンクを再保存 しないと 404 になることがある。
  4. キャッシュ系プラグインとの相性
    • ページキャッシュが効いていると、ログイン判定などが想定外に動く。

5. まとめ

条件分岐タグを使いこなせば、1 ファイルのコード量を減らしつつ柔軟なレイアウト切り替え が可能になります。公式リファレンスをこまめにチェックし、テスト環境で挙動を確認 してから本番へ反映するのが安全です。

6. 参考リンク

7. 関連記事