Arrêtez les messages en double
-
29-09-2020 - |
Question
J'ai trois boucles que je veux empêcher d'afficher les mêmes messages dans chacune.
toute aide serait grandement appréciée
<?php
$i;
$args = array( 'numberposts' => 8);
$posts= get_posts( $args );
if ($posts) {
foreach ( $posts as $i => $post )
{
setup_postdata($post);
}
}
?>
<div class="item" id="<?php echo $i; ?>" >
<?php
$a = 0;
foreach( $posts as $i => $post ) :
if ($a == 4) { break; }
?>
<div class="col-md-6 nopadding view view-ninth" style="">
<?php the_post_thumbnail('large'); ?>
<div class="content">
<h2><?php the_title(); ;?></h2>
<p><?php $excerpt = get_the_excerpt(); echo string_limit_words($excerpt,15) . '...'; ?></p>
<a href="<?php the_permalink() ?>" class="info">Read More >></a>
</div>
</div>
<?php $a++; endforeach; ?>
</div><!-- end item -->
<div class="item" id="<?php echo $i; ?>" >
<?php
$a = 0;
foreach( $posts as $i => $post ) :
if ($a == 4) { break; }
?>
<div class="col-md-6 nopadding view view-ninth" style="">
<?php the_post_thumbnail('large'); ?>
<div class="content">
<h2><?php the_title(); ;?></h2>
<p><?php $excerpt = get_the_excerpt(); echo string_limit_words($excerpt,15) . '...'; ?></p>
<a href="<?php the_permalink() ?>" class="info">Read More >></a>
</div>
</div>
<?php $a++; endforeach; ?>
</div>
<div class="item" id="<?php echo $i+1; ?>" >
<?php
$a = 0;
foreach( $posts as $i => $post ) :
if ($a == 4) { break; }
?>
<div class="col-md-6 nopadding view view-ninth" style="">
<?php the_post_thumbnail('large'); ?>
<div class="content">
<h2><?php the_title(); ;?></h2>
<p><?php $excerpt = get_the_excerpt(); echo string_limit_words($excerpt,15) . '...'; ?></p>
<a href="<?php the_permalink() ?>" class="info">Read More >></a>
</div>
</div>
<?php $a++; endforeach; ?>
</div>
La solution 2
<?php $args = array( 'numberposts' => 8);
$posts= get_posts( $args );
$i=0;
foreach($posts as $key=>$value) {
if($i==0) { echo "<div class=\"item\" id=\"".$key."\" >"; } ?>
<div class="col-md-6 nopadding view view-ninth" style="">
<?php echo get_the_post_thumbnail($value->ID, 'large'); ?>
<div class="content">
<h2><?php echo $value->post_title; ?></h2>
<p><?php echo string_limit_words($value->post_excerpt,15) . '...'; ?></p>
<a href="<?php echo get_permalink($value->ID); ?>" class="info">Read More >></a>
</div>
</div>
<?php $i++; if($i==4) { $i=0; echo "</div><div class=\"item\" id=\"<?php echo $key; ?>\" >"; } } ?>
</div>
Ceci est mon correctif à la fin.
Autres conseils
Vous pouvez utiliser WP_Query
pour créer votre boucle personnalisée, puis utilisez le offset
paramètre pour ignorer les publications de la boucle précédente.Vous allez exécuter 3 boucles à partir d'une requête, donc tout ce que vous avez à faire pour réexécuter la requête est d'utiliser rewind_posts()
après chaque boucle pour réinitialiser la boucle
Voici un exemple de code que vous pouvez modifier pour répondre à vos besoins précis.Ceci est juste une boucle très basique
<?php
$args = array( 'posts_per_page' => 4);
$my_query= new WP_Query( $args ); ?>
<ul>
<?php
while ($my_query->have_posts()) : $my_query->the_post();
?>
<li><?php the_title(); ?></li>
<?php
endwhile;
?>
</ul>
<?php
$my_query->rewind_posts();
?>
<ul>
<?php
$my_query->query('posts_per_page=4&offset=4');
while ($my_query->have_posts()) : $my_query->the_post();
?>
<li><?php the_title(); ?></li>
<?php
endwhile;
?>
</ul>
<?php
$my_query->rewind_posts();
?>
<ul>
<?php
$my_query->query('posts_per_page=4&offset=8');
while ($my_query->have_posts()) : $my_query->the_post();
?>
<li><?php the_title(); ?></li>
<?php
endwhile;
?>
</ul>
<?php
wp_reset_postdata();
?>
Licencié sous: CC-BY-SA avec attribution
Non affilié à wordpress.stackexchange