web-dev-qa-db-ja.com

カルーセル内の最初の6つの投稿、グリッド内の次の8つの投稿をループする

フロントページでは、最初の6つの投稿をカルーセルに配置してから、次の8つの投稿をグリッドに配置する必要があります。そのようなデザインをループ処理するためのベストプラクティスは何ですか?私は現在最初の14件の投稿を呼び出すために "get_posts"を使用していますが、その後手動でそれぞれの投稿を呼び出していますが、もっと良い方法があるはずです。

これが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 );

問題は、実際にはポストループがないために "get_template_part"を呼び出せないことです。それで、私のコードの残りの部分は次のようになります。

<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++;
    }
?>

ご覧のとおり、 "get_template_part"を使用する代わりに、テンプレートを取得するために別の関数を呼び出す必要があります。

それで、これを行うためのベストプラクティスは何ですか?

1
mediocre_bro

このようにオフセットを付けてWP_Queryを使用する

   <?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(); ?>

次に、残りの投稿に対して新しいクエリを作成します。

 <?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(); ?>

関数はHTMLを表示しないようにデータを返すためにそれらを使用します。 HTMLの表示は断片的に行われるべきです。

1
Yuxel Yuseinov