ACF Repeater字段图片在for循环中无法显示的修复方案
解决ACF Repeater字段中图片无法加载的问题
问题原因
ACF的图片字段默认返回格式是图像对象/数组,而非直接的URL,所以直接输出$e['ect_image']会显示Array,无法作为图片src使用。而非Repeater字段能正常显示,大概率是当时设置了返回格式为「URL」。
方案1:修改ACF字段返回格式(最简单)
- 进入WordPress后台的ACF字段组编辑页面,找到「Eye Condition Type」Repeater里的「ect_image」字段;
- 在字段设置的「返回格式」选项中,选择URL;
- 更新字段组后,前端直接使用
$e['ect_image']就能拿到图片地址,示例代码:$ect_items = get_field('ect'); foreach( $ect_items as $e ): echo '<img src="' . esc_url($e['ect_image']) . '" alt="">'; endforeach;
方案2:保留原字段设置,提取数组中的URL(适合需要图片其他属性的场景)
如果需要用到图片的alt、尺寸等信息,不用改字段设置,直接从返回的数组中提取URL:
$ect_items = get_field('ect'); foreach( $ect_items as $e ): // 先判断图片是否存在,避免空数组报错 if( !empty($e['ect_image']) ) { $image_url = $e['ect_image']['url']; $image_alt = $e['ect_image']['alt'] ?: '默认替代文本'; // 处理alt为空的情况 echo '<img src="' . esc_url($image_url) . '" alt="' . esc_attr($image_alt) . '">'; } endforeach;
注意事项
- 始终使用
esc_url()和esc_attr()对输出内容做安全转义,避免XSS安全风险; - 如果用
have_rows()循环Repeater,改用get_sub_field('ect_image')获取图片数组,逻辑和上述代码一致。
内容的提问来源于stack exchange,提问作者J Can
相关产品推荐
相关产品推荐

