#php #loops #if-statement #advanced-custom-fields
#php #циклы #if-statement #дополнительно-пользовательские-поля
Вопрос:
Во-первых, проблема: мой код нарушается, если я добавляю альтернативный оператор if внутри другого оператора if в цикле:
if ( has_post_thumbnail( $post->ID ) ) : ?>
<li>
<?php $partner = the_field('industry_partner_links'); ?>
<?php
if ($partner) :
?>
<a href="<?php the_field('industry_partner_links'); ?>" target="_blank">
<?php echo get_the_post_thumbnail( $post->ID, 'full' ); ?>
</a>
<?php
else :
?>
<a href="#" target="_blank">
<?php echo get_the_post_thumbnail( $post->ID, 'full' ); ?>
</a>
<?php
endif;
?>
</li>
Моя цель — создать цикл в моем шаблоне для отображения некоторого изображения (у них есть URL, который будет направлять на изображение) на основе пользовательского поста в среде WordPress, НО, если на изображении нет ссылки (ACF), URL будет пустым (href =#»).
По сути, я создал раздел с моими спонсорами (изображение, завернутое в ссылку), и я загружаю эти изображения и URL-адреса из серверной части WordPress, используя ACF (расширенное пользовательское поле). Спойлер, это работает.
Базовый код на php:
<?php
$args = [
'posts_per_page' => -1,
'order' => 'ASC',
'orderby' => 'title',
'post_type' => 'partner',
'post_status' => 'publish',
];
if ( $posts = get_posts( $args ) ) {
echo '<ul class="feed-industry-partners">';
foreach ( $posts as $post ) {
setup_postdata( $post );
if ( has_post_thumbnail( $post->ID ) ) : ?>
<li>
<a href="<?php the_field('industry_partner_links'); ?>" target="_blank">
<?php echo get_the_post_thumbnail( $post->ID, 'full' ); ?>
</a>
</li>
<?php endif;
wp_reset_postdata();
}
echo '</ul>';
}
?>
Есть идеи, почему это не работает?
Комментарии:
1. Что сломано? Каков результат вашего кода?
Ответ №1:
Из приведенного вами здесь кода я могу предположить, что функция the_field('industry_partner_links')
ничего не возвращает, но выводит на вывод. Итак, хорошие новости, ваш код верен. Проблема здесь в логике. Переменная $partner = the_field('industry_partner_links');
всегда будет ложной. Но есть обходной путь с буферизацией вывода (но это уродливое решение): <?php ob_start(); the_field('industry_partner_links'); $product = ob_get_flush(); ?>
. Более правильный способ — сделать некоторый переключатель в функции, the_field()
который вернет значение вместо его печати. Или, может быть, создать другую функцию, которая выполнит ту же работу, но вернет результат, а? 🙂
Комментарии:
1. Точно, правильный фрагмент: if (get_field(‘industry_partner_links’)) :