2012-01-20 9 views
15

Estoy usando un bucle en wordpress para publicar publicaciones. Quiero envolver cada tres publicaciones dentro de un div. Quiero usar un contador para incrementar en cada iteración del ciclo, pero no estoy seguro de la sintaxis que dice "si $ i es un múltiplo de 3" o "si $ i es un múltiplo de 3 - 1".bucle PHP: agregue un div alrededor de cada tres elementos sintaxis

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

¿Cómo puedo hacer esto? ¡Gracias!

+0

¿Qué pasa si quisiera añadido sólo si es más de 3 artículos? y cuando es igual a 3 elementos, ¿dejarlo sin cambios? –

+0

Esta fue la forma más fácil que pude encontrar: http://stackoverflow.com/questions/28247770/loop-through-wordpress-posts-and-wrap-each-x-post-in-a-div –

Respuesta

44

Por qué no hacer lo siguiente? Esto lo abrirá y cerrará después de la tercera publicación. Luego cierre la división final en caso de que no haya un múltiplo de 3 para mostrar.

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

En caso de que no lo sabía, % es el operador operandi devolverá el resto después de los dos números se dividen.

+0

que se ve bien-- ¿hay alguna ventaja en usar uno u otro en términos de velocidad o eficiencia? Creo que al usar el operador de módulo hace una línea menos de código –

+0

, lo entiendo ahora, usar el módulo creará un div sin cerrar si no hay un múltiplo de 3. ¡Gracias! –

+1

Me gusta más esto más porque se asegura de cerrar todos los 'divs' de apertura. Lo que realmente haría es tomar el primer div y repetirlo fuera del ciclo. De esa forma, incluso si solo hay 1, tienes una etiqueta de abrir/cerrar. Esto asegurará que no mates el formateo. El procesamiento real de la misma no debería afectar las velocidades ya que es una ecuación "básica". – kwelch

9

Use el operador modulus:

if ($i % 3 == 0) 

En el código que puede utilizar:

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

y

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

¿podría ayudarme? ¿Lo puse en el contexto del código que pegué en mi respuesta anterior? –

+0

@ j-man86: puede usarlo has-is, replace '" $ i es un múltiplo de 3-1 "' con '$ i% 3 == 0' –

+0

@ j-man86: Consulte mi actualización. –

0

si usted no necesita div extra que puede utilizar esto:

$i = 0; 

$post_count = $wp_query->found_posts; 

if ($wp_query->have_posts()) : while ($wp_query->have_posts()) :$wp_query->the_post(); 

// If is the first post, third post etc. 
(($i%3) == 0) ? echo '<div>' : echo ''; 

// post stuff... 

// if is the 3rd post, 6th post etc or after the last element 

($i == ($post_count - 1) || (++$i%3) == 0) ? echo '</div>' : 
echo ''; 

endwhile; endif; 
Cuestiones relacionadas