shortcode no funciona cuando obtengo contenido de wp rest api call

2 minutos de lectura

Estoy tratando de obtener el contenido de un tipo de publicación personalizada llamada evento usando wp rest api. todo funciona bien, pero utilicé el generador de páginas Wp Backery para crear contenidos en mi tipo de publicación de eventos y el problema es que obtengo códigos cortos sin analizar y están en texto sin formato.

¿Alguien puede ayudarme con esto, por favor?

He probado algunas de las respuestas en preguntas similares como usar do_shortcode() función y tratando de llamar
apply_filters( 'the_content' , get_the_content())
pero ninguno me sirve

aquí están mis códigos rest-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;

}

Obtengo el resultado, pero los códigos abreviados no se analizan y solo son texto sin formato. gracias de antemano

gracias a @muka.gergely he encontrado la respuesta aquí.

El código final que funcionó para mí está aquí:

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;

}

Espero que te ahorre algo de tiempo.

Para quien le pueda interesar, a mi me funciono

apply_filters('the_content', $content);

también está aquí

¿Ha sido útil esta solución?