如何在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
相关产品推荐
相关产品推荐

