按 acf 日期转发器字段对自定义 post 类型进行排序
Sort custom post types by acf date repeater field
我有一个名为 project
的自定义 post 类型。由于每个项目都可以有多个发生日期,因此我创建了一个名为 dates
的转发器字段日期和时间以及一个名为 date
的子字段。
我想在如下页面中显示所有 post(按 acf 子字段 date
排序):
project A: 10th march
project B: 17th march
project A: 21st march
project C: 30th march
project A: 5th april
project B: 12th april
and so on...
我怎样才能做到这一点?
以下是我的做法,希望对遇到同样问题的人有所帮助。我创建了一个包含 post id 和 date repeater 字段的数组并循环遍历它。
$events = new WP_Query(array('post_type' => 'project'));
if($events->have_posts()) :
$listPostEvents = array(); // creating an empty array
while ( $events->have_posts() ) : $events->the_post();
if (have_rows('repeater_dates')): // name of the repeater field
while (have_rows('repeater_dates')) : the_row();
$date = strtotime( get_sub_field('start_date_repeat') ); // keep the date as Unix timestamp format - easier to sort
$listPostEvents[] = array(
'date' => $date,
'ID' => $post->ID
);
endwhile;
endif;
endwhile;
$dates = array_column($listPostEvents, 'date'); // list all dates
array_multisort($dates, SORT_ASC, $listPostEvents); // sort these dates chronologically
foreach ($listPostEvents as $listPostEvent) : // loop through the array sorted by dates
$postID = $listPostEvent['ID'];
echo '<article class="event post-' . $postID . '">';
echo '<a href="' . esc_url( get_permalink($postID) ) . '">';
the_post_thumbnail('large');
echo '</a>';
echo '<time>' . date_i18n( "d.m.Y", $listPostEvent['date'] ) . '</time>'; // echo the dates in day.month.Year translatable format
echo '<a href="' . get_permalink($postID) . '">' . get_the_title($postID) . '</a>';
echo '</article>';
endforeach;
endif;
我有一个名为 project
的自定义 post 类型。由于每个项目都可以有多个发生日期,因此我创建了一个名为 dates
的转发器字段日期和时间以及一个名为 date
的子字段。
我想在如下页面中显示所有 post(按 acf 子字段 date
排序):
project A: 10th march
project B: 17th march
project A: 21st march
project C: 30th march
project A: 5th april
project B: 12th april
and so on...
我怎样才能做到这一点?
以下是我的做法,希望对遇到同样问题的人有所帮助。我创建了一个包含 post id 和 date repeater 字段的数组并循环遍历它。
$events = new WP_Query(array('post_type' => 'project'));
if($events->have_posts()) :
$listPostEvents = array(); // creating an empty array
while ( $events->have_posts() ) : $events->the_post();
if (have_rows('repeater_dates')): // name of the repeater field
while (have_rows('repeater_dates')) : the_row();
$date = strtotime( get_sub_field('start_date_repeat') ); // keep the date as Unix timestamp format - easier to sort
$listPostEvents[] = array(
'date' => $date,
'ID' => $post->ID
);
endwhile;
endif;
endwhile;
$dates = array_column($listPostEvents, 'date'); // list all dates
array_multisort($dates, SORT_ASC, $listPostEvents); // sort these dates chronologically
foreach ($listPostEvents as $listPostEvent) : // loop through the array sorted by dates
$postID = $listPostEvent['ID'];
echo '<article class="event post-' . $postID . '">';
echo '<a href="' . esc_url( get_permalink($postID) ) . '">';
the_post_thumbnail('large');
echo '</a>';
echo '<time>' . date_i18n( "d.m.Y", $listPostEvent['date'] ) . '</time>'; // echo the dates in day.month.Year translatable format
echo '<a href="' . get_permalink($postID) . '">' . get_the_title($postID) . '</a>';
echo '</article>';
endforeach;
endif;