Как заставить работать шорткод внутри шорткода?

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

Помогите справиться с проблемой - не работает шорткод внутри шорткода..белый экран, бесконечно грузится страница

В двух словах - у меня есть два custom_post_type - Клиники, и второй custom_post_type - Доктора...к этим кастомам с помощью Advanced Custom Fields я добавил нужные поля...

Далее сделал шорткоды для вывода cystom_post_type по ID - (Например [clinic id="1309"]) - Который выводит отдельную запись из custom_post_type

Код шорткода:
add_shortcode( 'clinic',  'call_shortcode_clinic' );
    function call_shortcode_clinic( $atts, $content = '' ) {
        global $wp_query;
        $atts = shortcode_atts( array( 'id' => null ), $atts );
        $wp_query = new WP_Query( array(
            'post_type' => 'clinics',
            'p' => intval( $atts['id'] )
        ) );

    ob_start();
    echo '<div class="clinic">';
        if ( have_posts() ) :
                while ( have_posts() ) : the_post();

                    get_template_part( 'template-parts/clinic', get_post_format() );

                endwhile;
            else :
                get_template_part( 'template-parts/content', 'none' );
            endif;
    echo '</div>';

        wp_reset_query();
        $out_clinic = ob_get_clean();
        return $out_clinic;
    }

..может в нем ошибка, для докторов - шорткод аналогичный.

Суть проблемы: На странице редактировани записи (Клиника) я вставляю шорткод доктора ([doctor id="1"]), а затем шорткод самой клиники вывожу на страницу - и страница не грузится.., хотя если я раздельно вставляю шорткод и клиники, и доктора на одну страницу - все работает...в чем заключается моя ошибка, подскажите пожалуйста..
  • Вопрос задан
  • 115 просмотров
Решения вопроса 1
cesnokov
@cesnokov
<head>&nbsp;</head>
В вашем вопросе недостаточно информации. С первого взгляда представленный шорткод без ошибок, покажите и второй. Думаю, что начинать надо со включения вывода ошибок, добавив в wp-config.php:
define( 'WP_DEBUG', true );

Update:
add_shortcode( 'clinic',  'call_shortcode_clinic' );
function call_shortcode_clinic( $atts ) {
    ob_start();
    $atts = shortcode_atts( array( 'id' => null ), $atts );
    $clinic_query = new WP_Query( array(
        'post_type' => 'clinics',
        'p' => intval( $atts['id'] )
    ));

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

    wp_reset_postdata();
    return ob_get_clean();
}


add_shortcode( 'doctor',  'call_shortcode_doctor' );
function call_shortcode_doctor( $atts ) {
    ob_start();
    $atts = shortcode_atts( array( 'id' => null ), $atts );
    $doctor_query = new WP_Query( array(
        'post_type' => 'doctors',
        'p' => intval( $atts['id'] )
    ));

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

    wp_reset_postdata();
    return ob_get_clean();
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
wppanda5
@wppanda5 Куратор тега WordPress
WordPress Mедведь
return do_shortcode( $out_clinic );
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы