La première page doit contenir les six premiers postes dans un carrousel, puis les huit suivants dans une grille. Quelle est la meilleure pratique pour boucler à travers ce type de conception? J'utilise actuellement "get_posts" pour appeler les 14 premiers articles, puis manuellement pour chacun d'eux après cela, mais je me suis dit qu'il devait y avoir un meilleur moyen.
Voici ce que je fais au début de index.php:
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$offset = ($paged - 1) * 14;
$args = array(
'numberposts' => 14,
'offset' => $offset,
'orderby' => 'date',
'order' => 'DESC',
'post_type' => 'post',
'post_status' => 'publish',
'suppress_filters' => true
);
$front_page_posts = get_posts( $args );
Le problème est que je ne peux pas appeler "get_template_part" car il n'y a pas réellement de boucle de publication. Le reste de mon code ressemble à ceci:
<div class="carousel">
<?php get_carousel_slide($front_page_posts[0]->ID, true); ?>
<?php get_carousel_slide($front_page_posts[1]->ID); ?>
<?php get_carousel_slide($front_page_posts[2]->ID); ?>
<?php get_carousel_slide($front_page_posts[3]->ID); ?>
<?php get_carousel_slide($front_page_posts[4]->ID); ?>
<?php get_carousel_slide($front_page_posts[5]->ID); ?>
</div>
[...]
<div class="grid">
<?php
$count = 6;
while($count < 14){
get_front_eighth($front_page_posts[$count]->ID);
$count++;
}
?>
Comme vous pouvez le constater, je dois appeler une fonction distincte pour obtenir le modèle au lieu d’utiliser "get_template_part".
Alors quelle est la meilleure pratique pour faire cela?
Utilisez WP_Query avec offset comme ceci
<?php
$offset = 6;
$post_args = array(
'post_type' => 'post',
'posts_per_page' => $offset,
);
$slider_blog_posts = new WP_Query( $post_args );
?>
<?php if ( $slider_blog_posts->have_posts() ): ?>
<div class="carousel">
<?php while( $slider_blog_posts->have_posts() ): $slider_blog_posts->the_post(); ?>
<?php get_carousel_slide( get_the_ID, true); ?>
<?php endwhile; ?>
</div>
<?php endif; ?>
<?php wp_reset_postdata(); ?>
puis créez une nouvelle requête pour le reste des posts:
<?php
$new_args = array(
'post_type' => 'post',
'posts_per_page' => 8,
'offset' => $offset
);
$grid_blog_posts = new WP_Query( $new_args );
?>
<?php if ( $grid_blog_posts->have_posts() ): ?>
<div class="grid">
<?php while( $grid_blog_posts->have_posts() ): $grid_blog_posts->the_post(); ?>
<?php get_front_eighth( get_the_id() ); ?>
<?php endwhile; ?>
</div>
<?php endif; ?>
<?php wp_reset_postdata(); ?>
quant aux fonctions, utilisez-les pour renvoyer des données sans affichage HTML. L'affichage HTML doit être effectué par fragments.