Шорткоды и повторитель Advanced Custom Fields — в чем ошибка?

Здравствуйте!

Помогите пожалуйста разрешить проблему..

У меня есть шорткод для вывода записей по id
add_shortcode( 'post',  'call_shortcode_doctor' );
function call_shortcode_doctor( $atts ) {
    ob_start();
    $atts = shortcode_atts( array( 'id' => null ), $atts );
    $post_query = new WP_Query( array(
        'post_type' => 'post',
        'p' => intval( $atts['id'] )
    ));

    echo '<div class="post">';
    if ( $post_query->have_posts() ) :
        while ( $post_query->have_posts() ) : $post_query->the_post();
            get_template_part( 'template-parts/post', get_post_format() );
        endwhile;
    else :
        get_template_part( 'template-parts/content', 'none' );
    endif;
    echo '</div>';

    wp_reset_postdata();
    return ob_get_clean();
}


Далее, я плагине Advanced Custom Fields я создал группу полей и в ней сделал повторитель...то есть мне нужно, чтоб я мог создавать кастомный сайдбар, повторитель делает блоки для сайтдабара этого

Если в блоках просто текст или html - все работает нормально
5db57881bc919599216369.png

А вот если я в в блок вставляю свой шорткод для вывода записи, то остальные блоки просто не выводятся, то есть отображается один блок с записью, а остальных блоков попросту нет..хотя в админке у меня все так-же 4 блока..но шорткод обрывавает их отображение

5db5780ceb981720628260.png

Код ACF повторителя, который у меня в шаблоне на всякий случай
<?php if ( have_rows( 'clinic-side_columns' ) ) : ?>
    <div class="block-clinic-widgets">
    <?php while ( have_rows( 'clinic-side_columns' ) ) : the_row(); ?>
        <div class="block <?php the_sub_field( 'grid_columns' ); ?>">
            <div class="title tc"><h2><?php the_sub_field( 'clinic-column_title' ); ?></h2></div>
            <div class="content"><?php the_sub_field( 'clinic-column_content' ); ?></div>
        </div>
    <?php endwhile; ?>
    </div>
<?php else : ?>
    <?php // no rows found ?>
    
<?php endif; ?>


Что может создавать данную проблему?
  • Вопрос задан
  • 472 просмотра
Решения вопроса 1
Palych_tw
@Palych_tw
Типа веб-разработчик
А дальше по коду страница рендерится? футер и т.д? похоже, что пхп натыкается на ошибку, но вывод выключен.

И еще, даже если бы работало, шорткод вывелся бы просто текстом, потому что the_sub_field(), если я не ошибаюсь, не должна фильтровать контент. Чтобы шорткод выполнился попробуйте заменить вывод на
apply_filters( 'the_content', get_sub_field( 'clinic-column_content' ) );


UPD. Раз в самом поле весь контент присутствует, попробуй заменить сам цикл вывода репитера. Вот это:
<?php while ( have_rows( 'clinic-side_columns' ) ) : the_row(); ?>
        <div class="block <?php the_sub_field( 'grid_columns' ); ?>">
            <div class="title tc"><h2><?php the_sub_field( 'clinic-column_title' ); ?></h2></div>
            <div class="content"><?php the_sub_field( 'clinic-column_content' ); ?></div>
        </div>
    <?php endwhile; ?>


Замени на:
<?php $rows = get_field('clinic-side_columns');
foreach ( $rows as $row ) : ?>
    <div class="block <?= $row['grid_columns']; ?>">
        <div class="title tc"><h2><?= $row['clinic-column_title']; ?></h2></div>
        <div class="content"><?= $row['clinic-column_content']; ?></div>
    </div>
<?php endforeach;?>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы