Я пытаюсь получить доступ к данным ACF с другой страницы для отображения на другой с помощью Timber (Twig).
Имя ACF the_unstrung_hero
на странице «О нас» (id = 7).
страница-home.php:
<?php
$context = Timber::get_context();
$post = new TimberPost();
$about_page_id = 7;
$about = new TimberPost($about_page_id);
$about->acf = get_field_objects($about->ID);
$context['post'] = $post;
Timber::render( array( 'page-' . $post->post_name . '.twig', 'page.twig' ), $context );
В пределах page-home.twig:
<p>{{ acf.the_unstrung_hero|print_r }}</p>
Это всего лишь последняя попытка комбинации многих. Честно говоря, я просто ничего не понимаю (PHP не моя сильная сторона) … Ваша помощь будет высоко оценена.
В приведенном выше примере я вижу, что вы получаете данные поля со страницы about, но не добавляете их в контекст. Ваш шаблон не отображает эти данные, потому что вы не передали их в шаблон.
Вы сначала настраиваете свой контекст:
$context = Timber::get_context();
Затем вы получаете данные текущей публикации, которые должны отображаться:
$post = new TimberPost();
Теперь вы загрузили $post
, но это еще не в вашем контексте. Вы должны поместить данные, которые вы хотите отобразить на своей странице в $context
массив. Затем вы делаете это через Timber::render( 'template.twig', $context )
, Ваш шаблон Twig будет содержать только те данные, которые присутствуют в $context
(чтобы быть полным: вы также можете использовать функции в своих шаблонах Twig для получения данных, но это уже другая тема).
Чтобы также добавить данные, которые вы загрузили со страницы about, вам нужно сделать следующее:
$about_page_id = 7;
$about = new TimberPost( $about_page_id );
$context['about'] = $about;
Видишь, что линия $about->acf = get_field_objects($about->ID)
там больше нет? Вам это не нужно, потому что Timber автоматически загружает ваши поля ACF в данные поста. Ваше поле теперь будет доступно через {{ about.the_unstrung_hero }}
в вашем шаблоне Twig.
Чтобы вернуться к тому, чего вы хотите достичь:
подобно Дипак Джа упомянув в комментариях к вашему вопросу, я бы также использовал второй параметр get_field()
функция, чтобы получить данные поля из поста по идентификатору поста.
Вам действительно не нужно загружать весь пост страницы about, если вы просто хотите отобразить значение одного поля ACF.
страниц home.php
$context = Timber::get_context();
$post = new TimberPost();
$context['post'] = $post;
// Add ACF field data to context
$about_page_id = 7;
$context['the_unstrung_hero'] = get_field( 'the_unstrung_hero', $about_page_id );
Timber::render( array( 'page-' . $post->post_name . '.twig', 'page.twig' ), $context );
А потом в в пределах page-home.twig Вы можете получить доступ к данным поля в посте.
<p>{{ the_unstrung_hero }}</p>
Других решений пока нет …