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

如何排查ACF group字段内repeater字段的调用代码错误

问题根因

代码核心错误是把ACF Group字段按照Repeater的逻辑做了循环遍历,直接导致内部嵌套字段的上下文定位失效。
ACF Group属于单组集合型字段,本身只存储一组结构化数据,不存在多组重复内容,不需要使用have_rows() + the_row()的循环结构处理外层。多套这层无意义的循环后,ACF无法正确匹配内层Repeater的字段路径,自然读不到数据。

修正方案

两种写法都可以正常取到数据,按需选择即可:

写法1:沿用ACF循环函数

直接通过「Group字段名_子Repeater字段名」的格式定位内层Repeater,不需要额外处理外层Group:

<?php
if( have_rows( 'acf_group_acf_repeater' ) ):
?>
    <ul>
        <?php while( have_rows( 'acf_group_acf_repeater' ) ): the_row();
            $link_text = get_sub_field( 'acf_repeater_field_text' );
            $link_url = get_sub_field( 'acf_repeater_field_url' );
        ?>
        <li>
            <a href="<?php echo esc_url($link_url); ?>"><?php echo esc_html($link_text); ?></a>
        </li>
        <?php endwhile; ?>
    </ul>
<?php endif; ?>

写法2:先获取Group整体数据再遍历

先拿到Group字段的全部结构化数据,再直接遍历内部的Repeater数组,逻辑更直观:

<?php
$group_content = get_field('acf_group');
if( !empty($group_content['acf_repeater']) ):
?>
    <ul>
        <?php foreach( $group_content['acf_repeater'] as $link_item ): ?>
        <li>
            <a href="<?php echo esc_url($link_item['acf_repeater_field_url']); ?>"><?php echo esc_html($link_item['acf_repeater_field_text']); ?></a>
        </li>
        <?php endforeach; ?>
    </ul>
<?php endif; ?>
注意事项
  • 代码中新增的esc_url()、esc_html()是WordPress官方要求的输出转义函数,可避免恶意代码注入,正式环境建议保留。
  • 核心规则记牢:Group字段是单值集合,永远不要给外层Group套have_rows()循环,这类循环只适用于Repeater、Flexible Content这类支持多组重复内容的字段。

内容的提问来源于stack exchange,提问作者Jirka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:16:01