You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 16:54:21