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

如何在Timber Twig模板中调用WCK自定义文章类型字段?

解决WCK自定义字段在Timber Twig模板中无法输出的问题

我看了你的问题和dump内容,核心问题出在变量的结构和调用方式上,咱们一步步来解决:

1. 先理清变量结构

从dump(home_page_content)的结果能看到,你在PHP里通过Timber::get_posts()获取的是一个包含单个Timber\Post对象的数组(size=1),但你在Twig里尝试用post变量去调用字段,这和你存在context里的变量名不匹配,而且没处理数组的层级。

2. 优化PHP代码(更推荐的方式)

因为你的vopthomepage是首页内容类型,通常只会有一条数据,直接在PHP里取数组的第一个元素,把单个Post对象传给Twig会更方便:

// 直接获取第一条(也是唯一一条)首页内容
$context['home_post'] = Timber::get_posts('post_type=vopthomepage')[0];

3. 在Twig模板中正确调用字段

从dump结果能看到,WCK的自定义字段已经直接作为Timber\Post对象的公共属性存在了(比如question_1、answer_1),所以直接通过对象属性调用即可:

{# 先判断对象是否存在,避免空值报错 #}
{% if home_post %}
  <div class="home-faq">
    <h3>{{ home_post.question_1 }}</h3>
    <p>{{ home_post.answer_1 }}</p>
  </div>

  {# 如果要处理数组类型的字段(比如are_you) #}
  {% for option in home_post.are_you %}
    <div>{{ option.your_sub_field_name }}</div> {# 替换成你实际的子字段名 #}
  {% endfor %}
{% endif %}

4. 解释为什么之前的调用失败

  • {{ post.question_1 }}:Twig里没有post这个变量,你把数据存在了home_page_content里,而且它是数组不是单个Post对象;
  • {{ post.get_field('question_1') }}:get_field()是ACF的专属方法,WCK的字段已经直接映射到Post对象属性,不需要用这个方法,同时依然存在变量名错误;
  • {{ post.meta('are_you').question_1 }}:同样是变量名错误,而且are_you本身是数组,需要循环遍历,不是直接调用子字段。

备选方案(不修改PHP的情况)

如果不想调整PHP代码,也可以在Twig里直接处理数组,取出第一个元素再调用字段:

{% set home_post = home_page_content|first %}
{{ home_post.question_1 }}

内容的提问来源于stack exchange,提问作者iain-g

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 22:12:30