WordPressを使ってサイトやブログを構築する際、例えば「一覧と詳細でサイドコンテンツを変えたい」とか「カテゴリーによって表示内容をガラッと変えたい」のように「○○の時に○○する」といったことをしたい場合に用いるのが条件分岐です。
WordPressには便利な条件分岐タグが沢山用意されており、それらを用いることで様々なことができるので、先述したように特定の条件で何か処理を行うカスタマイズをしたい方は参考にしてみてください。

条件分岐の使い方

条件分岐とは、簡単に説明すると「指定された条件に合うか・合わないかを判断し、判断に応じて処理を行う」というものになり、例えばWordPressの場合であればこれを利用することによって、同じテンプレートを使用していても条件に応じて全く違う見栄えにしたり、処理を行うといったことが可能です。

条件分岐にはswitch文というものもありますが、ここで紹介しているのはいずれもif文を用いた形のもので、紹介している形で記述することで条件に応じて処理をそれぞれ異なるものにできます。

条件がひとつ #1

例として特定のページで何らかの処理をしたいとき、「条件1」の箇所に特定のページを指定して、あとは処理内容を記述すれば指定した特定のページのみで処理を実行させることができます。

<?php if ( 条件1 ) : ?>
  // 条件1に該当する場合の処理
<?php endif; ?>


<?php
  if ( 条件1 ) {
    // 条件1に該当する場合の処理
  }
?>

条件がひとつ #2

先ほどと同様に条件はひとつの場合ですが、処理が複数ある場合に利用します。
例えば、先ほどと同様に「条件1」の箇所に特定のページなどを指定して処理内容を記述すれば指定した特定のページのみで処理を実行させることができますが、さらにそれ以外のページでも何かをしたいというときには「条件1に該当しない場合の処理」の箇所に処理を記述することで実装することができます。

<?php if ( 条件1 ) : ?>
  // 条件1に該当する場合の処理
<?php else: ?>
  // 条件1に該当しない場合の処理
<?php endif; ?>


<?php
  if ( 条件1 ) {
    // 条件1に該当する場合の処理
  } else {
    // 条件1に該当しない場合の処理
  }
?>

条件が複数の時 #1

条件が複数ある場合は下記のように記述します。
例えば、カテゴリーページでカテゴリーによって見た目や処理などを変えたいという場合に、「条件1」や「条件2」の箇所には各カテゴリーのスラッグやIDを指定しつつそれぞれの処理を記述していけば、カテゴリー毎に違う見た目や処理を実装することができます。

<?php if ( 条件1 ) : ?>
  // 条件1に該当する場合の処理
<?php elseif ( 条件2 ) : ?>
  // 条件1に該当せず 且つ 条件2に該当する場合の処理
<?php elseif ( 条件3 ) : ?>
  // 条件1・2に該当せず 且つ 条件3に該当する場合の処理
<?php endif; ?>


<?php
  if ( 条件1 ) {
    // 条件1に該当する場合の処理
  } elseif ( 条件2 ) {
    // 条件1に該当せず 且つ 条件2に該当する場合の処理
  } elseif ( 条件3 ) {
    // 条件1・2に該当せず 且つ 条件3に該当する場合の処理
  }
?>

全く違うものになるのであれば専用テンプレート作る方が好ましいとは思いますが、ほんの一部だけ変更するだけであればこちらの方法を使うことでひとつのテンプレートで条件によって見た目や処理を変えることができます。

条件が複数の時 #2

こちらも先ほどと同様に条件が複数ある場合の記述になるのですが、どの条件にも該当しない場合の処理も行いたい場合は下記のようにelseも用いて記述します。

<?php if ( 条件1 ) : ?>
  // 条件1に該当する場合の処理
<?php elseif ( 条件2 ) : ?>
  // 条件1に該当せず 且つ 条件2に該当する場合の処理
<?php else : ?>
  // どちらにも該当しない場合の処理
<?php endif; ?>


<?php
  if ( 条件1 ) {
    // 条件1に該当する場合の処理
  } elseif ( 条件2 ) {
    // 条件1に該当せず 且つ 条件2に該当する場合の処理
  } else {
    // どちらにも該当しない場合の処理
  }
?>

論理演算子を使う

上記で簡単に条件分岐の使い方を紹介してきましたが、さらに論理演算子というものを利用することで条件から外れた場合のみを指定したり、複数の条件を指定するといったことが可能になります。
ここで紹介する以外にも種類はありますが、とりあえず下記3つは使用頻度が高めだと思うので覚えておいて損はないと思います。

and または &&

条件1 および 条件2が共にTRUEの場合にTRUE」というものになり、条件を複数指定したいときに使えます。

<?php if ( 条件1 && 条件2 ) : ?>
  // ここに処理
<?php endif; ?>

or または ||

条件1 または 条件2のどちらかがTRUEの場合にTRUE」というものになり、例えば同じ処理なのに複数の条件で実装したいからとelseifをいくつも記述しているような場合は、これを使うことで何度も記述することなくシンプルな記述で実装することができます。

<?php if ( 条件1 || 条件2 ): ?>
  // ここに処理
<?php endif; ?>

具体的な使用例として「個別投稿ページ または 固定ページの場合に〇〇をする」としたい場合に、下記のように記述することで実装できます。

