Eu preciso embrulhar cada 4 mensagens de wordpress em uma div

Eu preciso de uma div para embrulhar cada quatro posts no loop wordpress. Então seria como

four posts
four posts

meu código atual é esse

 <?php $i = 0; $wrap_div = "
"; if ( have_posts() ) { echo $wrap_div; while ( have_posts() ) { the_post(); ?>
<a href="https://stackoverflow.com/questions/19640179/i-need-to-wrap-every-4-wordpress-posts-in-a-div/"><?php the_title( '

', '

' ); ?>
<?php if ($i % 4 == 0) { echo "
" . $wrap_div; } } // end while } // end if $i++; ?>

Este código envolve cada publicação individualmente. Alguma ideia?

Você está incrementando $i fora do loop while, então dentro dele $i sempre serei ==0 e, portanto, $i % 4 == 0 .

Mover $i++; antes } // end while .

No entanto, você também deve alterar sua condição para $i % 4 == 3 , porque $i % 4 == 0 avaliado como true na primeira iteração ( $i=0 ) e produzirá um

inicial com apenas um postar.

Alternativamente, você poderia manter sua condição como ela é, e:

  • Ou comece com $i=1 vez de 0

  • ou mova $i++ logo depois.

Agora, quando você tiver um múltiplo exato de 4 posts, um extra,

vazio aparecerá no final. Isso porque você está assumindo que, quando um

fecha, outro deve abrir-se automaticamente. Isso nem sempre é o caso.

Supondo que você escolheu a solução $i % 4 == 3 acima e que você já tenha um echo ''; Após o loop while, mude sua condição para if(($i % 4 == 3)&& have_posts()) .

Como observou a geomagas – você está incrementando a variável fora do loop. Então, 0 % 4 == 0 avalia como verdadeiro – é porque quando você divide 0 por 4, você obtém 0. Para contornar essa situação, você precisa de mais uma regra.

Além disso, não esqueça isso com seu código atual se a quantidade total de postagens for, por exemplo, 12, você terá uma divisão vazia “frak” no final de suas postagens.

 < ?php $i = 0; $wrap_div = "
"; if ( have_posts() ) { // Grab the total posts that are being displayed $total_posts = $wp_query->post_count; echo $wrap_div; while ( have_posts() ) { the_post(); ?>
< ?php the_post_thumbnail(); ?>
< ?php the_title( '

', '' ); ?> < ?php the_meta(); ?>

< ?php // Is this a fourth post? If so, make sure it is not the last post? if ( $i % 4 == 0 && $i != 0 && ( $i + 1 ) != $total_posts ) { echo '
' . $wrap_div; } $i ++; } // end while // Close the $wrap_div echo ''; } // end if ?>

Como você pode ver a instrução if que imprime a tag de fechamento e o novo embrulho é mais complexo agora. Isso garante que $ i não seja 0 (o que significa que ainda é a primeira postagem) e que $ i + 1 não é igual à quantidade total de postagens exibidas (para esse caso, fechamos após o loop while).

Se você está se perguntando por que estamos fechando após o loop while() – simplesmente porque suas postagens podem nem sempre ser exatamente múltiplas em 4 (eu não tenho certeza sobre a tradução correta para o inglês aqui) – e se isso for caso e você não feche seu div após o loop while – você terá problemas.