Расширенные пользовательские поля – Отправка сообщений для запроса foreach

Я создал тип сообщения, называемый Package (для пакетов новостей), и хочу иметь возможность ссылаться на определенные сообщения в блогах и отображать их на странице single-package.php. Я использую поля отношения ACF и использую идентификатор сообщения (также пытался использовать объект post, но имел ту же проблему)

Проблема в том, что названия и постоянные ссылки в моем заявлении foreach не работают. Они используют заголовок пакета и постоянную ссылку, а не заголовок и постоянную ссылку, несмотря на использование $ item-> ID в каждом вызове. Вот код:

<?php while (have_posts()) : the_post(); ?> <div class="entry-content"> <h1 class="content-headline">Package: <?php the_title(); ?></h1> </div> <div class="package-description" style="padding:15px 10px;background:white;"> <?php the_content(); ?> </div> <?php $items = get_field('package_items'); ?> <?php if( $items ): ?> <ul> <?php foreach( $items as $item ): ?> <?php setup_postdata($item); ?> <li> <a href="<?php echo get_permalink( $item->ID ); ?>"> <?php echo get_the_title( $item->ID ); ?> </a> </li> <?php endforeach; ?> </ul> <?php endif; ?> <?php wp_reset_postdata(); // IMPORTANT - reset the $post object so the rest of the page works correctly ?> <?php endwhile; ?> 

Здесь вы можете увидеть итоговый результат вышеуказанного кода.

Есть предположения?

Использовать старый метод добавления поля отношений -> Post Object

 <?php while (have_posts()) : the_post(); ?> <div class="entry-content"> <h1 class="content-headline">Package: <?php the_title(); ?></h1> </div> <div class="package-description" style="padding:15px 10px;background:white;"> <?php the_content(); ?> </div> <?php $posts = get_field('package_items'); if( $posts ): ?> <ul> <?php foreach( $posts as $post): // variable must be called $post (IMPORTANT) setup_postdata($post); ?> <li> <a href="<?php echo get_permalink( $post->ID ); ?>"> <?php echo get_the_title( $post->ID ); ?> </a> </li> <?php endforeach; ?> </ul> <?php wp_reset_postdata(); // IMPORTANT - reset the $post object so the rest of the page works correctly endif; endwhile; ?> 

В опубликованном коде переменная $item все еще используется, но не определена сейчас – также в запросе отношения вы можете использовать стандартные вызовы WP, такие как the_permalink() и the_title() не нуждаясь в эхо.

Я думаю, он имел в виду, что конечная петля foreach должна выглядеть так:

 <?php foreach( $posts as $post): // variable must be called $post (IMPORTANT) setup_postdata($post); ?> <li> <a href="<?php echo get_permalink( $post->ID ); ?>"> <?php echo get_the_title( $post->ID ); ?> </a> </li> <?php endforeach; ?> 

Как упоминал Дж Айви, вам просто нужно обновить идентификатор $ item-> ID, который будет $ post-> ID, потому что вы больше не используете $ item в своем foreach. Вы должны использовать $ post, как указал Хасан Алви.

Кроме того, спасибо за отправку кода, это помогло мне решить мою проблему.