【保存版】WordPressで条件分岐をする方法まとめ!これ1記事でマスターしよう

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’]
著者プロフィール
原口 雄一

Webディレクター/コーダー。
webコーダーの経験が約10年あり、webサービスの立ち上げやメディア運営などをやっていました。

会社ではWeb系全般の相談を受けるので、守備範囲は結構広めです。

コーディング初心者の人からの質問も受けるので、参考になればとの想いで当ブログを始めました。

自社サイトはこちら

原口 雄一をフォローする
WordPress

コメント

タイトルとURLをコピーしました