J'ai le code pour afficher les 5 derniers messages de toutes les catégories sur la page d'accueil. Cependant, pour le moment, ils sont classés par catégorie. Est-il possible de les commander par date de publication, tout en ayant 5 publications par catégorie?
Voici mon code actuel:
$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;
Ajoutez orderby
et order
à vos arguments:
$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'
) );
Mettre à jour
il semble que cela prend toujours une catégorie, liste 5 articles puis passe à une autre, avec 5 articles, etc. Il prend les derniers articles, mais ils sont listés une catégorie après un autre
Essayez plutôt ceci alors:
$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();