ACF转发器即将发生和过去的事件

时间:2018-09-04 13:14:56

标签: php wordpress advanced-custom-fields

我正在使用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;
?>

2 个答案:

答案 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

,则对您可能会更好