web-dev-qa-db-fra.com

PHP loop: Ajoute une div tous les trois éléments

J'utilise une boucle dans WordPress pour publier des messages. Je veux envelopper tous les trois messages à l'intérieur d'une div. Je veux utiliser un compteur pour incrémenter à chaque itération de la boucle mais je ne suis pas sûr de la syntaxe qui dit "si $ i est un multiple de 3" ou "si $ i est un multiple de 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;

Comment puis-je y arriver? Merci!

17
j-man86

Pourquoi ne pas faire ce qui suit? Cela l'ouvrira et le fermera après le troisième post. Puis fermez la dernière division si un multiple de 3 n’est pas à afficher. 

$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>';

Si vous ne le saviez pas, % est l'opérateur de modus qui retournera le reste après la division des deux nombres. 

50
kwelch

Utilisez l'opérateur module :

if ( $i % 3 == 0 )

Dans votre code, vous pouvez utiliser:

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

et

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;
0
Habib