将来自不同帖子的ACF中继器字段分组

时间:2018-07-26 作者:Captain Yar

我做了一系列的搜索,似乎找不到一个特定于我要做的事情的解决方案。我也试着在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循环正在将它们丢弃。因此,如果您有任何想法或建议,我们将不胜感激。

谢谢

1 个回复
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
}

结束

相关推荐

将来自不同帖子的ACF中继器字段分组 - 小码农CODE - 行之有效找到问题解决它

将来自不同帖子的ACF中继器字段分组

时间:2018-07-26 作者:Captain Yar

我做了一系列的搜索,似乎找不到一个特定于我要做的事情的解决方案。我也试着在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循环正在将它们丢弃。因此,如果您有任何想法或建议,我们将不胜感激。

谢谢

1 个回复
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
}

相关推荐