web-dev-qa-db-ja.com

PHP loop:3つの項目の構文ごとにdivを追加します

wordpressでループを使用して投稿を出力しています。3つの投稿ごとにdiv内にラップします。ループを繰り返すたびにカウンターを使用してインクリメントしますが、 m「$ iが3の倍数である場合」または「$ iが3-1の倍数である場合」という構文が不明です。

$i = 1;
if ( $wp_query->have_posts() ) : while ( $wp_query->have_posts() ) : $wp_query->the_post();
     // If is the first post, third post etc.
     if("$i is a multiple of 3-1") {echo '<div>';}

     // post stuff...

     // if is the 3rd post, 6th post etc
     if("$i is a multiple of 3") {echo '</div>';}

$i++; endwhile; endif;

これを実現するにはどうすればよいですか?ありがとう!

20

次のことをしてみませんか?これはそれを開き、3番目の投稿後に閉じます。次に、表示する3の倍数がない場合は、終了divを閉じます。

$i = 1;
//added before to ensure it gets opened
echo '<div>';
if ( $wp_query->have_posts() ) : while ( $wp_query->have_posts() ) : $wp_query->the_post();
     // post stuff...

     // if multiple of 3 close div and open a new div
     if($i % 3 == 0) {echo '</div><div>';}

$i++; endwhile; endif;
//make sure open div is closed
echo '</div>';

ご存知ない場合は、%は、2つの数値が除算された後の剰余演算子が剰余を返すことです。

51
kwelch

modulus 演算子を使用します。

if ( $i % 3 == 0 )

あなたのコードではあなたが使うことができます:

if($i % 3 == 2) {echo '<div>';}

そして

if($i % 3 == 0) {echo '</div>';}
10
George Cummins
$i = 1;
$post_count=$wp_query->found_posts;
//added before to ensure it gets opened
echo '<div>';
if ( $wp_query->have_posts() ) : while ( $wp_query->have_posts() ) : $wp_query->the_post();
     // post stuff...

     // if multiple of 3 close div and open a new div
     if($i % 3 == 0 && $i != $post_count) {echo '</div><div>';} elseif($i % 3 == 0 && $i == $post_count){echo '</div>';}

$i++; endwhile; endif;
1
Habib