按月对自定义帖子类型帖子进行分组

时间:2019-12-02 作者:dans_j

我需要帮助按月份+年份对帖子进行分组(按帖子发布日期排序),结果如下:

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; ?>

1 个回复
最合适的回答,由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;

相关推荐

permalinks issue and archives

我对运行在WP 3.3上的一个站点有一个问题,当我们通过“/%post\\u id%/%postname%/”使永久链接成为任何内容时,归档页面会断开并变成404。经过一些研究,我明白了为什么从性能的角度来看,这不是一个好的做法,所以我尝试了建议的备选方案:“/%year%/%postname%/”和“/%post\\u id%/%postname%/”这两个建议都有效,只是只有使用post\\u id的建议,归档URL才会变成“/date/2012/11/”,并被找到。根据permalink的任何其他建