wordpressのループ中に「N件で改行・閉じタグを行いたい」というのは良くありますね。
こちらの考えかたはwordpressの機能で分岐、ではなく「PHPで件数を判別して分岐」と考えれば非常に簡単です。
例えば下記を
<ul> <li>1件目</li> <li>2件目</li> <li>3件目</li> <li>4件目</li> <li>5件目</li> <li>6件目</li> </ul>
wordpressのループ内で分割したい場合ですが、
<li></li>が1記事と例えて進めます。
<?php if (have_posts()) : ?> <ul> <?php while (have_posts()) : the_post(); ?> <li>1件目</li> <li>2件目</li> <li>3件目</li> <li>4件目</li> <li>5件目</li> <li>6件目</li> <?php endwhile; ?> </ul> <?php endif; ?>
こんなものでしょうか。
これを分岐します。
必要なのはループの回数ですので、PHPの代名詞ともいえる$iを使用しましょう。
<?php if (have_posts()) : ?> <ul> <?php $i = 1; ?> <?php while (have_posts()) : the_post(); ?> <?php if($i % 3 == 0){ ?> //$iを3で割った余りで判別 </ul> <ul> <?php };?> <li>1件目</li> <li>2件目</li> <li>3件目</li> <li>4件目</li> <li>5件目</li> <li>6件目</li> <?php $i++; ?> <?php endwhile; ?> </ul> <?php endif; ?>
こんなものですね。
3件ごとにタグを閉じております。
そんなに難しいことでは無いので知識の一つとして入れておくと「自分自身の引き出し」が増えてよいと思います。
ACFには「繰り返しフィールド」というものがあります。
これに対してもまったく同じように対応できます。
<?php if(have_rows('tab1')): ?> <ul> <?php $i = 1; ?> <?php while(have_rows('tab1')): the_row(); ?> <?php if($i % 3 == 0){ ?> //$iを3で割った余りで判別 </ul> <ul> <?php };?> <li>1件目</li> <li>2件目</li> <li>3件目</li> <li>4件目</li> <li>5件目</li> <li>6件目</li> <?php $i++; ?> <?php endwhile; ?> </ul> <?php endif; ?>
これで問題ありません。
最後にお伝えしておきたいです。
最初にPHPでの分岐で進めた理由は、wordpressそのものの機能に頼らず、
「wordpressを作成している根幹のPHPでの処理」を心がけていただければと思ったからです。
wordpressは高機能なものですが、その機能に頼りすぎると壁や不明点にぶつかった時に思考の幅が大変狭まってしまいます。
便利なものですが、あくまで動きは「PHP」で行われておりますので、何か困りごとはPHPの対応方法と考えていただければと思います。