就像标题一样,我试图从附加到分类标准的自定义字段中获取图像。我目前有一个名为city的分类,这个术语可能就像新墨西哥州的Albuquerque。我已经使用ACF创建了一个图像自定义字段(' city_hero_image')并选择了ID作为返回值。看一下来源,在src标签中它表示“未知”'当执行print_r时,它基本上返回一个空对象数组。
我的分类 - city.php是
$context['posts'] = Timber::get_posts();
$context['categories'] = Timber::get_terms('city');
$cover_image_id = get_field('city_hero_image');
$context['cover_image'] = new TimberImage($cover_image_id);
Timber::render( $templates, $context );
在我的分类中 - city.twig我有
<img src="{{cover_image.get_url}}" class="img-responsive" alt="">
答案 0 :(得分:5)
当您运行get_field
时,该函数将尝试从上下文中猜测它应该从哪里查找自定义字段。上下文通常是The Loop。
因此,如果您运行$cover_image_id = get_field( 'city_hero_image' );
,ACF将尝试从当前帖子的ID中获取自定义字段city_hero_image
,该ID无法找到。在帖子上也没有定义city_hero_image
,它是根据你的术语定义的。
get_field
,则会使用当前帖子的ID加载字段。但是,对于Timber来说,你永远不会进入The Loop。事实上木材习惯于摆脱The Loop。city_hero_image
),则需要明确告诉get_field
使用get_field( 'city_hero_image', 'city_termid' )
查看该分类法, termid将是您想要数据的术语的ID。在Timber中,get_field
的工作方式略有不同。 Timber将使用自定义字段作为属性填充帖子或术语对象。
如果您的分类中有自定义字段city_hero_image
,则可以通过多种方式访问它:
$category->city_hero_image
get_field
方法:$category->get_field('city_hero_image)
{{ category.city_hero_image }}
gef_field
方法:{{ category.get_field('city_hero_image') }}
同样适用于Timber \ Post对象上的ACF字段。当您想要访问字段类型Repeater或Flexible Content的数据时,您只需要显式调用get_field
。
让我们在你的例子中看一下。首先需要获取显示的术语。对于存档页面,您可以使用函数get_queried_object()
,它将根据所访问的存档返回一个对象:
WP_Term
对象。WP_Post_Type
对象。WP_User
对象。您有一个术语存档(taxonomy-city.php
),因此它将是
$term = new \Timber\Term( get_queried_object() );
$cover_image = $term->city_hero_image;
$context['term'] = $term;
$context['cover_image'] = new \Timber\Image($cover_image);