Timber Twig 和 ACF 从分类页面上的自定义字段获取图像
Timber Twig and ACF Get image from custom field on taxonomy page
就像标题一样,我正在尝试从附加到分类法的自定义字段中获取图像。我目前有一个名为城市的分类法,这个词有点像新墨西哥州的阿尔伯克基。我用 ACF 创建了一个图像自定义字段 ('city_hero_image'),并选择了 ID 作为 return 值。查看源代码,在 src 标记中它说 'unknown' 并且在执行 print_r 时它 returns 基本上是一个空的 object 数组。
我的taxonomy-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 );
在我的 taxonomy-city.twig 我有
<img src="{{cover_image.get_url}}" class="img-responsive" alt="">
get_field 默认 WordPress
当您 运行 get_field
时,该函数将尝试猜测它应该从上下文中查找自定义字段的对象。上下文通常是循环。
因此,如果您 运行 $cover_image_id = get_field( 'city_hero_image' );
,ACF 将尝试从当前 post 的 ID 中获取自定义字段 city_hero_image
,但它找不到.在 post 上也没有定义 city_hero_image
,它是在您的术语上定义的。
- 如果你在循环中运行
get_field
,它将使用当前post的ID来加载一个字段。但是,使用 Timber,您永远不会进入 The Loop。木材实际上是用来摆脱 The Loop 的。
- 如果你想从术语对象加载一个字段(在你的例子中
city_hero_image
),你需要明确告诉 get_field
使用 get_field( 'city_hero_image', 'city_termid' )
查看该分类,而 termid 将是您想要数据的术语的 ID。
get_field 木材
在 Timber 中,get_field
的工作方式略有不同。 Timber 将使用自定义字段作为属性填充 post 或术语对象。
如果您的分类中有自定义字段 city_hero_image
,您可以通过多种方式访问它:
在PHP
- 直接通过其 属性:
$category->city_hero_image
- 通过Timber\Term对象的
get_field
方法:
$category->get_field('city_hero_image)
在 Twig
- 直接通过其 属性:
{{ category.city_hero_image }}
- 通过
gef_field
方法:
{{ category.get_field('city_hero_image') }}
同样适用于 Timber\Post 对象上的 ACF 字段。当你想访问字段类型 Repeater 或 Flexible Content 的数据时,你只需要显式调用 get_field
。
放在一起
让我们看看你的例子。您首先需要获取显示的术语。对于存档页面,您可以使用函数 get_queried_object()
,它将 return 一个对象,具体取决于访问的存档:
- 对于术语档案,它将是一个
WP_Term
对象。
- 对于 post 类型的存档,它将是一个
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);
就像标题一样,我正在尝试从附加到分类法的自定义字段中获取图像。我目前有一个名为城市的分类法,这个词有点像新墨西哥州的阿尔伯克基。我用 ACF 创建了一个图像自定义字段 ('city_hero_image'),并选择了 ID 作为 return 值。查看源代码,在 src 标记中它说 'unknown' 并且在执行 print_r 时它 returns 基本上是一个空的 object 数组。
我的taxonomy-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 );
在我的 taxonomy-city.twig 我有
<img src="{{cover_image.get_url}}" class="img-responsive" alt="">
get_field 默认 WordPress
当您 运行 get_field
时,该函数将尝试猜测它应该从上下文中查找自定义字段的对象。上下文通常是循环。
因此,如果您 运行 $cover_image_id = get_field( 'city_hero_image' );
,ACF 将尝试从当前 post 的 ID 中获取自定义字段 city_hero_image
,但它找不到.在 post 上也没有定义 city_hero_image
,它是在您的术语上定义的。
- 如果你在循环中运行
get_field
,它将使用当前post的ID来加载一个字段。但是,使用 Timber,您永远不会进入 The Loop。木材实际上是用来摆脱 The Loop 的。 - 如果你想从术语对象加载一个字段(在你的例子中
city_hero_image
),你需要明确告诉get_field
使用get_field( 'city_hero_image', 'city_termid' )
查看该分类,而 termid 将是您想要数据的术语的 ID。
get_field 木材
在 Timber 中,get_field
的工作方式略有不同。 Timber 将使用自定义字段作为属性填充 post 或术语对象。
如果您的分类中有自定义字段 city_hero_image
,您可以通过多种方式访问它:
在PHP
- 直接通过其 属性:
$category->city_hero_image
- 通过Timber\Term对象的
get_field
方法:
$category->get_field('city_hero_image)
在 Twig
- 直接通过其 属性:
{{ category.city_hero_image }}
- 通过
gef_field
方法:
{{ category.get_field('city_hero_image') }}
同样适用于 Timber\Post 对象上的 ACF 字段。当你想访问字段类型 Repeater 或 Flexible Content 的数据时,你只需要显式调用 get_field
。
放在一起
让我们看看你的例子。您首先需要获取显示的术语。对于存档页面,您可以使用函数 get_queried_object()
,它将 return 一个对象,具体取决于访问的存档:
- 对于术语档案,它将是一个
WP_Term
对象。 - 对于 post 类型的存档,它将是一个
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);