如何检索 ACF 中字段的值?

Posted

技术标签:

【中文标题】如何检索 ACF 中字段的值?【英文标题】:How to retrieve the value of the field in ACF? 【发布时间】:2021-11-23 05:47:27 【问题描述】:
<?php if( $fields )
 
foreach( $fields as $field)

    $value = get_field( $field['name'] );

    if ($value) 
    
        echo '<dl>';
            echo '<dt>' . $field['label'] . '</dt>';
            echo '<dd>' . $field['value'] . '</dd>';
        echo '</dl>';
    
 

 
?>

这就是我所拥有的。如果我在acf_get_fields 上执行var_dump,它显然会将值设置为NULL。我本可以知道的,因为它写在这里:

https://www.advancedcustomfields.com/resources/get_field_object/

问题:我必须首先获取特定 field_group 中的所有字段,因此我使用的是acf_get_fields

我认为使用 $field['value'] 可以让它工作,但显然这不起作用。

有人可以帮我检索每个字段的 foreach 中的值吗?肯定有办法吗?

PS:

<?php 

$fields = get_fields();

if( $fields ): ?>
    <ul>
        <?php foreach( $fields as $name => $value ): ?>
            <li><b><?php echo $name; ?></b> <?php echo $value; ?></li>
        <?php endforeach; ?>
    </ul>
<?php endif; ?>

这给了我所有的字段。我只需要来自特定字段组的特定字段列表。那就是问题所在。有大神知道怎么解决吗?

【问题讨论】:

【参考方案1】:
<?php 

$fields = get_field('fieldname'); 
        
foreach( $fields as $field)

   
echo '<dl>';
            
            echo '<dd>' . $field . '</dd>';
        echo '</dl>';
    

?>

【讨论】:

给我一个错误:为 foreach() 提供的参数无效 另外,你的编辑给了我同样的问题。【参考方案2】:

认为该值始终为 NULL,因为您仅获取组字段,而不是帖子中的字段。举了几个例子,也许会对你有所帮助。

$post_id  = 123;
$group_id = 1234;

// Get post fields
$post_fields = get_fields($post_id);

foreach ($post_fields as $key => $value) 
    if ($key == 'my_custom_field') 
        echo $value;
    


// Get group fields
$group_fields = acf_get_fields($group_id);
foreach ($group_fields as $key => $group_field) 
    if ($key == 'my_custom_field') 
        echo $value;
    


// Get field objects
$field_objects = get_field_objects($post_id);

foreach ($field_objects as $key => $field_object) 
    if ($key == 'my_custom_field') 
        echo $field_object['value'];
    
    if ($field_object['name'] == 'my_custom_field') 
        echo $field_object['value'];
    
    // only show fields from specific group
    if ($field_object['parent'] == $group_id) 
        echo $field_object['value'];
    

【讨论】:

谢谢,阿诺特。这是否意味着我应该摆脱 post_id 并使用组 id 块来获得我想要的东西?我现在遇到的问题是来自该 field_group 的输入字段的最后一个值显示了两次。为什么我也应该从帖子中获取它?或者有什么办法可以得到当前的帖子?我的目标很简单:我只需要获取特定的字段组及其字段,而不是显示所有可用的字段组字段。 换句话说:我还是不明白。我有一个特定的组 ID,我想显示其字段。基本上,我需要这些字段具有特定的样式和 div,所以我想在那里剪切数组并继续接下来的三个,它们位于不同的字段组中,依此类推......

以上是关于如何检索 ACF 中字段的值?的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式更新转发器字段中特定组字段的值 - 高级自定义字段 (ACF) - Wordpress

当同一转发器字段的值以其他语言更新时,ACF 转发器字段中的值是不是为空?

使用自定义帖子类型的标题列表作为 ACF 字段的值

ACF 从父页面获取转发器的子字段

在 WooCommerce 挂钩中显示高级自定义字段 (ACF) 值

为啥我的 ACF 自定义字段总是返回 false 或数组?