按自定义字段值(开始时间和结束时间)分组

时间:2016-03-14 作者:Rob

我有以下循环,它输出会议的日程安排。

目前,它正在通过自定义帖子类型循环,获取信息,然后在块中输出。因此,基本上每个块都是一个定时会话。

是否可以将任何具有相同时间的项目放在一个块中?如果两个项目的开始时间和结束时间为10:00-11:00,那么我希望将它们分组在一起。

目前,它只是将它们并排输出。

<?php $args = array( \'posts_per_page\' => -1, \'orderby\' => \'meta_value_num\', \'post_type\' => \'sessions\', \'meta_key\' => \'start_time\', \'order\' => \'ASC\');
$rand_posts = get_posts( $args );
foreach ( $rand_posts as $post ) :
setup_postdata( $post ); ?>

    <div class="columns large-3" data-equalizer-watch>
        <?php echo the_field(\'start_time\'); ?>- <?php echo the_field(\'end_time\'); ?><br />

        <p><b><?php echo the_title(); ?></b></p>
        <?php $taxonomy = \'tracks\';
        $terms = get_the_terms( $post->ID , $taxonomy );
        if ( !empty( $terms ) ) :
            foreach ( $terms as $term ) {
                $link = get_term_link( $term, $taxonomy );
                if ( !is_wp_error( $link ) ) ?>
                    <?php echo $term->name; ?>
            <?php }
        endif; ?>

    </div>

<?php endforeach;
wp_reset_postdata(); ?>

1 个回复
最合适的回答,由SO网友:mmm 整理而成

尝试此方法,首先以相同的时间堆叠所有帖子

$tabEvent = [];

foreach ( $rand_posts as $post ) {
    setup_postdata( $post );

    $start_time = get_field("start_time");
    $end_time = get_field("end_time");


    $index = "$start_time|$end_time";


    // store all the posts with same times

    if (!isset($tabEvent[$index])) {
        $tabEvent[$index] = [];
    }

    $tabEvent[$index][] = $post;

}

foreach ($tabEvent as $index => $listeEvent ) {

    echo "<h2>$index<h2/>";


    foreach ($listeEvent as $post) {

        // all posts with the same times

        echo "<h3>{$post->post_title}<h3/>";

    }

}

相关推荐

如何在wp-Query中比较不同的时间戳以获取事件自定义帖子类型?

我有一个带有自定义元数据库的自定义帖子类型(as seen on wptheming.com) 并且希望进行查询以显示即将发生的事件,例如在侧边栏中,过去的日期被忽略。但我需要一个当前时间的值来和事件开始时间进行比较。现在我从current_time(\'mysql\') 看起来是这样的:2012-02-16 13:15:31元的开始时间如下所示:201108121100如何使这两个日期具有可比性?我可以在查询中执行吗?或者是否有其他解决方案?以下是我到目前为止的查询(值留空,时间戳回显):<?ph