J'ai installé deux boucles à l'aide de WP_Query: $latest
et $popular
que je suis en train de configurer dans cet exemple de mise en page:
Dernières nouvelles Populaires
Exemple de sortie HTML
<div class="content">
<div class="posts latest">
<post1>
<post2>
</div>
<div class="posts popular">
<post10>
<post9>
<post8>
<post7>
</div>
<div class="ad-block">
<ad>
</div>
</div>
<div class="content">
<div class="posts latest">
<post3>
<post4>
</div>
<div class="posts popular">
<post6>
<post5>
<post4>
<post3>
</div>
<div class="ad-block">
<ad>
</div>
</div>
[...]
Autrement dit: les Dernières et Populaires les div/post sont placés côte à côte et séparés les uns des autres pour permettre à un bloc d'annonces de largeur totale.
Ma boucle
<div class="content">
<div class="posts latest">
<?php
$args1 = array (
'posts_per_page' => 1000000,
'order' => 'DESC',
'orderby' => 'date'
);
$latest = new WP_Query( $args1 );
if ( $latest -> have_posts() ) :
$count = 0;
while ( $latest -> have_posts() ) : $latest -> the_post();
$count++;
if ( $count % 5 == 0 ) :
get_template_part( 'template', 'post' ); ?>
</div> <!--/posts-latest-->
<div class="posts popular">
<?php
$args2 = array (
'posts_per_page' => 10,
'order' => 'ASC',
'orderby' => 'date',
);
$popular = new WP_Query( $args2 );
if ( $popular -> have_posts() ) :
while ( $popular -> have_posts() ) : $popular -> the_post();
get_template_part( 'template', 'post' );
endwhile;
endif;
?>
</div> <!--/posts-popular-->
<div class="ad-block">
<?php get_template_part( 'template', 'ad' ); ?>
</div>
</div><!--/content-->
<div class="content">
<div class="posts latest">
<?php
else :
get_template_part( 'template', 'post' );
endif;
endwhile;
endif; wp_reset_postdata();
?>
</div> <!--/posts-latest-->
</div>
Pour le moment, ceci est configuré pour que tous les 5 billets dans la boucle $latest
, la boucle $popular
et un bloc d'annonces soient ajoutés.
Je comprends pourquoi cela ne fonctionne pas ... Parce que tous les 5 posts quand la boucle $popular
est appelée, elle recommence au lieu de continuer dans l’ordre.
Des idées sur la façon dont je peux faire ce travail?
Essayez ceci: nous déclarons un incrémenteur en haut de notre boucle externe appelé $popularLoop
pour garder une trace du nombre de boucles populaires que nous avons traversées; nous supposons que nous allons au moins frapper 1.
Dans notre boucle intérieure (populaire), nous devons définir le nombre de publications par page que nous allons charger, multiplié par le nombre de boucles populaires que nous avons parcourues et qui nous donneront notre décalage. À la fin de notre boucle interne, nous incrémentons $popularLoop
pour que notre décalage reste cohérent:
<div class="content">
<div class="posts latest">
<?php
$args1 = array (
'posts_per_page' => 1000000,
'order' => 'DESC',
'orderby' => 'date'
);
$latest = new WP_Query( $args1 );
$popularLoop = 0;
if ( $latest -> have_posts() ) :
$count = 0;
while ( $latest -> have_posts() ) : $latest -> the_post();
$count++;
if ( $count % 5 == 0 ) :
get_template_part( 'template', 'post' ); ?>
</div> <!--/posts-latest-->
<div class="posts popular">
<?php
$popular_ppp = 10;
$popularOffset = $popular_ppp * $popularLoop;
$args2 = array (
'posts_per_page' => $popular_ppp,
'offset' => $popularOffset,
'order' => 'ASC',
'orderby' => 'date',
);
$popular = new WP_Query( $args2 );
if ( $popular -> have_posts() ) :
while ( $popular -> have_posts() ) : $popular -> the_post();
get_template_part( 'template', 'post' );
endwhile;
$popularLoop++;
endif;
?>
</div> <!--/posts-popular-->
<div class="ad-block">
<?php get_template_part( 'template', 'ad' ); ?>
</div>
</div><!--/content-->
<div class="content">
<div class="posts latest">
<?php
else :
get_template_part( 'template', 'post' );
endif;
endwhile;
endif; wp_reset_postdata();
?>
</div> <!--/posts-latest-->
</div>