<?php if ( is_single() || is_page() ) : ?>
  // 個別投稿ページ 又は 固定ページの場合に実装したい処理
<?php endif; ?>

!

条件がTRUEでない場合にTRUE」というものになり、例えば全ページで実装するけれど特定のページでは実装したくないなどの使い方ができます。

<?php if ( ! 条件 ): ?>
  // ここに処理
<?php endif; ?>

具体的な使用例として「固定ページ以外で○○をする(固定ページでは○○しない)」としたい場合に、下記のように条件の前に!を記述することで実装できます。

<?php if ( ! is_single() ) : ?>
  // 固定ページ以外で実装したい処理(固定ページで実装したくない処理)
<?php endif; ?>

演算子を用いた例文はCodexにも少し掲載されているので、使ったことがない人はこちらも参考になると思います。

条件分岐タグ

WordPressで用意されている条件分岐タグの中から、個人的によく使うものやよく使われると思うものを並べてみました。

is_home()

メインブログページが表示されている場合。

is_front_page()

サイトのフロントページが表示されている場合。

is_single()

個別投稿ページが表示されている場合で、パラメータを指定することも可能です。
例えばif ( is_single( '10' ) )のように記述することで「個別投稿ページ 且つ IDが10」といった条件になり、他にもスラッグやタイトルの指定をしたりパラメータを複数指定することもできます。

is_sticky()

記事投稿画面にある「この投稿を先頭に固定表示」にチェックが入っている投稿が表示されている場合で、パラメータにIDを指定することが可能です。

is_page()

固定ページが表示されている場合で、is_single()と同じような形でパラメータを指定することも可能です。
例えばif ( is_page( '3' ) )のように記述することで「固定ページ 且つ IDが3」といった条件になり、特定の固定ページにのみ何か別の処理を行うことができます。

is_category()

カテゴリーページが表示されている場合で、IDやスラッグによるパラメータ指定も可能です。
例えばカテゴリーによって全く違う見せ方したい時や各カテゴリーページにアイキャッチのような画像を置きたい時などに使えます。

is_tag()

タグのアーカイブページが表示されている場合で、パラメータ指定すればもっと限定させることができます。

is_archive()

各アーカイブページが表示されている場合で、パラメータ指定すればもっと限定させることができます。

is_search()

検索結果のページが表示されている場合。
例えば見た目は一覧とほとんど変わらず、検索ワードや検索ヒット数を出力させたい時に使えます。

is_404()

404(エラーページ)が表示されている場合。

is_paged()

表示中のページが複数ページにわたる場合。

is_singular()

これまで紹介してきたものと少しだけ違うタイプで、こちらはis_single(), is_page(), is_attachment()のいずれかが真の場合にというものです。

is_tax()

タクソノミーのアーカイブページが表示されている場合で、パラメータ指定すればもっと限定させることができます。

is_post_type_archive()

カスタム投稿のアーカイブページが表示されている場合で、パラメータ指定すればもっと限定させることができます。

is_preview()

プレビュー時にのみ処理をしたいときに使えます。

wp_is_mobile()

ユーザーがモバイルデバイスで閲覧しているときに処理を行いたい場合に使えます。

もしwp_is_mobile()では意図した動きになってくれない場合は、条件となるデバイスなども自分で細かく指定したオリジナルの関数を作って代用すれば意図した形で実装でき、方法については以前備忘録として書いているので参考にしてみてください。

$is_iphone, $is_chrome, $is_IE ... etc

こちらはまだ実際に使ったことがないんですが、WordPressにはブラウザのユーザエージェントを調べて条件分岐させることができるものも用意されており、例えば$is_iphoneならばiPhoneかどうか、$is_IEならIEかどうかという形で、これらを利用することでブラウザ毎に処理をわけることができます。
その他にどのようなものがあるかは以下で確認できます。

is_super_admin()

ユーザーがネットワークの特権管理者かどうかをチェックするもので、管理者の場合のみ表示させたいものなどある場合に便利です。

is_user_logged_in()

会員サイトなどのようにログイン時と非ログイン時とで処理を分けたい場合に使えます。
また、上で紹介したis_super_admin()でも同じようなことができますが、みぞれさんが「[WordPress]稼働中のテーマに手を加えたい時に!囲った部分がログインユーザにしか見えなくなるテンプレートタグ|ウェビメモ」で紹介しているように、稼働中のWordPressでテーマをほんの少しいじったりしたいときなどにも便利です。

 

上記で条件分岐タグを沢山紹介してきましたがここにあるのはまだほんの一部で、作成者アーカイブの場合に使うis_author()や日付別アーカイブの場合に使うis_date()、アイキャッチや小テーマが使われているかどうかなど、他にも便利な条件分岐タグが多数用意されています。

その他どのような条件分岐タグがあるのか気になる方や条件分岐タグについての詳細を知りたい方は、以下よりそれぞれ確認できます。


以上、WordPressをカスタマイズするなら覚えておきたい条件分岐について紹介しました。
大幅に内容や見た目が異なる場合などは条件分岐ではなくテンプレート自体を分けたほうがわかりやすかったり実装しやすいということもありますが、少しだけであればこのような条件分岐を使ってひとつのテンプレートで様々な場面で見栄えを変更したりするのも容易にできて非常に便利です。
これからWordPressを使ってみようと思っている方や最近使い始めたという方は覚えておいて損はないと思います。