Я думаю, что у вас есть самый простой путь, но здесь есть другой вариант (хотя и более многословный).
$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