В Timber передайте идентификатор в цикле в функцию WP - PullRequest
0 голосов
/ 20 февраля 2019

В 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;

Как бы я передал идентификатор в get_the_terms($id, 'country'), используя Timber?

Я искал документацию Timber и Googled, но не могу найтиответ.

Я пробовал {{ get_the_term( event.id, 'country' ) }} и {% get_the_term( event.id, 'country' ) %} и аналогичные, но безуспешно.

1 Ответ

0 голосов
/ 21 февраля 2019

Если вы хотите использовать функцию PHP в Twig, вам нужно использовать function() или fn(), как описано в Руководстве по функциям .

Для вас это будет означатьчто в Twig вместо {{ get_the_term( event.id, 'country' ) }} вы могли бы использовать

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

. Вы были на правильном пути, чтобы передать идентификатор через event.id.Однако эта функция возвращает массив, который вы не можете отобразить так.Вам нужно преобразовать его в строку или зациклить на нем.Вот как вы можете отобразить только первую страну в этом массиве, используя фильтр first Twig:

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

Если у вас будет несколько стран, вы можете превратить их в список через запятуюс join :

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

Есть еще одна вещь, которую мы можем оптимизировать.Вместо использования get_the_terms() мы можем использовать метод terms(), который доступен для Timber\Post объектов:

{% for event in events %}
    <li>{{ event.name }} - {{ event.terms('country')|first }}</li>
{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...