【WordPress】PHPによる条件分岐タグの使い方


WordPressには、「条件分岐タグ」と呼ばれる関数があり、それらを使うことで、条件によって出力(表示)の有無をコントロールできます。

投稿ページや固定ページ、特定のカテゴリーごとにデザインを変えることができれば、Webサイトの持つ可能性はさらに広がります。

条件分岐タグを使いこなして、あなたの理想のWebサイトにしてください。

以下で、PHPによる条件分岐タグの使い方をご紹介します。

条件分岐タグの基本

WordPressは、Webサイト制作の自由度を高めるためにさまざまな関数を用意しています。

その中で、重要度の高い関数が条件分岐タグです。

その名のとおり、条件分けに使われるタグのこと。

条件分岐タグの種類

条件分岐タグには、多数の種類があります。

主なものを取り上げると、次のようなものがあります。※出力中とは、PCの画面に表示されている状態のこと

条件分岐タグ名 条件を判断する内容
is_home メインページ(トップページ)の出力中であるかどうか
is_front_page フロントページ(トップページ)の出力中であるかどうか
is_single 個々の投稿ページを出力中であるかどうか
特定の投稿を出力しているかどうか
is_page 個々の固定ページを出力中であるかどうか
特定の固定ページを出力しているかどうか
is_category カテゴリーアーカイブページを出力中であるかどうか
特定のカテゴリーアーカイブページを出力中であるかどうか
in_category 投稿が特定のカテゴリーに属するかどうか
is_tag タグアーカイブページを出力中であるかどうか
特定のタグアーカイブページを出力中であるかどうか
has_tag 投稿に特定のタグが付いているかどうか
is_author ユーザー別のアーカイブページの出力中かどうか
is_sticky StickyPostsを出力中かどうか
特定のStickyPostsを出力中かどうか
is_date 日付系のアーカイブページを出力中であるかどうか
is_year 年別アーカイブページを出力中かどうか
is_month 月別アーカイブページを出力中かどうか
is_day 日別アーカイブページを出力中かどうか
is_time 時別/分別/秒別アーカイブページを出力中かどうか
is_search 検索結果ページを出力中であるかどうか
is_404 404ページを出力中であるかどうか
is_paged 分割されていて、かつ2ページ目以降が出力されているかどうか
get_post_format 投稿フォーマットごとに分ける場合に使われます
cat_is_ancestor_of 2つのカテゴリーの間に親子関係があるかどうか
post_password_required パスワード保護されていて、かつパスワードが未入力かどうか

頻繁に使われるものから、ほとんど使われないものまで、多岐にわたります。

スポンサーリンク

if文の使い方

PHPでは、if文を使って条件を判断します。このif文の中で、「条件分岐タグ」の関数を実行して、条件に応じて、出力を分けることができます。

条件①であれば表示(出力)

if」と「endif」を使います。この書き方がif文の基本。

<?php if(条件①) : ?>
  条件①であれば出力される内容
<?php endif; ?>
”条件①の場合”と”それ以外の場合”で表示

それ以外の場合は、「else」を使います。

<?php if(条件①) : ?>
  条件①であれば出力される内容
<?php else : ?>
  上記の条件でなければ出力される内容
<?php endif; ?>
条件①の場合と条件②の場合に表示

別の条件を記述する場合は、「elseif」を使います。

<?php if(条件①) : ?>
  条件①であれば出力される内容
<?php elseif(条件②) : ?>
  条件②であれば出力される内容
<?php endif; ?>
”条件①の場合”と”条件②の場合”、”それ以外の場合”で表示
<?php if(条件①) : ?>
  条件①であれば出力される内容
<?php elseif(条件②) : ?>
  条件②であれば出力される内容
<?php else : ?>
  上記の条件でなければ出力される内容
<?php endif; ?>

条件の書き方

if文によって書かれる条件の書き方にも、いくつかの種類があります。

次のように、条件分岐タグに論理演算子を組み合わせることで、さらなる条件を定義できます。

【条件分岐タグによく使われる論理演算子】
記述方法 説明
!A Aでない !is_single()
A && B AおよびB is_single() && is_page()
A || B AまたはB is_single() || is_page()

if文で使うと、以下のようになります。

条件に合致しなければ表示

『!』を条件分岐タグの前に追加

<?php if(!条件分岐タグ()) : ?>
  条件が成立した時に出力する内容
<?php endif; ?>
条件Aと条件Bのどちらとも合致すれば、表示
<?php if(A() && B()) : ?>
  条件Aおよび条件Bである場合に出力する内容
<?php endif; ?>
条件Aか条件Bのどちらかに合致すれば表示
<?php if(A() || B()) : ?>
  条件Aまたは条件Bの場合に出力する内容
