WordPressでカスタマイズをしていると、「このページだけデザインを変えたい」「特定の投稿タイプだけ非表示にしたい」など、条件によって処理を変えたい場面がよくあります。
そんなときに使うのが 「条件分岐(Conditional Tags)」!
この記事では、WordPressでよく使われる条件分岐の方法をパターン別に網羅的に紹介します。
コピペOKなコードも豊富にあるので、ぜひブックマークして活用してください!
条件分岐の基本構文
<?php if ( 条件 ): ?>
// 条件がtrueのときの処理
<?php else: ?>
// それ以外の処理(任意)
<?php endif; ?>
ページ種別による条件分岐
| 関数 | 内容 |
|---|---|
| is_home() | ブログのトップページ(投稿の一覧) |
| is_front_page() | サイトのフロントページ(固定ページ設定のTOPなど) |
| is_single() | 個別投稿ページ(投稿) |
| is_page() | 固定ページ |
| is_archive() | アーカイブ全般(カテゴリ、タグ、日付など) |
| is_category() | 特定のカテゴリページ |
| is_tag() | タグアーカイブ |
| is_search() | 検索結果ページ |
| is_404() | 404エラーページ |
例:固定ページのみで表示
<?php if ( is_page() ): ?>
<p>これは固定ページです</p>
<?php endif; ?>
投稿タイプによる条件分岐
カスタム投稿タイプを使っている場合も分岐できます。
<?php if ( get_post_type() === 'event' ): ?>
<p>イベント投稿のときだけ表示</p>
<?php endif; ?>
固定ページのスラッグ or ID で条件分岐
<?php if ( is_page('about') ): ?>
<p>スラッグがaboutのページ</p>
<?php endif; ?>
<?php if ( is_page(12) ): ?>
<p>IDが12のページ</p>
<?php endif; ?>
投稿のカテゴリによる条件分岐
<?php if ( in_category('news') ): ?>
<p>「news」カテゴリの投稿</p>
<?php endif; ?>
複数カテゴリで判定したいとき:
<?php if ( in_category(array('news', 'blog')) ): ?>
<p>news または blog カテゴリ</p>
<?php endif; ?>
投稿のタグによる分岐
<?php if ( has_tag('pickup') ): ?>
<p>タグ「pickup」が付いている投稿</p>
<?php endif; ?>
カスタムフィールド(ACFなど)で条件分岐
<?php if ( get_field('display_flag') === 'on' ): ?>
<p>カスタムフィールドで表示ON</p>
<?php endif; ?>
ACF(Advanced Custom Fields)を使っている場合によく使います。
ユーザー情報での条件分岐
ログインしているかどうか
<?php if ( is_user_logged_in() ): ?>
<p>ログイン中のユーザーにだけ表示</p>
<?php else: ?>
<p>未ログインユーザー向け</p>
<?php endif; ?>
管理者ユーザーかどうか
<?php
$current_user = wp_get_current_user();
if ( in_array( 'administrator', $current_user->roles ) ) :
?>
<p>管理者だけに表示</p>
<?php endif; ?>
デバイス(スマホ/PC)での条件分岐(PHPだけでは難しい)
WordPressには標準でデバイス判定関数はありません。プラグインを使うか、ユーザーエージェントを用いる方法になります。
例:ユーザーエージェントを使った判定(簡易版)
<?php
$is_mobile = wp_is_mobile();
if ( $is_mobile ):
?>
<p>スマホ用の表示</p>
<?php else: ?>
<p>PC用の表示</p>
<?php endif; ?>
時間・日付での条件分岐
<?php
if ( date('H') >= 18 ):
echo 'こんばんは!';
else:
echo 'こんにちは!';
endif;
?>
ローカル環境・本番環境の分岐
functions.phpなどで環境判定用の定数を設定し、分岐させます。
<?php
if ( $_SERVER['HTTP_HOST'] === 'localhost' ):
echo 'ローカル環境です';
else:
echo '本番環境です';
endif;
?>
条件を組み合わせる
AND / OR を使って複数条件の組み合わせができます。
<?php
if ( is_page('contact') && is_user_logged_in() ):
echo 'ログインユーザーがcontactページにアクセス中';
endif;
?>
条件分岐の注意点
- 条件分岐はテンプレートの表示や処理の最適化に非常に便利
- 条件が複雑になりすぎると、可読性が下がるので関数化を検討
get_post_type()はis_single()より後に呼ばないと意図通り動かないことも
おまけ:よく使う条件分岐スニペット一覧
// 投稿ページ(single)かつ「news」カテゴリ
if ( is_single() && in_category('news') )
// 固定ページかつログイン中
if ( is_page() && is_user_logged_in() )
// カスタム投稿「event」かつ特定のカスタムフィールドがtrue
if ( get_post_type() === 'event' && get_field('is_visible') )
// トップページ or フロントページ
if ( is_home() || is_front_page() )
まとめ
| 投稿・固定ページを判定 | is_single() / is_page() |
| 投稿タイプを判定 | get_post_type() |
| カテゴリ・タグ | in_category() / has_tag() |
| ユーザー状態 | is_user_logged_in() / wp_get_current_user() |
| カスタムフィールド | get_field()(ACF) |
| デバイス | wp_is_mobile() |
| 時間 | date() |
| 本番/ローカル | $_SERVER[‘HTTP_HOST’] |


コメント