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

Первая проблема: Мой код нарушается, если я добавляю альтернативный оператор 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 Ответ

2 голосов
/ 09 марта 2019

Из приведенного здесь кода я могу догадаться, что функция 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(), которая будет возвращать значение вместо его печати. Или, может быть, сделать другую функцию, которая будет выполнять ту же работу, но она будет возвращать результат, хм? :)

...