在Timber中,将循环中的ID传递给WP函数

时间:2019-02-20 15:40:13

标签: php wordpress twig timber

在Timber / Twig中,我使用以下命令显示事件列表:

page-events.php:

$context = Timber::get_context();

$events = array(
    'post_type' => 'event',
    'posts_per_page' => 10,
);

$context['events'] = Timber::get_posts( $events );

Timber::render( array( 'page-' . $post->post_name . '.twig', 'page-home.twig' ), $context );

page-events.twig

{% for event in events %}
    <li>{{ event.name }} - *country* </li>
  {% endfor %}

我还想展示与活动相关的国家/地区。这作为术语存储。在WordPress中,我通常使用以下方法检索该信息:

$country = get_the_terms( get_the_ID(), 'country');
echo $country[0]->name;

我如何使用Timber将ID传递给get_the_terms($id, 'country')

我已经搜索了Timber文档并使用Google搜索,但是找不到答案。

我尝试了{{ get_the_term( event.id, 'country' ) }}{% get_the_term( event.id, 'country' ) %}以及类似方法,但没有成功。

1 个答案:

答案 0 :(得分:1)

如果要在Twig中使用PHP函数,则需要使用function()fn(),如Functions Guide中所述。

对您来说,这意味着您可以在Twig中代替{{ get_the_term( event.id, 'country' ) }}使用

{{ fn( 'get_the_terms', event.id, 'country' ) }}

您在正确的轨道上可以通过event.id传递ID。但是,该函数返回一个数组,您无法像这样显示该数组。您需要将其转换为字符串或在其上循环。以下是使用Twig的first过滤器仅显示该数组中的第一个国家的方法:

{{ fn( 'get_the_terms', event.id, 'country' )|first }}

如果您有多个国家/地区,则可以使用join将它们变成逗号分隔的列表:

{{ fn( 'get_the_terms', event.id, 'country' )|join(', ') }}

还有另外一件我们可以优化的事情。除了使用get_the_terms(),我们还可以使用Timber\Post对象可用的terms()方法:

{% for event in events %}
    <li>{{ event.name }} - {{ event.terms('country')|first }}</li>
{% endfor %}