шорткод для отображения вложенных полей повторителя ACF - PullRequest
0 голосов
/ 03 мая 2020

В Wordpress для отображения вложенного поля ACF с повторителем я адаптировал несколько строк в php, которые вставляю на страницу архива сообщения. В архиве жесткий код работает очень хорошо, и строки, созданные кодом, отображаются, как и ожидалось. Мне нужно использовать этот код через Elementor. Для этого мне нужно создать шорткод. Я создал шорткод с кодом. Ничего не работает хорошо, ничего не отображается, даже когда я неактивен Elementor Не могли бы вы мне помочь, Bruno Вот код:

function acf2repeaters_ingredients_function() {
    while ( have_posts() ) : the_post();
        // check for rows (parent repeater)
        if( have_rows('en-tete_ingredients') ): ?>
            <div id="en-tete_ingredients">
                <?php // loop through rows (parent repeater) 
                while( have_rows('ingredients') ): the_row(); ?>
                    <div>
                        <h3><?php the_sub_field('en-tete_ingredients'); ?></h3>
                        <?php // check for rows (sub repeater)
                        if( have_rows('liste_des_ingredients') ): ?>
                            <ul>
                                <?php // loop through rows (sub repeater)
                                while( have_rows('ingredients') ): the_row(); ?>
                                    <li <?php echo ' class="nombre"'; ?>><?php the_sub_field('quantite');?></li>
                                    <li <?php echo ' class="unite"'; ?>><?php the_sub_field('unite');?></li>
                                    <li <?php echo ' class="ingredient"'; ?>><?php the_sub_field('ingredient');?></li>
                                <?php endwhile; ?>
                            </ul>
                        <?php endif; //if( get_sub_field('ingredients') ): ?>
                    </div>
                <?php endwhile; // while( has_sub_field('en-tete_ingredients') ): ?>
            </div>
        <?php endif; // if( get_field('en-tete_ingredients') )
    endwhile; // end of the loop.
}
add_shortcode( 'acf2repeaters_ingredients', 'acf2repeaters_ingredients_function' );

1 Ответ

0 голосов
/ 03 мая 2020

Решение:
Удалить строку: while ( have_posts() ) : the_post();
Удалить строку: endwhile; // end of the loop.
Тогда шорткод сработает!

...