web-dev-qa-db-fra.com

Afficher une page construite avec Elementor en utilisant le REST API

Je commence à travailler avec l'API REST et je n'arrive pas à comprendre ce problème.

J'ai créé plusieurs pages statiques à l'aide du constructeur de pages Elementor. Étant donné que j'essaie d'intégrer un lecteur de musique en continu au site sur lequel je travaille, je souhaite remplacer le contenu d'une page par le contenu d'une page différente chaque fois que je clique sur un lien du menu. Toutes les pages partagent un en-tête et un pied de page déjà affichés lorsque j'ouvre la page. Je me suis dit que je pourrais suffire en remplaçant le contenu par le contenu de la page appartenant au lien sur lequel j'ai cliqué.

Je suppose que cliquer sur un lien devrait déclencher une fonction javascript qui appelle GET en my-site.domain/wp-json/wp/v2/pages/pageid. Lorsque j'essaie ceci dans mon navigateur, le contenu rendu dans l'objet json est correct, mais incomplet. Il affiche tout le contenu et ses balises HTML, mais aucune des classes Elementor. Lorsque je charge la page normalement, la première partie du contenu commence par un groupe d'éléments, de lignes, de conteneurs, de widgets, etc., qui positionnent et modèlent le contenu. Le premier contenu actuel est le suivant:

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

Cependant, lorsque je passe un appel à l'API, le contenu affiché ne contient aucune des divs, classes ou styles Elementor et s'affiche comme suit:

<h1> TITLE </h1>

Ma question est, comment puis-je obtenir tout ce contenu dans l'objet json? Je suppose que cela a quelque chose à voir avec la façon dont Elementor stocke ses données? Il semble être stocké dans la table _postmeta dans un format json, donc je suppose que le contenu réel est normalement rendu par un fichier php appartenant au plugin elementor. Puis-je effectuer moi-même le rendu à l'aide d'un noeud final personnalisé, avant d'injecter le contenu dans une page déjà rendue à l'aide de javascript? Ou est-ce que j'utilise fondamentalement l'API REST de manière incorrecte?

3
Rob Teeuwen

vous pouvez créer un nouveau point de terminaison avec le code suivant et récupérer le contenu de l'élément ou du contenu sur l'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;

            },
        ]
    );


});
6
mmm