Добавьте альтернативный оператор if внутри другого оператора if в цикле с php, чтобы создать две ссылки (одну действительную и одну пустую)

#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’)) :