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

WordPress Timber中如何获取ACF字段组的子字段对象?

在Timber中同时获取ACF子字段的标签与值

嘿,我之前在项目里也遇到过一模一样的需求!Timber本身虽然没有专门封装一个和ACF原生get_sub_field_object完全对应的方法,但完全可以通过ACF的原生函数结合Timber的用法来实现,不用分开循环标签和值,一次遍历就能搞定。

下面给你两种常用的实现方式,你可以根据自己的开发习惯选择:

方式一:在Twig模板中直接调用ACF函数

Timber允许在Twig里直接调用PHP函数(通过function()方法),所以我们可以直接使用ACF的get_field_object来获取子字段的标签信息,同时配合已经拿到的字段值来渲染内容:

{# 假设你已经在PHP中把apartment_specs字段值传到了Twig上下文 #}
{% if apartment_specs %}
  {% for spec_item in apartment_specs %}
    <div class="spec-group">
      {# 遍历当前重复项里的所有子字段键值对 #}
      {% for field_name, field_value in spec_item %}
        {# 调用ACF的get_field_object获取子字段的完整信息(包括标签) #}
        {% set field_obj = function('get_field_object', field_name, post.id) %}
        
        {% if field_obj and field_value %}
          <div class="spec-item">
            <strong>{{ field_obj.label }}:</strong> {{ field_value }}
          </div>
        {% endif %}
      {% endfor %}
    </div>
  {% endfor %}
{% endif %}

方式二:在PHP层提前整理好标签与值的组合

如果你更习惯在PHP里处理数据逻辑,再把整理好的数组传到Twig渲染,可以这样做:

// 在你的PHP模板文件(比如single.php或page.php)中
$context = Timber::context();

// 获取apartment_specs的字段值和字段对象(包含子字段定义)
$apartment_specs = get_field('apartment_specs');
$specs_field_obj = get_field_object('apartment_specs');
$sub_fields = $specs_field_obj['sub_fields'] ?? [];

$formatted_specs = [];
if ($apartment_specs && $sub_fields) {
  foreach ($apartment_specs as $spec_group) {
    $group_data = [];
    foreach ($sub_fields as $sub_field) {
      $field_name = $sub_field['name'];
      $group_data[] = [
        'label' => $sub_field['label'],
        'value' => $spec_group[$field_name]
      ];
    }
    $formatted_specs[] = $group_data;
  }
}

// 把整理好的数据传到Twig上下文
$context['formatted_specs'] = $formatted_specs;
Timber::render('your-template.twig', $context);

然后在Twig里就可以直接循环渲染整理好的数据:

{% if formatted_specs %}
  {% for group in formatted_specs %}
    {% for spec in group %}
      {% if spec.value %}
        <p>{{ spec.label }}: {{ spec.value }}</p>
      {% endif %}
    {% endfor %}
  {% endfor %}
{% endif %}

补充说明

如果你是在ACF的have_rows循环结构中(而不是直接用get_field拿数组),也可以直接在Twig里调用function('get_sub_field_object', 'your_sub_field_name'),用法和ACF原生PHP代码几乎一致,Timber会自动处理上下文。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:42:52