在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')?
我已经搜索了木材文档和谷歌,但没有找到答案。
我已经尝试过{{ get_the_term( event.id, 'country' ) }}和{% get_the_term( event.id, 'country' ) %}以及类似的东西,但都没有成功。
发布于 2019-02-21 14:42:35
如果您想在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(', ') }}还有一件事我们可以优化。我们可以使用可用于Timber\Post对象的terms()方法,而不使用get_the_terms():
{% for event in events %}
<li>{{ event.name }} - {{ event.terms('country')|first }}</li>
{% endfor %}https://stackoverflow.com/questions/54790060
复制相似问题