Ceci est une question continue de Fusion d'une requête complexe avec post_rewind et division des publications en deux colonnes
Bonjour, j'ai besoin d'aide pour ma boucle. Ce qui est fait, c'est diviser les messages en deux colonnes.
<?php $row_start = 1; while ( $query->have_posts() ) : $query->the_post(); ?>
<?php if ( in_array( get_the_ID(), $duplicates ) ) continue; ?>
<?php if( $row_start % 2 != 0) {// odd ?>
<div class="post">
left - <?php the_title();?><br>
</div>
<?php } ;?>
<?php if( $row_start % 2 == 0) {// even ?>
<div class="post">
right - <?php the_title();?><br>
</div>
<?php } ;?>
<?php ++$row_start; endwhile; wp_reset_postdata(); endif; ?>
La sortie de la boucle est la suivante:
<div class="left">post</div>
<div class="left">post</div>
<div class="right">post</div>
<div class="left">post</div>
<div class="right">post</div>
<div class="left">post</div>
<div class="right">post</div>
Ce que je voudrais faire est d'envelopper tous les messages dans une div, comme suit:
<div class="left">
post
post
post
</div>
<div class="right">
post
post
post
</div>
Merci
Vous pouvez toujours essayer de créer 2 tableaux de titres, par exemple $ left et $ right, $ odd et $ even, ou $ tom et $ jerry, et les remplir avec les titres au cours de votre boucle, puis les imprimer après la fin de la boucle. alors:
Créer un tableau
$left = $right = array();
Puis relâchez votre boucle [édité ci-dessous pour refléter les commentaires]
<?php // The loop
if ( $query->have_posts() ) : $row_start = 1;
while ( $query->have_posts() ) : $query->the_post();
if ( in_array( get_the_ID(), $duplicates ) ) continue;
if( $row_start % 2 != 0) {
// odd: add result to $left
// $left[] = get_the_title();
$left[] = $post->id;
} else {
// even: add it to $right
//$right[] = get_the_title();
$right[] = $post->id;
}
++$row_start; endwhile; wp_reset_postdata();
// now loop has ended and we have 2 full arrays
// that we can print each in it's div
print "<div class=\"left\">";
foreach($left as $postID) {
$postData = get_post( $postID );
print $postData->post_title;
print $postData->post_content;
// etc... you can also get thumbnails using the post ID:
print get_the_post_thumbnail($postID, 'thumbnail');
}
print "</div>";
// next column
print "<div class=\"right\">";
foreach($right as $postID) {
// ... just like the above...
}
print "</div>";
endif;
?>
Je n'ai pas encore testé cela, mais cela devrait fonctionner (ou une variante proche de celle-ci). Personnellement, je voudrais sortir la liste des articles dans des listes non ordonnées (<ul class="right or left">
) et mettre chaque titre dans un <li>
.
Bonne chance :)
Parcourez la boucle avec% pour le côté gauche en premier, puis rembobinez la boucle et démarrez du côté droit.
https://codex.wordpress.org/Function_Reference/rewind_posts
Mettre à jour:
En fonction de la réponse que vous avez sélectionnée, l'ID est stocké dans deux tableaux différents, puis parcouru à nouveau ces ID par côté; vous pouvez envisager de réduire les boucles en ne stockant que la sortie résultante dans deux chaînes distinctes.
ob_start()
va capturer le tampon de sortie, faire votre logique visuelle et $<side> .= ob_get_clean()
va ajouter les données.
Lorsque votre boucle est terminée, il vous suffit de echo "<div>$left</div><div>$right</div>";