Mostrar una página creada con Elementor usando la REST API

1 feb 2018, 16:25:50
Vistas: 17.4K
Votos: 9

Soy nuevo trabajando con la REST API y no logro entender bien este problema.

Tengo varias páginas estáticas que creé usando el constructor de páginas Elementor. Como estoy intentando integrar un reproductor de música continuo en el sitio en el que trabajo, quiero reemplazar el contenido de una página con el contenido de otra diferente cuando hago clic en un enlace del menú. Todas las páginas comparten un encabezado y pie de página que ya se renderizan cuando abro la página inicialmente, así que pensé que podría bastar con reemplazar el contenido por el de la página correspondiente al enlace que hice clic.

Supongo que hacer clic en un enlace debería ejecutar una función javascript que haga una llamada GET a mi-sitio.dominio/wp-json/wp/v2/pages/pageid. Cuando pruebo esto en mi navegador, el contenido renderizado en el objeto json es correcto pero incompleto. Muestra todo el contenido y sus etiquetas html, pero ninguna de las clases de Elementor. Cuando cargo la página normalmente, la primera parte del contenido comienza con un montón de filas, contenedores, widgets, etc. de Elementor que posicionan y estilizan el contenido. El primer contenido real es este:

<h1 class="elementor-heading-title elementor-size-default"> TÍTULO </h1>

Sin embargo, cuando hago una llamada API, el contenido renderizado no tiene ninguno de los divs, clases o estilos de Elementor y aparece así:

<h1> TÍTULO </h1>

Mi pregunta es, ¿cómo puedo obtener todo este otro contenido en el objeto json? Supongo que esto tiene que ver con la forma en que Elementor almacena sus datos. Parece estar almacenado en la tabla _postmeta en algún formato json, así que sospecho que el contenido real normalmente es renderizado por algún archivo php del plugin elementor. ¿Puedo renderizar esto yo mismo usando un endpoint personalizado, antes de inyectar el contenido en una página ya renderizada usando javascript? ¿O estoy usando la REST API de manera fundamentalmente incorrecta?

1
Comentarios
Todas las respuestas a la pregunta 1
2

puedes crear un nuevo endpoint con el siguiente código y podrás recuperar el contenido de Elementor en la URL wp-json/MyPlugin/v1/pages/PAGE_ID/contentElementor

add_action("rest_api_init", function () {

    register_rest_route(
          "MyPlugin/v1"
        , "/pages/(?P<id>\d+)/contentElementor"
        , [
            "methods" => "GET",
            "callback" => function (\WP_REST_Request $req) {

                $contentElementor = "";

                if (class_exists("\\Elementor\\Plugin")) {
                    $post_ID = $req->get_param("id");

                    $pluginElementor = \Elementor\Plugin::instance();
                    $contentElementor = $pluginElementor->frontend->get_builder_content($post_ID);
                }


                return $contentElementor;

            },
        ]
    );


});
1 feb 2018 22:49:50
Comentarios

Hola. Usé tu modificación del endpoint en functions.php, pero también devuelve el elemento o datos... ¿cómo hago para usar solo una página en blanco con mi salida JSON con ciertas cosas? como... if(!empty($_REQUEST['usejson']))

        {

        $data = array("video" => $video_url);
      $json = json_encode($data);
      echo $json;
            return;
        }
David Kachlon David Kachlon
22 dic 2019 23:16:53

Esto devuelve una salida idéntica a la que muestra la API REST regular de WP en /wp-json/wp/v2/pages/<page_id> para páginas de Elementor.

rebroken rebroken
16 ago 2021 13:28:23