Mostrare una pagina costruita con Elementor usando la REST API

1 feb 2018, 16:25:50
Visualizzazioni: 17.4K
Voti: 9

Sono nuovo nell'uso della REST API e non riesco a capire bene questo problema.

Ho diverse pagine statiche create con il page builder Elementor. Poiché sto cercando di integrare un player musicale continuo nel sito su cui lavoro, vorrei sostituire il contenuto di una pagina con quello di un'altra quando clicco su un link nel menu. Tutte le pagine condividono un header e un footer che vengono già renderizzati all'apertura iniziale della pagina, quindi pensavo di poter semplicemente sostituire il contenuto con quello della pagina associata al link cliccato.

Presumo che cliccando un link dovrebbe essere eseguita una funzione JavaScript che effettua una chiamata GET a my-site.domain/wp-json/wp/v2/pages/pageid. Quando provo nel browser, il contenuto renderizzato nell'oggetto json è corretto ma incompleto. Mostra tutto il contenuto e i suoi tag html, ma nessuna delle classi Elementor. Quando carico la pagina normalmente, la prima parte del contenuto inizia con una serie di righe, contenitori, widget, ecc. di Elementor che posizionano e stilizzano il contenuto. Il primo contenuto effettivo è questo:

<h1 class="elementor-heading-title elementor-size-default"> TITOLO </h1>

Tuttavia, quando effettuo una chiamata API, il contenuto renderizzato non ha nessuno dei div, classi o stili di Elementor e appare così:

<h1> TITOLO </h1>

La mia domanda è: come posso ottenere tutti questi altri contenuti nell'oggetto json? Suppongo che abbia a che fare con il modo in cui Elementor memorizza i suoi dati? Sembrano essere memorizzati nella tabella _postmeta in qualche formato json, quindi sospetto che il contenuto effettivo venga normalmente renderizzato da qualche file php del plugin Elementor. Posso renderizzarlo io stesso usando un endpoint personalizzato, prima di iniettare il contenuto in una pagina già renderizzata usando JavaScript? O sto usando fondamentalmente la REST API nel modo sbagliato?

1
Commenti
Tutte le risposte alla domanda 1
2

puoi creare un nuovo endpoint con il seguente codice e puoi recuperare il contenuto di Elementor all'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
Commenti

Ciao. Ho utilizzato la tua modifica dell'endpoint functions.php, ma restituisce anche l'elemento o i dati.. come posso ottenere solo una pagina vuota con il mio output JSON con determinati elementi? Ad esempio... 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

Questo restituisce un output identico a quello dell'API REST standard di WordPress disponibile all'indirizzo /wp-json/wp/v2/pages/<page_id> per le pagine create con Elementor.

rebroken rebroken
16 ago 2021 13:28:23