Отображение страницы, созданной в Elementor, с использованием REST API

1 февр. 2018 г., 16:25:50
Просмотры: 17.4K
Голосов: 9

Я новичок в работе с REST API и не могу разобраться с одной проблемой.

У меня есть несколько статических страниц, созданных с помощью конструктора Elementor. Поскольку я пытаюсь интегрировать непрерывный музыкальный плеер на сайт, мне нужно заменять содержимое страницы контентом другой страницы при клике на ссылку в меню. Все страницы используют общие шапку и подвал, которые уже загружаются при первоначальном открытии страницы, поэтому я подумал, что можно просто заменять основной контент.

Я предполагал, что клик по ссылке должен запускать JavaScript-функцию, которая делает GET-запрос к my-site.domain/wp-json/wp/v2/pages/pageid. Когда я пробую это в браузере, JSON-объект содержит правильный, но неполный контент. В нем отображается весь контент с HTML-тегами, но отсутствуют классы Elementor. При обычной загрузке страницы контент начинается с множества elementor-рядов, контейнеров, виджетов и т.д., которые позиционируют и стилизуют контент. Первый реальный контент выглядит так:

<h1 class="elementor-heading-title elementor-size-default"> ЗАГОЛОВОК </h1>

Однако при API-запросе отрендеренный контент не содержит этих Elementor-дивов, классов или стилей и выглядит следующим образом:

<h1> ЗАГОЛОВОК </h1>

Мой вопрос: как я могу получить весь этот дополнительный контент в JSON-объекте? Я предполагаю, что это связано с тем, как Elementor хранит свои данные? Похоже, они хранятся в таблице _postmeta в каком-то JSON-формате, поэтому я подозреваю, что реальный контент обычно рендерится каким-то PHP-файлом плагина Elementor. Могу ли я отрендерить это самостоятельно с помощью кастомной конечной точки, прежде чем внедрять контент на уже отрендеренную страницу с помощью JavaScript? Или я принципиально неправильно использую REST API?

1
Комментарии

Попробуйте это https://elementor.com/help/getresponse-elementor-integration/

zac zac
6 мар. 2023 г. 02:03:14
Все ответы на вопрос 1
2

Вы можете создать новую конечную точку с помощью следующего кода и получать контент Elementor по 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 февр. 2018 г. 22:49:50
Комментарии

Привет. Я использовал вашу модификацию endpoint в functions.php, но она также возвращает элемент или данные... Как мне использовать только пустую страницу с моим JSON выводом определенных данных? Например... if(!empty($_REQUEST['usejson']))

        {

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

Это возвращает идентичный вывод, как стандартный WP REST API по адресу /wp-json/wp/v2/pages/<page_id> для страниц Elementor.

rebroken rebroken
16 авг. 2021 г. 13:28:23