我正在使用WordPress中的“高级自定义字段+转发器”加载项构建事件页面。有用。请参阅下面的核心代码。除了比较日期行,即将到来的部分和过去的部分之间的其他所有部分都是相同的,并且在实际情况下有很多行代码。
问题:是否有一种方法可以简化代码,也许将两个部分合并为一个?并将即将发生的事件和过去的事件保持在不同的区域。
<?php
if (have_rows('events')) :
while (have_rows('events')) : the_row();
if ($date_posted >= $date_current) : // compare date
// upcoming events...
endif;
endwhile;
endif;
if (have_rows('events')) :
while (have_rows('events')) : the_row(); // compare date
if ($date_posted < $date_current) :
// past events...
endif;
endwhile;
endif;
?>
答案 0 :(得分:0)
如果要比较日期,则需要使用strtotime()
函数将日期值转换为字符串并比较这些值。
http://php.net/manual/en/function.strtotime.php
例如:
<?php
if (have_rows('events')) :
while (have_rows('events')) : the_row();
$date_posted = get_sub_field('your_date_field_name');
$date_posted = strtotime($date_posted);
$date_current = date('Ymd'); // the date format should be same as the date format on $date_posted
$date_current = strtotime($date_current);
if ($date_posted >= $date_current) : // compare date
// upcoming events...
endif;
endwhile;
endif;
if (have_rows('events')) :
while (have_rows('events')) : the_row(); // compare date
$date_posted = get_sub_field('your_date_field_name');
$date_posted = strtotime($date_posted);
$date_current = date('Ymd'); // the date format should be same as the date format on $date_posted
$date_current = strtotime($date_current);
if ($date_posted < $date_current) :
// past events...
endif;
endwhile;
endif;
?>
答案 1 :(得分:0)
我认为您拥有的是最简单的方法,但这是另一种选择(尽管有些冗长)。
$upcoming = [];
$past = [];
if ( have_rows( 'events' ) ) :
while ( have_rows( 'events' ) ) : the_row();
if ( $date_posted >= $date_current ) : // compare date
$upcoming[] = // upcoming events markup
elseif ( $date_posted < $date_current ) :
$past[] = // past events markup
endif;
endwhile:
endif;
然后使用foreach
在单独的块中输出数组;
foreach( $upcoming as $u_event ) :
echo $u_event;
endforeach;
正如我说的,代码要多一点,但是如果您的目标是将事件合并为一个while