Я думаю, проблема в том, что вы смешиваете пользовательский цикл сообщений (ваши foreach
и setup_postdata()
), но затем используете функции, подобные get_field()
, которые используют global post объект. В этом случае get_field()
пытается найти значение поля, сравнивая с глобальным $post
, но оно не было правильно установлено. См. Предупреждение здесь о setup_postdata($post)
:
Вы должны передать ссылку на глобальную переменную $ post, в противном случае такие функции, как the_title (), не будут работать должным образом.
Вы можете реализовать это в своем коде с небольшим изменением:
global $post;
foreach ($brand as $currPost) {
$post = $currPost;
setup_postdata($post);
// Rest of code as normal
}
Или, поскольку get_field()
может принимать конкретную запись в качестве аргумента вместо автоматического использования глобальной, вы можете изменить:
$homelinkvalue = get_field("home_brand_link");
до:
$homelinkvalue = get_field("home_brand_link",$post->ID);
Примечание: обычно рекомендуемый способ итерации сообщений - специальный шаблон "WP loop" , что-то вроде:
<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<!-- Do something -->
<?php endwhile; ?>
Использование приведенного выше шаблона автоматически устанавливает глобальную переменную $post
во время ее циклического прохождения, что позволяет разработчикам использовать такие функции, как get_field()
, не беспокоясь о явной передаче определенного сообщения; делает все немного проще.