フロントページでは、最初の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"を使用する代わりに、テンプレートを取得するために別の関数を呼び出す必要があります。
それで、これを行うためのベストプラクティスは何ですか?
このようにオフセットを付けて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の表示は断片的に行われるべきです。