如何输出附加到 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 }}">