ゆるくはじめるWordPress.

条件分岐を使ってページごとに表示を変える【WordPressテーマ作り STEP9】

conditional-tag-top

テーマの中で、ループと並んで使用率の高い条件分岐。ループとこれさえ理解していれば簡単なテーマを作るには事足りるんじゃないでしょうか。
今回はWordPressの条件分岐タグと組み合わせてページごとに表示を変える方法を例にとって、条件分岐の仕組みと使い方について簡単にまとめてみました。

条件分岐の構造

<?php if(条件): ?>
    <!-- ここに条件が一致した時の処理 -->
<?php endif; ?>

if文で条件をチェックして、条件に一致していれば中の処理を実行します。
ページによって表示させるものを変えたい場合、条件部分にはページの種類を判断する条件分岐タグを使います。


テンプレートファイルの種類

テーマファイル内にindex.phpしかなければ全てのページでindex.phpの内容が表示されますが、次のファイルがある場合、ページの内容によってそちらが優先して表示されるようになります。

home.php ホームページ
archive.php アーカイブページ(タグやカテゴリーの一覧)
single.php 個別投稿ページ
search.php 検索結果ページ
404.php 404(Not Found)ページ

これもまだ一部の例ですが、例えばarchive.phpはさらに以下のように分ける事もできます。

category.php カテゴリー別のアーカイブページ
tag.php タグ別のアーカイブページ
date.php 日付別のアーカイブページ

その他の種類について詳しくはこちらで:テンプレート階層 – WordPress Codex 日本語版


条件分岐タグの一例

もしindex.phpしか用意していなくても、内容はsingleだったり、archiveだったりの内容を表示しているわけです。そのページの種類を判断するのが条件分岐タグ。これを条件部分に入れて使います。

is_home() ホームページ
is_archive() アーカイブページ(タグやカテゴリーの一覧)
is_single() 個別投稿ページ
is_search() 検索結果ページ
is_404() 404(Not Found)ページ
is_category() カテゴリー別のアーカイブページ
is_tag() タグ別のアーカイブページ
is_date() 日付別のアーカイブページ

その他の種類について詳しくはこちらで:条件分岐タグ – WordPress Codex 日本語版


条件分岐の使い方

実際に条件分岐タグを使ってみると次のように。

<?php if( is_home() ): ?>
    <p>ここはホームページです。</p>
<?php endif; ?>

条件分岐タグの前に!を付けると否定の意味になります。

<?php if( !is_home() ): ?>
    <!-- ホームページ以外の時の処理 -->
<?php endif; ?>

この状態だと条件に一致しなかった場合は何も表示されませんが、一致しなかった場合の処理を指定したい時はelseを入れて次のように。

<?php if( is_home() ): ?>
    <p>ここはホームページです。</P>
<?php else: ?>
    <!-- ホームページ以外の時の処理 -->
<?php endif; ?>

そしてelseifでさらに条件を追加。条件に一致しなかった場合次の条件をチェックしていくので、この形で条件を複数設定できます。

<?php if( is_home() ): ?>
    <!-- ホームページの時 --><p>ここはホームページです。</p>
<?php elseif( is_archive() ): ?>
    <!-- アーカイブページの時 --><p>ここはアーカイブページです。</p>
<?php endif; ?>
<?php if( is_home() ): ?>
    <!-- ホームページの時 --><p>ここはホームページです。</p>
<?php elseif( is_archive() ): ?>
    <!-- アーカイブページの時 --><p>ここはアーカイブページです。</p>
<?php elseif( is_single() ): ?>
    <!-- 個別投稿ページの時 --><p>ここは個別投稿ページです。</p>
<?php else: ?>
    <!-- どの条件にも一致しなかった時の処理 -->
<?php endif; ?>

使用例

例えば、タグやカテゴリーの一覧ページはarchive.phpだけ用意し、内容によってタイトルや見出しの表示を変えたい場合

<?php if( is_category() ): ?>
      <span><?php single_cat_title(); ?></span>
<?php elseif( is_tag() ): ?>
      <span><?php single_cat_title(); ?></span>
<?php elseif( is_month() ): ?>
      <span><?php single_month_title(); ?></span>
<?php endif; ?>

こんな感じにしておけばページごとに違ったタイトルを表示させることができます。ここにアイコンを足してみたり、色を変えてみたり、アレンジしてよりわかりやすくページの内容を伝える事もできますね。

これはまだごくごく簡単な例ですが、ユーザーのログイン状態を判断したり、表示がモバイルかPCかを判断したり、関数との組み合わせで様々な処理にも使えるものなので、もっと深く学んでみるととっても楽しいです。
次回は条件分岐と組み合わせてページャーを表示させてみたいと思います。


スポンサーリンク

公開日:2016-1-28