Отображение страницы, созданной в Elementor, с использованием REST API
Я новичок в работе с 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?

Вы можете создать новую конечную точку с помощью следующего кода и получать контент 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;
},
]
);
});

Привет. Я использовал вашу модификацию endpoint в functions.php, но она также возвращает элемент или данные... Как мне использовать только пустую страницу с моим JSON выводом определенных данных? Например... if(!empty($_REQUEST['usejson']))
{
$data = array("video" => $video_url);
$json = json_encode($data);
echo $json;
return;
}