<?php endif; ?>

3つの条件を重ねることもできます。

条件Aか条件Bか条件Cのどれかに合致すれば表示
<?php if(A() || B() || C()) : ?>
  条件Aまたは条件Bまたは条件Cの場合に出力する内容
<?php endif; ?>

括弧で囲んで、強制的に優先順位をつけることができます。括弧を使うことで、さらに複雑な条件も可能。

条件Aと条件Bの共通部分、または条件Cという条件の場合は次のようになります。

『条件Aおよび条件B(条件Aと条件Bの共通部分)』、または条件Cの場合に表示
<?php if((A() && B()) || C()) : ?>
  『条件Aおよび条件B』、または『条件C』の場合に出力する内容
<?php endif; ?>
スポンサーリンク

条件分岐構文を使ってみよう

実際に使ってみましょう。

投稿ページが出力中である場合に使われる『is_single』の条件分岐タグを使って、説明します。

投稿ページであれば表示
<?php if(is_single()) : ?>
  投稿ページであれば出力される内容
<?php endif; ?>
”投稿ページの場合”と”投稿ページ以外の場合”の2択

<?php else : ?>を追加し、合致しない場合の文を書く

<?php if(is_single()) : ?>
  投稿ページであれば出力される内容
<?php else : ?>
  投稿ページでなければ出力される内容
<?php endif; ?>

複数の条件分岐タグを組み合わせる

なお、複数の条件分岐タグを組み合わせて、細かく条件分岐することもできます。追加する場合、ifではなくelseifを使う。

複数の条件で表示する内容を変える

投稿ページ、固定ページ、カテゴリー・アーカイブページの3条件で、それぞれ表示を変える。

<?php if(is_single()) : ?>
  投稿ページであれば出力される内容
<?php elseif(is_page()) : ?>
  固定ページであれば出力される内容
<?php elseif(is_category()) : ?>
  カテゴリー・アーカイブページであれば出力される内容
<?php endif; ?>
複数の条件で表示する内容を変え、さらにその条件以外の場合に表示する内容も記述する

上記の条件にプラスして、条件に合致しない場合も考慮する。

<?php if(is_single()) : ?>
  投稿ページであれば出力される内容
<?php elseif(is_page()) : ?>
  固定ページであれば出力される内容
<?php elseif(is_category()) : ?>
  カテゴリー・アーカイブページであれば出力される内容
<?php else : ?>
  上記の条件でなければ出力される内容
<?php endif; ?>

論理演算子を使って条件をしぼる

先ほど、説明した論理演算子ですが、実際に使ってみましょう。

投稿ページでなければ表示

『!』を条件分岐タグの前に追加

<?php if(!is_single()) : ?>
  投稿ページではない場合に出力する内容
<?php endif; ?>
投稿ページおよび固定ページであれば表示、さらにカテゴリー・アーカイブページの条件と、その他の条件も追加
<?php if(is_single() &amp;&amp; is_page()) : ?>
  ”投稿ページ”および”固定ページ”であれば、出力される内容
<?php elseif(is_category()) : ?>
  カテゴリー・アーカイブページであれば、出力される内容
<?php else : ?>
  上記の条件でなければ出力される内容
<?php endif; ?>
”投稿ページ”または”固定ページ”または”カテゴリー・アーカイブページ”なら表示

論理演算子は、複数回使えます。

<?php if(is_single() || is_page() || is_category()) : ?>
  ”投稿ページ”または”固定ページ”または”カテゴリー・アーカイブページ”であれば、出力される内容
<?php endif; ?>

if文はもっと簡単に書ける

このページでは、if文を以下の【省略前】にPHPを記述してきましたが、もっと簡単にできます。if文は、{}を使って、省略することができます。閉じタグなどが不要になり、記述は減ります。

省略前
<?php if(is_single()) : ?>
  投稿ページであれば出力される内容
<?php elseif(is_page()) : ?>
  固定ページであれば出力される内容
<?php elseif(is_category()) : ?>
  カテゴリー・アーカイブページであれば出力される内容
<?php else : ?>
  上記の条件でなければ出力される内容
<?php endif; ?>
省略後

{}に注目して確認してください。

<?php if(is_single()) { 
  投稿ページであれば出力される内容 
} elseif(is_page()) { 
  固定ページであれば出力される内容 
} elseif(is_category()) { 
  カテゴリー・アーカイブページであれば出力される内容 
} else { 
  上記の条件でなければ出力される内容 
} 
?>

ちなみに、これ以外にも記述方法はあります。ですが、この2パターンを覚えておけば、問題ないと思います。

スポンサーリンク
ページ先頭へ