WordPressのループ処理を指定回数で分岐する

  • URLをコピーしました!

こんにちはたんしおです。

今回は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文の中の計算式を変えれば、『ループの最初』などの条件にも適用できるので、使いどきがあったら実践してみよう!

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!