Wordpress - я не могу отобразить заголовок выбранного элемента поля отношений в Twig / Timber - PullRequest
0 голосов
/ 02 ноября 2019

Я новичок в Twig / Timber. У меня есть один пост, в котором есть поле отношения ACF, которое позволяет вам выбрать определенный тип поста (назовите его «обучение»). Скажем, у меня есть должность на тренинге под названием «Аэробика», которую я выбираю в области отношений. На странице я хочу отобразить название и дату Аэробики.

В Timber я определил это как

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

, но я не знаю, как его отобразить. Оба возвращают значение true, но когда я пытаюсь отобразить заголовок элемента в поле «Отношения», он ничего не получает

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

или

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

1 Ответ

0 голосов
/ 03 ноября 2019

Когда вы используете get_field() напрямую, это будет работать для отдельных шаблонов, но не будет работать в архивных шаблонах, потому что вы не передаете идентификатор записи.

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

Чтобы сделать этоРаботая с Timber, вы сделаете это следующим образом:

$context = Timber::get_context();

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

Затем вы можете использовать функцию meta() сообщения:

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

Теперь обучение, вероятно, толькоидентификатор поста, в зависимости от того, что вы определили как возвращаемое значение в поле ACF. Чтобы превратить training в пост Timber, где вы можете получить доступ к заголовку и дате, у вас есть несколько вариантов:

1. Подготовьте его в PHP

Чтобы подготовить свои данные в PHP, вы можете использовать array_map для циклического перебора идентификаторов сообщений, сохраненных в related_pd_interactive_training, и превращать их в сообщения Timber, вызывая 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' ) );

Чтобы продвинуться еще дальше, вы можете поместить эту функцию в новый метод с помощью Extennding Timber .

2. Используйте Post () в Twig

Более короткий способ сделать это - использовать Post() в Twig, который превращает идентификатор записи или в массив идентификаторов записей, которые вы передаетеДеревянные посты.

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