我做了一系列的搜索,似乎找不到一个特定于我要做的事情的解决方案。我也试着在ACF支持论坛上发布这篇文章,但编辑后它一直在删除我的文章。。。。无论如何,事情是这样的:
我创建了一个事件自定义帖子类型。在每一个帖子中,都有复述器,允许用户选择多个日期和时间。我想做的,而且我不确定我的想法是否可能,是按日期将具有相同日期的事件分组。
类似这样:
日期1
事件1事件2事件3日期2
事件2,事件3,日期3
事件1、事件2、事件4等等。。。。
虽然我遇到过类似的问题,但我没有什么可以做的。下面是我如何处理代码:
while循环外部:
$current_header = \'\';
while循环内部:
$date_count = count(get_field(\'dates_times\'));
// Group events
for ($i = 0; $i < $date_count; $i++) :
// Get repeater fields
$dates = \'dates_times_\' . $i . \'_date\';
// Snatch up the postmeta
$temp_date = get_post_meta( get_the_ID(), $dates, true );
// Convert Date
$date = DateTime::createFromFormat(\'Ymd\', $temp_date);
if ( is_object($date) ) $day = $date->format(\'l - F, j\');
// Group by day
if ( $day != $current_header ) :
$current_header = $day;
echo \'<h2 class="medium-12 cell">\' . $day . \'</h2>\';
endif;
// REST OF POST CODE HERE
endfor;
这将返回:
日期1
事件1日期3
事件1日期1
事件2日期2
事件2日期3
事件2日期1
事件3等等。。。。他们没有按预期分组。我假设for循环正在将它们丢弃。因此,如果您有任何想法或建议,我们将不胜感激。
谢谢
SO网友:nmr
首先收集数组中当前帖子(事件)的所有日期。然后遍历数组并获取每个日期的所有事件。
// all dates from current event in format "Ymd"
$all_dates = [];
for ($i = 0; $i < $date_count; $i++) {
// Get repeater fields
$dates = \'dates_times_\' . $i . \'_date\';
$temp_date = get_post_meta( get_the_ID(), $dates, true );
// if value of dates_times_XX_date is in format \'Ymd\' conversion is not needed
// Group by day
if ( !isset( $all_dates[$temp_date] ) )
$all_dates[] = $temp_date;
}
if ( !empty($all_dates) )
sort($all_dates);
foreach ($all_dates as $l_date) {
$query = "select post_id from {$wpdb->postmeta} where meta_key like \'dates_times_%_date\' and meta_value=%s";
// IDs of events with that date
$events = $wpdb->query( $wpdb->prepare($query, $l_date) );
// get events with IDs,
// display header \'<h2 class="medium-12 cell"> date </h2>\';
// display events
// REST OF POST CODE HERE
}