我对使用REST API还不熟悉,我似乎不能完全理解这个问题。
我有几个使用Elementor页面生成器创建的静态页面。由于我正在尝试将一个连续的音乐播放器集成到我正在开发的站点中,因此每当我单击菜单中的链接时,我都想用另一个页面的内容替换页面的内容。所有页面都共享一个页眉和页脚,当我首先打开页面时,页眉和页脚已经呈现出来了,所以我想用属于我单击的链接的页面内容替换内容就足够了。
我假设单击链接会触发一个javascript函数,该函数调用my-site.domain/wp-json/wp/v2/pages/pageid
. 当我在浏览器中尝试此操作时,json对象中呈现的内容是正确的,但不完整。它显示所有内容及其html标记,但不显示Elementor类。当我正常加载页面时,内容的第一部分从一堆elementor行、容器、小部件等开始,它们定位并设置内容的样式。第一个实际内容是:
<h1 class="elementor-heading-title elementor-size-default"> TITLE </h1>
但是,当我调用api时,呈现的内容没有Elementor div或类或样式,显示如下:
<h1> TITLE </h1>
我的问题是,如何将所有其他内容都放到json对象中?我想这与Elementor存储数据的方式有关?它似乎以某种json格式存储在\\u posttea表中,因此我怀疑实际内容通常由属于elementor插件的某个php文件呈现。在我使用javascript将内容注入到已经呈现的页面之前,我可以使用自定义端点自己呈现吗?还是我基本上以错误的方式使用REST API?
最合适的回答,由SO网友:mmm 整理而成
您可以使用以下代码创建一个新端点,并可以在URL上检索elementor内容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;
},
]
);
});