こんにちはたんしおです。
今回はWordPressのループにおいて『奇数番目のみ』『偶数番目のみ』はたまた『3番目のみ』などの法則で、処理内容を分岐する方法をまとめております。
メインループにもサブループにも使えるのでなんとなくやり方を覚えておきましょう。
【基本】通常のループの作り方
ところでだけど通常の繰り返し処理を行うループは書けるかい?
こないだ進◯ゼミで学んだからなんとか・・・
WordPressは階層ごとに決められた表示処理が行われるメインループと、独自にソートをかけて表示処理を行えるサブループがあり、それぞれの表示方法は以下の通りです。
メインループの書き方
<?php
if(have_posts()):
while(have_posts()): the_post();
?>
<!-- 繰り返し処理内容 -->
<?php
endwhile;
endif;
?>
メインループはテンプレート階層ごとに出力されるデータが決まっており、記事を表示するために必ず記述するコードです。
ここに記事の情報を繰り返し表示するおまじないみたいなものだねを入力
サブループの書き方
<?php
$args = array(
// 条件をここで指定
);
$wp_ushisan = new WP_Query($args);
if($wp_ushisan->have_posts()):
while($wp_ushisan->have_posts()): the_post();
?>
<!-- 繰り返し処理内容 -->
<?php
end while;
endif; $wp_reset_postdata();
?>
サブループは自分で指定した条件に合致するデータを繰り返し出力することができます。
こちらは表示させる記事情報を自分で指定できるため、階層ごとに表示できる縛りなどもなく、自由度が高いのが特徴です。
ただこれらのループの<!-- 繰り返し処理内容 -->
の部分のHTMLなどは同じものが繰り返されるので
奇数番目だけclass名を変更したい・・・!
などを実現するには処理回数に応じて分岐が必要です。
今回は処理の回数を記録しているcurrent_post
を利用して分岐してみるよ!
メインループでの分岐方法
ここでは仮に偶数番目と奇数番目で処理を変えた場合のコードとしています。
<?php
if(have_posts()):
while(have_posts()): the_post();
?>
<?php if($wp_query->current_post % 2 == 0): ?>
<div class="odd">
<!-- 奇数番目の処理内容 -->
</div>
<?php else: ?>
<div class="even">
<!-- 偶数番目の処理内容 -->
</div>
<?php endif; ?>
<?php
endwhile;
endif;
?>
$wp_query
は投稿に関する情報を持っている配列なので、その中にある順番(処理数)を表すcurrent_post
の値で分岐しています。
最初の処理はcurrent_post
の値が0からスタートなので2で割った余りが0の時奇数番目という条件分岐になります。
なんてことはないif文でできちゃうんだね!
サブループでの分岐方法
サブループでの方法は以下の通りです。
<?php
$args = array(
// 条件をここで指定
);
$wp_ushisan = new WP_Query($args);
if($wp_ushisan->have_posts()):
while($wp_ushisan->have_posts()): the_post();
?>
<?php if($wp_ushisan->current_post % 2 == 0): ?>
<div class="odd">
<!-- 奇数番目の処理内容 -->
</div>
<?php else: ?>
<div class="even">
<!-- 偶数番目の処理内容 -->
</div>
<?php endif; ?>
<?php
end while;
endif; $wp_reset_postdata();
?>
要領はメインループと同じですが、サブループはWP_Queryのインスタンスである$wp_ushisan
が今回のループの情報を所有しています。
なのでサブループの場合は$wp_query
ではなく、任意に設定した$wp_ushisan
からcurrent_post
を引っ張ってきてあげましょう!
まとめ
ループの処理数を保有しているcurrent_post
を用いて処理数に応じて条件分岐する方法でした。
やり方さえ覚えちゃえば難しい知識はいらないんだね
if文の中の計算式を変えれば、『ループの最初』などの条件にも適用できるので、使いどきがあったら実践してみよう!