Древесина: доступ к расширенному настраиваемому полю с другой страницы

Я пытаюсь получить доступ к данным 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 не моя сильная сторона) … Ваша помощь будет высоко оценена.

3

Решение

В приведенном выше примере я вижу, что вы получаете данные поля со страницы 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>
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]