タウンノート福岡»ウェブ戦略»WordPress»ちょっと深めのWordPress WordPressのループ構文をいろいろ考えてみる

ちょっと深めのWordPress WordPressのループ構文をいろいろ考えてみる

最終更新日:2018/3/13

WordPressのループと言えば、テーマを自作している人にとってはおなじみだと思います。

if ( have_posts() ): while( have_posts() ): the_post;
~
endwhile; else:
~
endif;

というやつですね。今回は、これを細かく分解してみようと思います。

PHP構文がちょっと嫌かも

いきなりですが、この構文自体、僕はあまり好きになれません。たぶん他にも同じように思っている人はいるでしょう。

個人的な理想形は、

if( have_posts() ){
while( have_posts() ){
the_post();
~
}
else{
~
}
}

こんな感じです。<?Pと?>が入るから1行にしたいという気持ちはわかるのですが、入れ子ならやっぱりスペースなりタブなりを入れてあげるのが美しいプログラムというものじゃないでしょうか。

WordPressを扱いだして、ずっと最初の形を使っていましたが、やっぱり入れ子的な書き方のほうがしっくりきます。

わからない人のために少しだけ説明をしておくと、PHPのif文やwhile文などは、2通りの書き方ができます。

if( 条件文 ){
ここに条件文がtrueのときの処理
}else{
ここに条件文がfalseのときの処理
}

if( 条件文 ):
ここに条件文がtrueのときの処理
else:
ここに条件文がfalseのときの処理
endif;

という2パターンですね。大して変わらないじゃないかと言いたいのであれば、それは全くその通りです。じゃあなぜ前者のほうがいいかというと、これはPHPのコードの意味の問題です。

PHPのif文は、処理内容が1行のときは{}すらいりません。if文の最小形は、こんな感じです。

if( 条件文 )
条件文がtrueのときの処理

処理が1つだけなら、これだけで終了します。ただ、普通は処理は複数発生するものですから、グループ化という意味で{}を使うことになっています。

配列の指定も同じですね。

{}を使うと、そういう意味がはっきりします。$argsの指定に{}を使っておいて、条件分岐に:を使うというのは、プログラムとしてちょっと違和感がないでしょうか。

そもそも条件分岐は必要なのか

そして、もっと根本的な話をすると、if文そのものがいらないんじゃないかと。

if文の役割をコードから見てみると、「記事がないときに代わりの処理をさせる」ためにif文を使っているようです。いろいろ調べてみましたが、while文も0回ループでエラーになることもないし、else以下に何か重要なことが書かれているかといえばそうでもないし、だいたい自作でテーマを作るときに記事がない状態ということ自体が相当レアなケースなので、呪文のようにif文を入れるのも正直どうかと思うわけです。ということで、せめてpageかpostくらいは定型文と妥協しないで、たまには

while( have_posts() ){
the_post();
~
}

と割り切ってもいいかもしれません。実際に自作テーマでこう記述しても、一度も問題になったことはありません。見やすさも上がるし。

パワーポイントの資料作成ならお任せください。