如何输出附加到 WordPress 和 Timber 类别的 ACF 元字段
How to output ACF meta fields attached to categories in WordPress and Timber
我已将图像字段分配给核心 post 类别并将其输出设置为 图像 ID。我已将图像上传到每个类别,并在我的模板中设置了以下 PHP 和 Timber/Twig 代码以输出类别内容。核心 WordPress 类别字段(如名称、别名和描述)都可以正常工作,但 ACF 字段不会输出。我尝试了多种方法来输出字段,但似乎没有任何效果。
Timber 文档涵盖 posts (<img src="{{ Image(post.meta('hero_image')).src }}" />
) 的图像和其他领域,但几乎没有涵盖类别和术语 ({{ category.meta('category_image') }}
)。后一个例子没用。
我试过转储{{ dump(category) }}
,但没有输出任何与 ACF 字段相关的内容。
关于我遗漏的任何建议。
非常感谢任何帮助。
干杯
PHP
$context = Timber::context();
$terms = get_terms([
'taxonomy' => 'category',
'parent' => '7',
'orderby' => 'name',
'order' => 'ASC',
]);
$category = new \Timber\Term(get_queried_object());
// Get category_image field from category
// Only works on single category pages
$category_image = get_field( 'category_image', $category );
// Tried this, but still nothing
// Would I need to loop through $terms first?
$category_image = get_field( 'category_image', $terms );
if( $category->parent == 0 ) {
$templates = array( 'category.twig' );
$context['categories'] = $terms;
}
Timber::render( $templates, $context );
Timber/Twig
{% for category in categories %}
<div class="category">
<a href="{{ site.link }}/category/stories/{{ category.slug }}">
<figure>
<figcaption>
{{ category.name }}
</figcaption>
<!-- Does not work -->
{{ category.meta('category_image') }}
</figure>
</a>
</div>
{% endfor %}
如果您希望您的术语的工作方式类似于您习惯处理 Timber 帖子的方式,则需要确保您使用 Timber 提供的功能来获得所有 Timber 功能,而不是核心 WordPress 功能。
此外,如果您尝试获取多个类别的图像,您的代码片段将不起作用,因为 ACF 的 get_field()
函数不接受 IDs/objects 的数组。这与 Timber 没有直接关系,但与 ACF 的工作原理有关。
(这个不行)
// Tried this, but still nothing
// Would I need to loop through $terms first?
$category_image = get_field( 'category_image', $terms );
所以不用
$terms = get_terms( [
'taxonomy' => 'category',
'parent' => '7',
'orderby' => 'name',
'order' => 'ASC',
] );
你应该使用
$terms = Timber::get_terms( [
'taxonomy' => 'category',
'parent' => '7',
'orderby' => 'name',
'order' => 'ASC',
] );
这样,您将获得 Timber\Term
个对象,而不是 WP_Term
个对象,就像您 $category = new \Timber\Term( get_queried_object() );
时一样。只有这样你才能使用 category.meta()
.
只要您更新 PHP 代码,您的 Twig 文件就应该可以工作。您不必遍历 PHP 中的类别来获取所有图像。您可以从
更新 Twig 中类别图像的代码
<!-- Does not work -->
{{ category.meta('category_image') }}
至
<img src="{{ Image(category.meta('category_image')).src }}" />
小建议 – 确保您 return 在 ACF 的 category_image
字段组配置中只有图像 ID。这样,ACF 就不用先去获取图片信息了,可以节省一些性能。
也许你甚至可以替换
<a href="{{ site.link }}/category/stories/{{ category.slug }}">
和
<a href="{{ category.link }}">
我已将图像字段分配给核心 post 类别并将其输出设置为 图像 ID。我已将图像上传到每个类别,并在我的模板中设置了以下 PHP 和 Timber/Twig 代码以输出类别内容。核心 WordPress 类别字段(如名称、别名和描述)都可以正常工作,但 ACF 字段不会输出。我尝试了多种方法来输出字段,但似乎没有任何效果。
Timber 文档涵盖 posts (<img src="{{ Image(post.meta('hero_image')).src }}" />
) 的图像和其他领域,但几乎没有涵盖类别和术语 ({{ category.meta('category_image') }}
)。后一个例子没用。
我试过转储{{ dump(category) }}
,但没有输出任何与 ACF 字段相关的内容。
关于我遗漏的任何建议。
非常感谢任何帮助。
干杯
PHP
$context = Timber::context();
$terms = get_terms([
'taxonomy' => 'category',
'parent' => '7',
'orderby' => 'name',
'order' => 'ASC',
]);
$category = new \Timber\Term(get_queried_object());
// Get category_image field from category
// Only works on single category pages
$category_image = get_field( 'category_image', $category );
// Tried this, but still nothing
// Would I need to loop through $terms first?
$category_image = get_field( 'category_image', $terms );
if( $category->parent == 0 ) {
$templates = array( 'category.twig' );
$context['categories'] = $terms;
}
Timber::render( $templates, $context );
Timber/Twig
{% for category in categories %}
<div class="category">
<a href="{{ site.link }}/category/stories/{{ category.slug }}">
<figure>
<figcaption>
{{ category.name }}
</figcaption>
<!-- Does not work -->
{{ category.meta('category_image') }}
</figure>
</a>
</div>
{% endfor %}
如果您希望您的术语的工作方式类似于您习惯处理 Timber 帖子的方式,则需要确保您使用 Timber 提供的功能来获得所有 Timber 功能,而不是核心 WordPress 功能。
此外,如果您尝试获取多个类别的图像,您的代码片段将不起作用,因为 ACF 的 get_field()
函数不接受 IDs/objects 的数组。这与 Timber 没有直接关系,但与 ACF 的工作原理有关。
(这个不行)
// Tried this, but still nothing
// Would I need to loop through $terms first?
$category_image = get_field( 'category_image', $terms );
所以不用
$terms = get_terms( [
'taxonomy' => 'category',
'parent' => '7',
'orderby' => 'name',
'order' => 'ASC',
] );
你应该使用
$terms = Timber::get_terms( [
'taxonomy' => 'category',
'parent' => '7',
'orderby' => 'name',
'order' => 'ASC',
] );
这样,您将获得 Timber\Term
个对象,而不是 WP_Term
个对象,就像您 $category = new \Timber\Term( get_queried_object() );
时一样。只有这样你才能使用 category.meta()
.
只要您更新 PHP 代码,您的 Twig 文件就应该可以工作。您不必遍历 PHP 中的类别来获取所有图像。您可以从
更新 Twig 中类别图像的代码<!-- Does not work -->
{{ category.meta('category_image') }}
至
<img src="{{ Image(category.meta('category_image')).src }}" />
小建议 – 确保您 return 在 ACF 的 category_image
字段组配置中只有图像 ID。这样,ACF 就不用先去获取图片信息了,可以节省一些性能。
也许你甚至可以替换
<a href="{{ site.link }}/category/stories/{{ category.slug }}">
和
<a href="{{ category.link }}">