Ретранслятор ACF предстоящие и прошедшие события - PullRequest
0 голосов
/ 04 сентября 2018

Я создаю страницу событий с надстройкой Advanced Custom Fields + Repeater в 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 голосов
/ 04 сентября 2018

Я думаю, что у вас есть самый простой путь, но здесь есть другой вариант (хотя и более многословный).

$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

0 голосов
/ 04 сентября 2018

Если вы хотите сравнить дату, вам необходимо преобразовать значение даты в строку с помощью функции 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;
?>
...