Envolver cada 3 elementos en un bucle deja un contenedor vacío

Estoy envolviendo cada 3 elementos en mi bucle en un div wrapper como este:

$query = array( 'post_type' => 'post', ); $i = 1; $posts = new WP_Query( $query ); $out = '
'; if ($posts->have_posts()){ while ($posts->have_posts()){ $posts->the_post(); $out.= '
//content here
'; if($i % 3 == 0) { $out .= '
'; } $i++; } } $out .= '
'; wp_reset_postdata(); return '
'.$out.'
';

Lo cual crea una buena envoltura html menos una pequeña cosa que me molesta:

 

Si tengo exactamente 6 publicaciones (o cualquier múltiplo de 3, y el módulo lo está haciendo como debería) obtendré un contenedor adicional vacío. Que realmente no es necesario

Entonces, ¿qué condición debo incluir en mi consulta para asegurarme de que no obtengo envoltorios vacíos?

Agregue el envoltorio adentro:

 $query = array( 'post_type' => 'post', ); $i = 1; $posts = new WP_Query( $query ); $out = ''; $endingNeeded = false; if ($posts->have_posts()){ while ($posts->have_posts()){ if($i % 3 == 1) { $out .= '
'; $endingNeeded = true; } $posts->the_post(); $out.= '
//content here
'; if($i % 3 == 0) { $out .= '
'; $endingNeeded = false; } $i++; } } if($endingNeeded) { $out .= ''; } wp_reset_postdata(); return '
'.$out.'
';