3年以上前に書いた「WordPressテンプレートを各カテゴリ等で別々に使い分ける」というエントリーでは、表示内容を変えるために別々のテンプレートファイルを用意しておくことを前提に解説しました。もちろんそれはそれでいいんですが、もしそれぞれの違いがほんのちょっとしたことだった場合等、わざわざ別々のテンプレートファイルを用意するのも非効率なのでは?というケースは多々あります。
そんな場合は、別々のテンプレートファイルを用意するのではなく、ひとつのテンプレートファイルの中で条件によって分岐させて表示内容をコントロールしたほうがやりやすいかもしれません。
WordPressには条件分岐タグというのがあります。
イメージしやすいところでは、例えば以下のようなものです。(他にもあります)
これらはそれぞれ、現在表示されているページが「ホーム」の時、「エントリー詳細ページ」の時、「固定ページ」の時、「カテゴリ一覧ページ」の時、のような意味を示しています。
つまりこれらを使えば、例えばホームの時だけ表示させる内容を、他のページも共通で読み込むテンプレートファイルの中に書けるということです。
書き方は以下のような感じ。
<?php if (is_home()) { ?> ホームのときだけ表示される部分 <?php } ?>
ホームじゃないページでの指定にしたければ、上の「is_home()」のところを「is_single()」とかにすればOK。
さらに便利なのが、括弧内にエントリーやカテゴリーの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 } ?>
ここまでは処理方法がひと通りだけの例でした。つまり
というようなシンプルな指定です。これだけの場合、◯◯の条件にあてはまらない時は何も表示されません。
これだけで使えるケースも多いはずですが、実際には、分岐先の処理方法がひとつだけではない場合も多いでしょう。つまり
みたいに条件と処理方法が複数に分岐するパターンもあるはず。
そんなときは以下のように「else」や「else if」を使います。
<?php if (is_single()) { ?> エントリー詳細ページのときだけ表示される部分 <?php } else { ?> その他のページで表示される部分 <?php } ?>
<?php if (is_single()) { ?> エントリー詳細ページのときだけ表示される部分 <?php } else if (is_category()) { ?> カテゴリ一覧ページのときだけ表示される部分 <?php } else { ?> その他のページで表示される部分 <?php } ?>