使用WordPress REST API创建文章时内容被截断,如何解决?
Kadence区块属性通过REST API传入后被移除的原因及解决办法
原因
- 区块注释JSON格式错误:WordPress区块的属性注释要求使用双引号包裹JSON键值对,你代码里用了单引号,导致WP区块解析器无法识别属性,直接丢弃所有自定义配置,只保留基础区块类型。
- REST API内容过滤机制:WP REST API处理
content字段时,会经过wp_kses_post和区块清理逻辑,不符合规范的内容会被自动清理,未被正确识别的区块属性会被移除。
解决办法
1. 修正区块注释的JSON格式
将区块注释中的单引号替换为双引号,同时在PHP字符串中正确转义(或使用HEREDOC语法简化):
// 方式1:转义双引号 $my_post = "<!-- wp:kadence/rowlayout {\"uniqueID\":\"5331_605d8b-3f\",\"columns\":1,\"colLayout\":\"equal\",\"minHeight\":380,\"bgImg\":\"http://wordlets.si/media/4-banner8.jpg\",\"bgImgPosition\":\"48% 42%\",\"align\":\"full\",\"minHeightMobile\":180,\"mobilePadding\":[25,'','',''],\"kbVersion\":2} --> <!-- wp:kadence/column {\"borderWidth\":['','','',''],\"uniqueID\":\"5331_0edd64-7f\",\"kbVersion\":2,\"className\":\"inner-column-1\"} --> <div class='wp-block-kadence-column kadence-column5331_0edd64-7f inner-column-1'> <div class='kt-inside-inner-col'></div> </div>"; // 方式2:使用HEREDOC(无需转义双引号) $my_post = <<<BLOCK_CONTENT <!-- wp:kadence/rowlayout {"uniqueID":"5331_605d8b-3f","columns":1,"colLayout":"equal","minHeight":380,"bgImg":"http://wordlets.si/media/4-banner8.jpg","bgImgPosition":"48% 42%","align":"full","minHeightMobile":180,"mobilePadding":[25,'','',''],"kbVersion":2} --> <!-- wp:kadence/column {"borderWidth":['','','',''],"uniqueID":"5331_0edd64-7f","kbVersion":2,"className":"inner-column-1"} --> <div class='wp-block-kadence-column kadence-column5331_0edd64-7f inner-column-1'> <div class='kt-inside-inner-col'></div> </div> BLOCK_CONTENT; $data = [ 'title' => 'My Post Title', 'content' => $my_post, 'status' => 'draft', ]; $response = Http::withBasicAuth($username, $password) ->post('https://mywp.xyz/wp-json/wp/v2/posts', $data);
2. 禁用REST API的内容过滤
如果格式修正后问题仍存在,可在WordPress后台的主题functions.php或自定义插件中添加以下代码,跳过content字段的自动清理:
add_filter('rest_pre_insert_post', function($prepared_post, $request, $creating) { if ($creating && isset($request['content'])) { $prepared_post->post_content = $request['content']; } return $prepared_post; }, 10, 3);
3. 验证Kadence插件配置
确保Kadence插件为最新版本,所有自定义区块属性已正确注册到WordPress区块系统中。若Kadence未注册这些属性,WP会判定为无效属性并移除。
内容的提问来源于stack exchange,提问作者c0dehunter
相关产品推荐
相关产品推荐

