Wordpress - 我无法在 Twig/Timber 中显示关系字段的所选项目的标题

Wordpress - I can't display the title of a relationship field's selected item in Twig/Timber

我是 Twig/Timber 的新手。我有一个 post,它有一个 ACF 关系字段,允许您从特定的 post 类型中进行选择(称之为 "training")。假设我在培训中有一个 post,名为 "Aerobics",这就是我在关系字段中选择的那个。在页面上,我想显示健美操的标题和日期。

在 Timber 中,我将其定义为

$context['related_training'] = get_field('related_pd_interactive_training');

不知道怎么显示。这两个 return 都是正确的,但是当我尝试在关系字段中显示项目的标题时,它什么也得不到

{% for trainings in post.meta('related_pd_interactive_training') %}
   {{ WHAT DO I DO HERE }}
{% endfor %}

{% if post.related_pd_interactive_training %}
   {{ OR HERE }}
{% endif %}

当你直接使用get_field()时,它适用于单一模板,但它不适用于存档模板,因为你没有传递post ID。

$context['related_training'] = get_field( 'related_pd_interactive_training' );

要使其以 Timber 方式工作,您可以按以下方式进行:

$context = Timber::get_context();

$context['post'] = Timber::get_post();

然后您可以使用 post 的 meta() 函数:

{% for training in post.meta('related_pd_interactive_training') %}
    {{ dump(training) }}
{% endfor %}

现在,训练可能只是一个 post ID,具体取决于您在 ACF 字段中定义的 return 值。要将 training 变成 Timber post,您可以在其中访问标题和日期,您有多种选择:

1。在 PHP

中准备

要在 PHP 中准备数据,您可以使用 array_map 循环遍历 related_pd_interactive_training 中保存的 post ID,并将它们转换为 Timber posts 通过调用 new Timber\Post().

$context = Timber::get_context();
$post    = Timber::get_post();

$context['trainings'] = array_map( function( $training ) {
    return new Timber\Post( $training );
}, $post->meta( 'related_pd_interactive_training' ) );

要更进一步,您可以通过 Extending Timber.

将该函数放入一个新方法中

2。在 Twig

中使用 Post()

一个较短的方法是在 Twig 中使用 Post(),它会变成一个 post ID 一个 [=45] 的数组=] 您传递给 Timber posts.

的 ID
{% for training in Post(post.meta('related_pd_interactive_training')) %}
    {{ training.title }}
    {{ training.date }}
{% endfor %}