Advanced Custom Fields - получение данных с другой страницы

10 сент. 2013 г., 19:11:25
Просмотры: 13.6K
Голосов: 0

Здравствуйте, я использую Advanced Custom Fields и пытаюсь получить данные с нескольких страниц и отобразить их на другой.

Я создал поле типа "relationship" под названием "data", и затем на странице X, где должно отображаться это поле, я выбрал страницу Y, с которой хочу получить данные.

<?php if( get_field('data') ): ?>
     <?php the_field('special_offer'); ?> <!--// получаем контент со страницы Y -->
<?php endif; ?>

У меня не получается заставить это работать, и я предполагаю, что вышеуказанный код неверен. Кто-нибудь знает, как это можно сделать?

Надеюсь, я объяснил понятно.

Спасибо.

<?php if( $related_pages = get_field( 'special_offer_relationship' ) ): ?>

    <?php foreach( $related_pages as $page ): ?>
        <?php echo get_the_title( $page->ID ); ?>
        <?php echo get_the_excerpt( $page->ID ); ?>
   <?php endforeach; ?>

<?php endif; ?>
0
Все ответы на вопрос 1
2

Поле relationship возвращает массив объектов записей. Каждый объект записи содержит ID связанной записи. Функции полей ACF принимают второй параметр — ID записи, из которой нужно получить данные, если это не текущая запись.

if( $related_pages = get_field( 'data' ) ):
    foreach( $related_pages as $page ):
        the_field( 'special_offer', $page->ID );
    endforeach;
endif;

Всё это взято из документации ACF, которая довольно подробна и содержит множество примеров.

РЕДАКТИРОВАНИЕ

Если вы хотите использовать шаблонные теги, которым необходима глобальная переменная $post, вам нужно использовать функцию setup_postdata(), чтобы заполнить её данными записи. Обратите внимание, что get_the_excerpt не принимает ID записи, в отличие от get_the_title.

if( $related_pages = get_field( 'data' ) ):
    foreach( $related_pages as $post ): // для работы необходимо использовать $post
        setup_postdata( $post );
        the_title();
        the_excerpt();
    endforeach;
    wp_reset_postdata(); // восстанавливаем глобальную переменную $post для внешнего цикла
endif;
10 сент. 2013 г. 19:37:25
Комментарии

Извините за задержку с ответом и большое спасибо за ваш ответ!

По какой-то причине get_the_excerpt или content просто получает контент со страницы, на которой вы находитесь. Не подскажете, что может быть причиной этого, или я делаю что-то не так? (Я обновил исходное сообщение).

Как ни странно, заголовок он получает нормально, но не контент :S

adam adam
15 сент. 2013 г. 18:56:17

см. правку выше.

Milo Milo
15 сент. 2013 г. 19:08:50