在循环中对照上一个日期测试日期对象

时间:2015-05-31 作者:SdeWijs

我正在制作一个页面,其中显示了按日期和时间排序的广播节目列表。radioshow是一种自定义posttype,包含名称、图片、描述和日期/时间信息。每天有不同数量的广播节目。

列表显示和排序正确,但我希望在新的一天开始时显示一个工作日,以便列表更具可读性。

有没有办法对照前一个项目测试循环中当前项目的日期?所以我可以测试日期是否已更改,然后回显一次工作日?

其他信息:我查看了\\u date()函数来完成此操作。但是,此函数仅返回自定义帖子本身创建的日期,而不是显示时的日期字段。该日期是一个自定义字段,与投递日期不同。

编辑:这是工作代码,基于@s\\u ha\\u dum的示例,该示例使工作日在循环中只显示一次,只要它在同一日期。

<?php $args = array(
            \'post_type\' => \'programme\',
            \'posts_per_page\' => 12,
            \'orderby\' => \'prog_order\',
            \'order\' => \'ASC\',
            \'meta_query\' => array(
                array(
                    \'key\' => \'date\',
                    \'value\' => \'\',
                    \'compare\' => \'LIKE\'
                ),
                array(
                    \'key\' => \'time\',
                    \'value\' => \'\',
                    \'compare\' => \'LIKE\'
                )   
            )           
        );`

        $the_query = new WP_Query( $args );     ?>

        <?php if ( $the_query->have_posts() ) {
            $post_date = \'\';
            // setlocale(LC_TIME, \'nl_NL\');
            while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
            <?php $date = DateTime::createFromFormat(\'Ymd\', get_field(\'date\')); ?> 
            <article id="post-<?php the_ID(); ?>" <?php post_class(\'index-card row\'); ?>>
                <?php 
                if ($post_date != $date) { 
                ?>
                    <div class="weekday"><h3><?php echo $date->format(\'l\'); ?></h3></div>
                <?php               
                    $post_date = $date;
                } 
                ?>
                <header class="medium-4 columns text-center">
                    <div class="prog-time"><p><i class="fa fa-calendar"></i> <?php echo $date->format(\'d/m/Y\'); ?> om <?php the_field( \'time\' ); ?> uur</p></div>
                    <img src="<?php the_field( \'afbeelding\' ); ?>" alt="" class="prog-img">
                    <p>Presentatie:<br /><?php the_field( \'presenter\' ); ?></p>
                </header>
                <div class="entry-content medium-8 columns">
                    <h4 class="prog-title"><?php the_title(); ?></h4>
                    <h4 class="prog-sub subheader"><?php the_field( \'name\' ); ?></h4>
                    <div class="prog-desc"><?php the_field( \'description\' ); ?></div>
                </div>
                <hr>
            </article>
        <?php 
            endwhile; 
            } 
         ?> 

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

你需要这样的东西:

$args = array(
  \'post_type\' => \'post\'
);
$q = new WP_Query($args);

if ($q->have_posts()) {
  $date = \'\';
  while ($q->have_posts()) {
    $q->the_post();
    $m = get_post_meta($post->ID,\'field_id\',true);
//     var_dump($m);

    if ($date != $m) {
      // if $m is a strtotime compatible string
      echo date(\'l\',strtotime($m)); 
      $date = $m;
    }

    echo \'<br>\';
    the_title();
    echo \'<br>\';
    echo str_repeat(\'-\',200);
    echo \'<br>\';
  }
}
不过,很大程度上取决于自定义元字段中“日期/时间信息”的格式,而您没有指定。我也不确定每个帖子的meta\\u键是否唯一。我想是的。

结束

相关推荐