Travelogue

WordPressの条件分岐タグで各ページの表示内容を変更する

公開日:

3年以上前に書いた「WordPressテンプレートを各カテゴリ等で別々に使い分ける」というエントリーでは、表示内容を変えるために別々のテンプレートファイルを用意しておくことを前提に解説しました。もちろんそれはそれでいいんですが、もしそれぞれの違いがほんのちょっとしたことだった場合等、わざわざ別々のテンプレートファイルを用意するのも非効率なのでは?というケースは多々あります。
そんな場合は、別々のテンプレートファイルを用意するのではなく、ひとつのテンプレートファイルの中で条件によって分岐させて表示内容をコントロールしたほうがやりやすいかもしれません。

条件分岐タグ

WordPressには条件分岐タグというのがあります。
イメージしやすいところでは、例えば以下のようなものです。(他にもあります)

  • is_home()
  • is_single()
  • is_page()
  • is_category()

これらはそれぞれ、現在表示されているページが「ホーム」の時、「エントリー詳細ページ」の時、「固定ページ」の時、「カテゴリ一覧ページ」の時、のような意味を示しています。
つまりこれらを使えば、例えばホームの時だけ表示させる内容を、他のページも共通で読み込むテンプレートファイルの中に書けるということです。
書き方は以下のような感じ。

<?php if (is_home()) { ?>
ホームのときだけ表示される部分
<?php } ?>

ホームじゃないページでの指定にしたければ、上の「is_home()」のところを「is_single()」とかにすればOK。

ID等で細かく指定

さらに便利なのが、括弧内にエントリーやカテゴリーのIDを入れると細かい指定ができます。IDでなくてスラッグや名前でもいいです。

<?php if (is_category('8')) { ?>
カテゴリIDが8のカテゴリ一覧ページのときだけ表示される部分
<?php } ?>

除外するときの指定

もしホーム以外のページで表示させたい内容の場合は、ホームだけ除外(否定)という意味になるので以下のように最初に「!」をつけて括弧で括ります。

<?php if (!(is_home())) { ?>
ホーム以外のページのときだけ表示される部分
<?php } ?>

複数の条件分岐タグをまとめて指定

例えば複数のカテゴリを指定したいなら以下のように書きます。

<?php if (is_category(array(3,4,8))) { ?>
カテゴリIDが3、4、8のいずれかのカテゴリ一覧ページのときだけ表示される部分
<?php } ?>

以下のように「||」で区切る書き方もあります。

<?php if (is_page() || is_single()) { ?>
固定ページもしくはエントリー詳細ページのときだけ表示される部分
<?php } ?>

複数の条件によって別々の処理に分岐

ここまでは処理方法がひと通りだけの例でした。つまり

  • ◯◯の場合は■を表示する

というようなシンプルな指定です。これだけの場合、◯◯の条件にあてはまらない時は何も表示されません。
これだけで使えるケースも多いはずですが、実際には、分岐先の処理方法がひとつだけではない場合も多いでしょう。つまり

  • ◯◯の場合は■を表示し、そうではない場合は▲を表示する
  • ◯1の場合は■1を表示し、◯2の場合は■2を表示し、その他の場合は▲を表示する

みたいに条件と処理方法が複数に分岐するパターンもあるはず。
そんなときは以下のように「else」や「else if」を使います。

<?php if (is_single()) { ?>
エントリー詳細ページのときだけ表示される部分
<?php } else { ?>
その他のページで表示される部分
<?php } ?>
<?php if (is_single()) { ?>
エントリー詳細ページのときだけ表示される部分
<?php } else if (is_category()) { ?>
カテゴリ一覧ページのときだけ表示される部分
<?php } else { ?>
その他のページで表示される部分
<?php } ?>
Pagetop