如何获取ACF中指定字段组内各字段的对应存储值?
问题核心原因
acf_get_fields 仅返回指定字段组的配置信息(包含字段名、标签、类型等设置),本身不会加载当前文章/对象的存储值,因此$field['value']默认是空值。你已经通过get_field($field['name'])正确拉取到了字段值存储在$value变量中,只是输出时错误调用了不存在的$field['value']才导致无内容。
完整实现方案
1. 基础实现
调用acf_get_fields时传入目标字段组的Key(格式为group_xxxxxx,可在字段组编辑页的URL中查询到),即可精准筛选该分组下的字段,不会返回全站字段:
<?php // 替换为你自己的目标字段组Key $target_group_key = 'group_650xxxxxxxxx'; // 仅获取指定字段组下的所有字段配置 $fields = acf_get_fields( $target_group_key ); if ( $fields ) { foreach ( $fields as $field ) { // 拉取当前页面对应字段的实际值 // 如果是选项页字段,第二个参数传'option';如果是指定文章传对应文章ID即可 $value = get_field( $field['name'] ); if ( $value ) { echo '<dl>'; echo '<dt>' . $field['label'] . '</dt>'; // 直接输出已经拉取到的$value即可 echo '<dd>' . $value . '</dd>'; echo '</dl>'; } } } ?>
2. 性能优化版本(适合字段较多的场景)
如果字段数量较多,可先一次性拉取当前页面所有字段值,再遍历匹配指定字段组的配置,避免循环中多次查询数据库:
<?php $target_group_key = 'group_650xxxxxxxxx'; $fields = acf_get_fields( $target_group_key ); // 一次性拉取当前页面所有字段的键值对 $all_field_values = get_fields(); if ( $fields && $all_field_values ) { foreach ( $fields as $field ) { // 直接从已拉取的全量值中匹配对应字段的值 $value = $all_field_values[ $field['name'] ] ?? ''; if ( $value ) { echo '<dl>'; echo '<dt>' . $field['label'] . '</dt>'; echo '<dd>' . $value . '</dd>'; echo '</dl>'; } } } ?>
内容的提问来源于stack exchange,提问作者Johan
相关产品推荐
相关产品推荐

