web-dev-qa-db-ja.com

フロントページで日付順に投稿を整理する

フロントページのすべてのカテゴリからの最後の5つの投稿を表示するコードがあります。しかし、現時点ではそれらはカテゴリごとに分類されています。投稿日順に並べ替えることはできますが、それでもカテゴリごとに5件の投稿がありますか。

これが私の現在のコードです:

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
if( $cats = get_categories() ) foreach( $cats as $cat ) :
//go through all site's categories and get up to 5 posts each////

    $cat_query = new WP_Query( array(
        'post__not_in' => get_option( 'sticky_posts' ),
        'category__in' => array($cat->term_id),
        'posts_per_page' => 5,
        'paged' => $paged
        ) );

        if($cat_query->have_posts()) : ?>
<h3 class="cat-title"><?php echo $cat->name; ?></h3>
        <?php while ($cat_query->have_posts()) : $cat_query->the_post();
        get_template_part( 'loop', 'index' );

        endwhile; endif; wp_reset_postdata();
endforeach;
1
risto

引数にorderbyorderを追加します。

$cat_query = new WP_Query( array(
    'post__not_in' => get_option( 'sticky_posts' ),
    'category__in' => array($cat->term_id),
    'posts_per_page' => 5,
    'paged' => $paged,
    'orderby' => 'date',
    'order' => 'DESC'
) );


更新

それはまだ1つのカテゴリをとり、5つの投稿をリストしてから5つの投稿などで別のカテゴリに移動するようです。

代わりにこれを試してください:

$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;

$i = 0;

if ( $cats = get_categories() ) foreach( $cats as $cat ) :
    $cat_query = new WP_Query( 
        array(
            'post__not_in' => get_option( 'sticky_posts' ),
            'category__in' => array ( $cat->term_id ),
            'posts_per_page' => 5,
            'paged' => $paged,
            'orderby' => 'date',
            'order' => 'DESC'
        )
    );

    if ( $cat_query->have_posts() ) : ?>
        <?php while ( $cat_query->have_posts() ) : $cat_query->the_post();
            // arrays of all the posts' IDs and dates
            $the_posts['ID'][$i] = $post->ID;
            $the_posts['date'][$i] = $post->post_date;

            $i++;
        endwhile;
    endif; wp_reset_postdata();
endforeach;

foreach ( $the_posts['date'] as $the_post_date ) {
    $post_dates[] = $the_post_date;
}

// sort all the posts by their dates
array_multisort( $post_dates, SORT_DESC, $the_posts['ID'] );

foreach ( $the_posts['ID'] as $the_post_id ) {
    $post_ids[] = $the_post_id;
}

$query = new WP_Query( array( 'post_type' => 'post', 'post__in' => $post_ids ) );

if ( $query->have_posts() ) : ?>
    <?php while ( $query->have_posts() ) : $query->the_post(); ?>
    <h3 class="cat-title"><?php $cat = get_the_category( get_the_ID() ); echo $cat[0]->name; ?></h3>
    <?php
        get_template_part( 'loop', 'index' );
    endwhile;
endif; wp_reset_postdata();
2
stealthyninja