web-dev-qa-db-fra.com

Boucle des six premiers postes du carrousel, des huit prochains postes de la grille

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?

1
mediocre_bro

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.

1
Yuxel Yuseinov