Mostrare una pagina costruita con Elementor usando la REST API
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?

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;
},
]
);
});

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;
}
