шорткод не работает, когда я получаю контент из вызова wp rest api

Я пытаюсь получить содержимое пользовательского типа сообщения, называемого событием, с помощью wp rest api. все работает нормально, но я использовал компоновщик страниц Wp Backery для создания содержимого в моем типе сообщений о событиях, и проблема в том, что я получаю шорткоды без разбора, и они в виде простого текста.

Может ли кто-нибудь помочь мне с этим, пожалуйста?

Я пробовал некоторые ответы на похожие вопросы, такие как использование функции do_shortcode() и попытка вызова apply_filters( 'the_content' , get_the_content()), но ни один из них не работает для меня.

вот мои коды остальных API:

add_action( 'rest_api_init' , 'wt_rest_api');

function wt_rest_api(){
    register_rest_route('wtrest','events',array(
            'methods'   => WP_REST_SERVER::READABLE,
            'callback'  => 'wtEventResults'
        )); 
}

function wtEventResults($data){
    $events = new WP_Query([
        'post_type' => 'event',
        'post__in'  => array( (int)$data['id'] )
        ]);

    $eventsResults = [];

    while($events->have_posts()){
        $events->the_post();

        array_push($eventsResults , [
            'content'   => apply_filters( 'the_content' , get_the_content())
            ]);
    }

    return $eventsResults;

}

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


person Taghi Khavari    schedule 06.08.2019    source источник


Ответы (2)


благодаря @muka.gergely я нашел ответ здесь.

окончательный код, который работал у меня, находится здесь:

add_action( 'rest_api_init' , 'wt_rest_api');

function wt_rest_api(){
    register_rest_route('wtrest','events',array(
            'methods'   => WP_REST_SERVER::READABLE,
            'callback'  => 'wtEventResults'
        )); 
}


function wtEventResults($data){
    WPBMap::addAllMappedShortcodes(); // This does all the work

    $events = new WP_Query([
        'post_type' => 'event',
        'post__in'  => array( (int)$data['id'] )
        ]);

    $eventsResults = [];

    while($events->have_posts()){
        $events->the_post();


        array_push($eventsResults , [
                'content'   => apply_filters( 'the_content' ,  get_the_content() )
            ]);
    }

    return $eventsResults;

}

Надеюсь, это сэкономит вам время

person Taghi Khavari    schedule 06.08.2019

Для всех, кому это может быть интересно, это сработало для меня

apply_filters('the_content', $content);

Это также здесь

person Ahmed Sobhy    schedule 18.07.2020