在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' ) %}
以及类似方法,但没有成功。
答案 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 %}