Отображать содержимое post_object с помощью плагина Advanced Custom Fields

Мне сложно понять, что не так с этим кодом.

Что я пытаюсь сделать: настройте настраиваемое поле в админе, используя плагин ACF, чтобы списки в мета-окне на всех страницах отображали список отзывов (custom-post-type). В раскрывающемся меню клиент может выбрать отзыв, который будет отображаться на этой конкретной странице.

Я использую слегка измененную версию двадцать три темы, и это код, который я использую в своем шаблоне front_page.

Код:

<?php $featured_testimonial = get_field('testimonial', $post_object->ID); ?> <?php foreach ($featured_testimonial as $post_object): ?> <a href="<?php echo get_permalink($post_object->ID); ?>"> <p class="descr"><?php echo get_the_title($post_object->ID) ?></p> </a> <?php endforeach; ?> 

Проблема: этот код ничего не показывает на первой странице. Я сделал print_r( $post_object ) и он показал всю информацию в моем print_r( $post_object ) (название, дата, содержание и т. Д.).

Решение: последние 2/3 дня я пытаюсь получить ответ на форумах поддержки ACF, и это ответ, который я получил:

Поле post object будет возвращать объект post, а не HTML. использование поля_поля в поле post_object приведет к тому, что ничего не будет отображаться.

Вам нужно сохранить его как переменную, затем использовать переменную ID или post_title для вывода нужного HTML-кода

Разве я не понял решения, или я действительно делаю именно то, что говорится в сообщении, и проблема в другом месте?

Позже отредактируйте: Это моя текущая настройка в ACF для тестового поля:

 Rules: Post Types - Page. Field Name - Testimonial. Field Type: Post Object. Post type: Testimonial. Filter from taxonomy: All. 

«Правила» означают, что пользовательское поле будет отображаться только на страницах, и оно будет отображать только «почтовые объекты» из специального типа сообщений «отзыв». В администрировании все, кажется, работает нормально, просто я не могу получить что-либо, чтобы появиться на front-end.

Заключительное редактирование. Следуя предложению @ s1lv3r, я изменил тип поля с «post-object» на «relationship». Я также изменил код следующим образом:

 <?php $posts = get_field('testimonial'); ?> <?php if( $posts ): ?> <?php foreach( $posts as $post): // variable must be called $post (IMPORTANT) ?> <?php setup_postdata($post); ?> <?php echo get_the_excerpt(); ?>... <a href="<?php the_permalink(); ?>">+More</a> <?php the_title(); ?> <?php endforeach; ?> <?php wp_reset_postdata(); ?> <?php endif; ?> 

Теперь все работает нормально на интерфейсе. Спасибо всем за помощь.

Solutions Collecting From Web of "Отображать содержимое post_object с помощью плагина Advanced Custom Fields"

В первую очередь код не кажется синтаксическим. Какой тип поля вы используете? Отношения?

Кроме того, почему вы переопределяете $post_object и откуда это происходит в первую очередь? Эта часть кода отсутствует.

Чтобы получить поле, которое привязано к текущему сообщению (внутри текущего объекта цикла / глобального объекта $ post, который вы просматриваете), вам просто нужно использовать get_field('testimonial') без ID-параметра.

Если вы хотите, чтобы поле было прикреплено к другому post_object, вы проверили, что $post_object->ID содержит действительный post_id прямо перед первой строкой, которую вы опубликовали?

Отредактировано по новой информации:

Является ли это поле post object с включенной опцией «multiple»? Документы ( http://www.advancedcustomfields.com/resources/field-types/post-object/ ) говорят, что эти поля возвращают только массив post-объектов, когда включена опция multiple, иначе он будет возвращать только один объект post , Это означало бы, что вам не понадобится цикл foreach в вашем коде. В этом случае вы должны использовать его следующим образом:

 <?php $featured_testimonial = get_field('testimonial', $post_object->ID); ?> <a href="<?php echo get_permalink($featured_testimonial->ID); ?>"> <p class="descr"><?php echo get_the_title($featured_testimonial->ID) ?></p> </a> 

Прежде всего. Вы выбрали значение из раскрывающегося списка на стороне администратора? Если вы этого не сделали, вы не получите никаких результатов от get_field для этой страницы.

Кроме того, если у вас есть доступ к вашей базе данных, убедитесь, что у вас есть значение для этой страницы, заданной в таблице _postmeta .

 SELECT * FROM `wp_postmeta` WHERE `post_id` = XX 

Где XX – ваш идентификатор страницы, а YY (см. Ниже) – это идентификатор отзыва, который вы выбрали из раскрывающегося списка на стороне администратора.

Среди результатов вы должны иметь пару таких строк:

 meta_id post_id meta_key meta_value 1607 XX testimonial YY 1608 XX _testimonial field_5177d30141f17 

Если у вас есть все, что правильно установлено в БД, тогда это ваш код.

Этот код поможет

 <?php $featured_testimonial = get_field('testimonial', $post_object->ID); ?> <a href="<?php echo get_the_permalink( $featured_testimonial->ID ); ?>"><?php echo $featured_testimonial->post_title; ?></a>