WordPress ACF Repeater日期字段:每月仅显示首个条目
解决ACF Repeater日期月份筛选按钮去重问题
要实现每个月份仅显示一个筛选按钮,核心是用数组记录已输出的月份,循环时跳过重复项。修改筛选菜单的代码如下:
<?php if( have_rows('departure_dates') ): ?> <div class="tour__dates-filter js-dates"> <?php // 初始化数组存储已处理的月份(用Y-m格式区分不同年份的同月) $seen_months = array(); ?> <?php while( have_rows('departure_dates') ): the_row(); ?> <?php $dateMonth = get_sub_field('date', false, false); $dateNew = new DateTime($dateMonth); // 生成唯一月份标识:如果不需要区分年份,可改为 $month_key = $dateNew->format('M'); $month_key = $dateNew->format('Y-m'); $month_label = $dateNew->format('M'); ?> <?php if( !in_array($month_key, $seen_months) ): ?> <button class="tour__dates-filter__item"><span><?php echo $month_label; ?></span></button> <?php // 将当前月份加入已处理数组 $seen_months[] = $month_key; ?> <?php endif; ?> <?php endwhile; ?> </div> <?php endif; ?>
关键说明:
- 用
$seen_months数组记录已经输出过的月份,避免重复渲染按钮 - 月份标识用
Y-m(如2024-01),可以区分不同年份的同一个月份(比如2024年1月和2025年1月会显示两个独立按钮);如果不需要区分年份,直接改成$month_key = $dateNew->format('M')即可 - 只有当当前月份不在
$seen_months数组中时,才渲染按钮,并将该月份加入数组
内容的提问来源于stack exchange,提问作者Marco
相关产品推荐
相关产品推荐

