我需要帮助按月份+年份对帖子进行分组(按帖子发布日期排序),结果如下:
November 2019
Event 1
Event 2
December 2019
Event 3
Event 4
January 2020
Event 5
...
我一直在到处寻找解决方案,但我还是想不出来。我用的是密码,我发现
here, 我想应该这样做,但我的php不是很流利,所以我不知道如何将日期设置为$current\\u year和$current\\u month。现在看起来是这样的:
<?php
$current_year = $current_month = \'\';
while ( have_posts() ) :
the_post();
$last_year = $current_year;
$last_month = $current_month;
$current_year = date( \'Y\', strtotime( get_post_meta( get_the_ID(), \'_date\', true ) ) );
if ( $last_year != $current_year ) {
$last_month = \'\';
}
$current_month = date( \'F\', strtotime( get_post_meta( get_the_ID(), \'event_startdate\', true ) ) );
?>
<?php if ( $last_year != $current_year ) : ?><h2><?php echo $current_year; ?></h2><?php endif; ?>
<?php if ( $last_month != $current_month ) : ?><h3><?php echo $current_month; ?></h3><?php endif; ?>
<?php get_template_part( \'template-parts/content-pasakumi\', get_post_type() ); ?>
<?php endwhile; ?>
具有这些功能。包含以下内容的php:
add_action( \'pre_get_posts\', function ( $query ) {
if ( is_post_type_archive( \'pasakumi\' ) && $query->is_main_query() ) {
$query->set( \'post_type\', \'pasakumi\' );
$query->set( \'orderby\', \'date\' );
$query->set( \'order\', \'ASC\' );
}
} );
(自定义帖子类型为pasakumi)
如有任何帮助,将不胜感激!
EDIT:经过大量修改,这是存档页面的最终代码,对我来说很有用:
<?php
$current_year = $current_month = \'\';
while ( have_posts() ) :
the_post();
$last_year = $current_year;
$last_month = $current_month;
$current_year = get_post_time( \'Y\', TRUE, get_the_ID(), TRUE );
if ( $last_year != $current_year ) {
$last_month = \'\';
}
$current_month = get_post_time( \'F\', TRUE, get_the_ID(), TRUE );
?>
<?php if ( $last_year != $current_year ) : ?><h2><?php echo $current_year; ?></h2><?php endif; ?>
<?php if ( $last_month != $current_month ) : ?><h3><?php echo $current_month; ?></h3><?php endif; ?>
<?php get_template_part( \'template-parts/content-pasakumi\', get_post_type() ); ?>
<?php endwhile; ?>
最合适的回答,由SO网友:Jacob Peattie 整理而成
这里的基本原则是,你不需要真正的“分组”帖子。因此,不需要任何查询魔术(只需要按日期排序,这是默认值)。你要做的是,当你浏览帖子列表时,记下该帖子所属的月份,然后当该月份与之前帖子的月份不同时,这意味着你已经输入了一组新的帖子,应该输出标题。
在您的上下文中,在处理发布后日期时,您希望使用get_the_date()
, 但格式设置为F Y
, 例如,“2019年2月”,这就是职位分组的方式。通过在日期格式中包含日期,可以按天对帖子进行分组。
总之,您有:
// Initialize the current month as null, so that the first group\'s heading is output.
$current_month = null;
while ( have_posts() ) : the_post();
// Compare month of this post, to the current month.
$this_month = get_the_date( \'F J\' );
// If we\'re in a new month, output the month heading.
if ( $this_month !== $current_month ) {
echo \'<h2>\' . $this_month . \'</h2>\';
}
// Set the current month to the month of the current post.
$current_month = $this_month;
// Display post here.
endwhile;