PHP Foreach循环遍历ACF重复字段仅显示最后一行如何修复
问题根因
foreach循环中每次迭代都用=直接给$resultaat赋值,前序遍历得到的内容会被新值覆盖,循环结束后变量仅保留最后一条数据,因此最终只输出最后一行内容。另外原代码未初始化结果变量,当重复器字段无值时会触发PHP未定义变量警告。
修复后代码
<?php // 为Events Manager创建邮件自定义占位符 add_filter('em_event_output_placeholder', 'datatable_placeholders', 1, 3); function datatable_placeholders($replace, $EM_Event, $result) { if($result == '#_DATATABEL') { $current_event_id = $EM_Event->output("#_EVENTPOSTID"); $replace = create_data_table_mail($current_event_id); } return $replace; } function create_data_table_mail($current_event_id) { // 初始化结果变量,避免无数据时抛出变量未定义警告 $resultaat = ''; $repeater_data = get_field('gekoppelde_cursus_leergang', $current_event_id); if(!empty($repeater_data)) { // 如需输出HTML表格,可在此处拼接表格起始标签 例:$resultaat = '<table border="1" cellpadding="5">'; foreach($repeater_data as $item) { // 使用.=拼接字符串,保留每次循环得到的内容,而非覆盖 $resultaat .= $item['cursus_leergang']; // 表格行格式可写为:$resultaat .= '<tr><td>'.$item['cursus_leergang'].'</td></tr>'; } // 拼接表格闭合标签 例:$resultaat .= '</table>'; } return $resultaat; } ?>
核心修改说明
- 移除无意义的
$replace = 'none'冗余赋值,该行会被后续逻辑覆盖,不产生任何作用 - 提前初始化结果变量
$resultaat,兼容字段为空的边界场景,避免PHP警告 - 将循环内的赋值运算符从
=改为.=,实现多轮循环内容的拼接追加,不会覆盖之前的遍历结果 - 增加重复器数据非空判断,避免无效遍历
- 预留HTML表格拼接位置,可直接适配邮件的富文本展示需求,将每条重复器内容渲染为标准表格行
内容的提问来源于stack exchange,提问作者Thijmen van Doorn
相关产品推荐
相关产品推荐

