Inserindo HTML para fechar e abrir divs em WP_Query loops

A saída que estou tentando alcançar é esta:

Este é o meu PHP

  have_posts()) : $first_query->the_post(); ?> current_post && !($first_query->current_post % 3) ) : ?> 
current_post && !($first_query->current_post % 1) ) : ?>
<a href="https://wordpress.stackexchange.com//questions/210604/inserting-html-to-close-and-open-divs-in-wp-query-loops/">
current_post && !($first_query->current_post % 3) ) : ?>

Então, basicamente, eu preciso de um DIV com a class de linha para include três divs com a class de pequeno-1 grande-4 colunas. O que estou recebendo com o código mostrado nesta publicação é

Solutions Collecting From Web of "Inserindo HTML para fechar e abrir divs em WP_Query loops"

Você poderia simplificar as coisas usando a function PHP array_chunk() , para dividir uma matriz em pedaços menores. Então você não precisa se preocupar em abrir e fechar divs com alguns truques de matemática.

Vamos rewrite o seu trecho de código e espero que seja mais fácil trabalhar com:

 // Let's get all posts with thumbnail set in some category $args = [ 'cat' => 22, 'posts_per_page' => 9, 'meta_key' => '_thumbnail_id' ]; // Fetch posts $query = new WP_Query( $args ); if( $query->have_posts() ) { while ( $query->have_posts() ) { $query->the_post(); // Collect all items into a temp array $tmp[] = sprintf( '', get_permalink(), get_the_post_thumbnail( get_the_ID(), 'large' ) ); } // Split the divs into rows of 3 items $rows = array_chunk( $tmp, 3 ); // Housecleaning unset( $tmp ); wp_reset_postdata(); // Output the rows foreach( $rows as $row ) printf( '
https://wordpress.stackexchange.com//questions/210604/inserting-html-to-close-and-open-divs-in-wp-query-loops/%s
', join( '', $row ) ); }

Olhe Ma, nenhuma matemática usada aqui! 😉

Espero que você possa ajustar isso às suas necessidades.

Para a versão de matemática;) –

Abra e feche a primeira / última linha fora do loop, então você só precisa se preocupar em fechar / abrir linhas cada terceira publicação que não é a última publicação.

 echo '
'; while ( $query->have_posts() ){ // output content for this post here if( 0 == ( $first_query->current_post + 1 ) % 3 && ( $first_query->current_post + 1 ) != $first_query->post_count ){ echo '
'; } } echo '
';