您应该能够通过以下方式实现这一点。。。
<?php
$wpb_all_query = new WP_Query( [
\'post_type\'=>\'post\',
\'post_status\'=>\'publish\',
\'posts_per_page\'=> -1,
\'orderby\' => \'date\',
\'order\' => \'ASC\'
] );
$dividers = [];
?>
<?php if ( $wpb_all_query->have_posts() ) : ?>
<div id="list_allposts">
<?php while ( $wpb_all_query->have_posts() ) : $wpb_all_query->the_post(); ?>
<?php $post_date = get_the_date( \'F Y\' ); ?>
<?php if ( !in_array( $post_date, $dividers ) ): ?>
<?php $dividers[] = $post_date; ?>
<div class="divider">
<?= $post_date; ?>
</div>
<?php endif ?>
<!-- Post code here -->
<?php endwhile; ?>
</div>
<?php endif; wp_reset_postdata(); ?>
这样做的目的是创建一个;“分隔符”;(格式化日期)并检查是否已打印。
这种方法依赖于按日期排序的帖子,否则最终会出现错误的分隔符。
如果您想允许不同的排序(例如按标题),但要将它们按月份和年份分组/划分,您可以执行以下操作。。。
<?php
$wpb_all_query = new WP_Query( [
\'post_type\'=>\'post\',
\'post_status\'=>\'publish\',
\'posts_per_page\'=> -1,
\'orderby\' => $orderby,
\'order\' => $order
] );
$dates_map = [];
foreach ( $wpb_all_query->posts as $item ) {
$date_key = (int)get_the_date( \'Ym\', $item );
if ( !array_key_exists( $date_key, $dates_map ) ) {
$dates_map[ $date_key ] = [
\'label\' => get_the_date( \'F Y\', $item ),
\'posts\' => []
];
}
$dates_map[ $date_key ][ \'posts\' ][] = $item;
}
ksort( $dates_map );
?>
<?php if ( !empty( $dates_map ) ) : ?>
<div id="list_allposts">
<?php foreach ( $dates_map as $map ): ?>
<div class="divider">
<?= $map[ \'label\' ]; ?>
</div>
<?php foreach ( $map[ \'posts\' ] as $post ): ?>
<?php setup_postdata( $post ); ?>
<!-- Code for each post here -->
<?php the_title(); ?>
<?php endforeach; wp_reset_postdata(); ?>
<?php endforeach ?>
</div>
<?php endif; ?>
这样做的目的是创建一个按日期分组的多维帖子数组。类似于。。。
$dates_map = [
202101 => [
\'label\' => \'January 2021\',
\'posts\' => [
object(WP_Post)[
\'ID\' => 1,
\'post_title\' = \'Post 1\',
// ...
],
object(WP_Post)[
\'ID\' => 2,
\'post_title\' = \'Post 2\',
// ...
]
]
],
202102 => [
\'label\' => \'February 2021\',
\'posts\' => [
object(WP_Post)[
\'ID\' => 3,
\'post_title\' = \'Post 3\',
// ...
],
object(WP_Post)[
\'ID\' => 4,
\'post_title\' = \'Post 4\',
// ...
]
]
],
// ...
];
数组键是
year
和
month
允许我们按升序排列组。
然后我们循环遍历每个日期,打印label
然后为该组中的每个帖子创建另一个循环。使用setup_postdata()
我们可以模拟标准的WP\\u查询while循环。
这两个都没有经过测试,但应该为您指明正确的方向。