「WordPress」loop.phpの中で条件分岐するときの論理演算子の使い方。

この記事は2年以上前に書かれたものです。 情報が古い可能性があります。

テンプレートファイルの管理をしやすくするアイデアとして、テンプレートファイルをまとめる方法を考えてみました。
例えば、以下のような条件の時、

  • 現状使用しているテンプレートはhome,single,page,archive,index,loop,loop-single
  • 必要なループは2パターン。「(1)single,page」用と、「(2)それ以外」用
  • loop.phpにふたつのループをまとめて記述して管理したい。

loop.phpに(1)と(2)に適したループを記述して、そのふたつを条件分岐で分岐するという方法でまとめてみました。
そのとき、論理演算子の使い方を調べました。

必要になる条件分岐のタグは下記になります。

<?php if(!is_single() && !is_page()): ?>//single.phpではない場合とpage.phpではない場合が、両方成り立つ場合
//loopタグ
<?php endif; ?>

<?php if(is_single()||is_page()): ?>//single.phpまたはpage.phpである場合
//loopタグ
<?php endif; ?>

注意すべき論理演算子の使い方としては、

<?php if(!is_single() && !is_page()): ?>

で使われている&&は、「2つの値が成り立つとき」trueを返す、つまり実行されます。成り立たない場合はfalseを返して無視されます。singleではない、pageではない、ときにtrueを返す記述です。

「singleとpage」ではないテンプレートは「home,archive,index」なので、home.php,archive.php,index.phpが使われている時にtrueを返して中に記述したループタグが実行されます。

<?php if(is_home() || is_archive() || is_index()): ?>

と記述してもいいと思いますが、将来的にテンプレートファイルが増えたとしても、記述の修正なしで対応できるというメリットがあります。

次に、

<?php if(is_single() || is_page()): ?>

ここで使われている||は「2つの値の片方または両方が成り立つとき」にtrueを返すので、「home,single,page,arcive,index」の中で、single.phpまたはpage.phpが使われているときにtrueが返されて実行します。

論理演算子を適切に使えば、多彩なパターンの条件分岐を作れそうです。
今回はloop.phpの中にループを複数作りましたが、ひとつのループの流れの中で分岐させてもいいでしょうし、いろいろできそう。

テンプレートファイルを増やすか、条件分岐で書き分けるか。案件によっても異なりますが、見通しのよいテーマ作成のひとつの手法になると思います。

参考サイト:演算子/PHP入門

コメントをどうぞ!