Вероятно, это не самый эффективный способ, но я бы сделал это так. Также учитывается тот факт, что даты не должны быть в хронологическом порядке на входе. Обратите внимание, что порядок вывода по-прежнему зависит от порядка ввода, но, поскольку это не вопрос, я не учел его.
<?php
if (have_rows('list_link_items')) :
echo '<select>';
$dateList = []; // List to keep track of dates
while (have_rows('list_link_items')) : the_row();
$date = get_sub_field('date', false, false);
if ($date) :
$date = new DateTime($date);
$date = $date->format('Y');
if (!in_array($date, $dateList)) : // If date isn't in list
echo '<option>', $date, '</option>'; // echo it
$dateList[] = $date; // and save the date to the list
endif;
endif;
endwhile;
echo '</select>';
endif;
?>
Примечание для очень незначительных улучшений производительности
Если вы на 100% уверены, что список ввода всегда упорядочен, вы можете даже заменить массив на строку и проверить только на предыдущую дату.