Шорткод прерывая гибкие секции ACF во время цикла - PullRequest
0 голосов
/ 08 октября 2019

Использование расширенных пользовательских полей (ACF) Гибкие разделы для Wordpress, у меня есть различные гибкие поля, которые прекрасно работают. Я использовал ACF в течение многих лет и недавно начал использовать гибкие разделы.

Я заметил, что когда я вставляю шорткод в гибкий раздел (редактор WYSWIG или аналогичный), он прерывает цикл, и ни один изСледующие гибкие разделы появляются на странице или в инспекторе / DOM. Я думаю, что шорткод нарушает цикл while.

Вот шорткод, который я сейчас пытаюсь вставить на страницу. Это работает, но остальные разделы страницы после отсутствуют.

function spotlight_boxes( $atts ){
        $args = array( 'post_type' => 'customer-spotlight', 'posts_per_page' => -1, 'post_status' => 'publish' );
        $loop = new WP_Query( $args );

        $loopTitle = $atts['title'];

        ob_start(); ?>
        <section class="feature-boxes page">
            <h2 class="center std section-title"><?php echo $loopTitle; ?></h2>
            <div class="small-wrap">
                <div class="boxes flex">
                    <?php while ( $loop->have_posts() ) : $loop->the_post(); 
                        $customer_logo = get_field("customer_logo");
                        ?> 
                        <div class="feature-box">
                            <span class="tag-btn">Spotlight</span>
                            <img src="<?php the_post_thumbnail_url(); ?>" width="100%"/>
                            <div class="feature-info">
                                <img src="<?php echo $customer_logo['sizes']['medium']; ?>" width="100%">
                                <h5 class="std"><?php the_field('overview_title'); ?></h5>
                                <a href="<?php the_permalink(); ?>" class="learnmore">Learn More</a>
                            </div>
                        </div>
                    <?php endwhile; ?>
                </div>
            </div>
        </section>
        <?php

        return ob_get_clean();
}
add_shortcode( 'spotlight_boxes', 'spotlight_boxes' );

1 Ответ

0 голосов
/ 09 октября 2019

Это потому, что вы создаете контент с помощью функции, которая раньше заменялась шорткодом. Как задокументировано в Wordpress Codex , функция, вызываемая шорткодом, никогда не должна генерировать какой-либо вывод. Функции шорткода должны возвращать текст, который должен использоваться для замены шорткода. Непосредственное получение результатов приведет к неожиданным результатам. Это похоже на то, как должны работать функции фильтра, в том смысле, что они не должны вызывать ожидаемых побочных эффектов при вызове, поскольку вы не можете контролировать, когда и откуда они вызываются.

Например, если вы создаете HTMLкоторый должен быть заменен шорткодом, возвращаемый пример должен выглядеть так:

$html = '<div class="test-field">';
$html .= get_field('test-field');
$html .= '</div>';
return $html;

, а не так

the_field('test-field');
...