自定义Gutenberg动态块无法保存富文本值的问题求助
Gutenberg动态块RichText字段保存后丢失问题解决
问题现象
自定义动态块中的RichText字段编辑时实时生效,保存按钮状态正常,无控制台错误,但刷新WordPress后台后,字段值消失,块恢复为初始占位符内容。
核心原因
动态块的save函数返回null,但block.json中content属性设置了source: html和selector: h2——Gutenberg会尝试从块的静态HTML输出提取属性值,而动态块没有静态保存内容,导致属性无法被序列化到块注释中。从请求体可见,保存后的块注释为<!-- wp:namespace/hero /-->,未携带任何属性数据。
解决方案
1. 修改block.json的属性定义
移除source和selector配置,让属性直接存储值(动态块无需从静态HTML提取属性):
{ // ... 其他原有配置 "attributes": { "content": { "type": "string", "default": "" } } }
2. 完善render.php的属性渲染逻辑
在动态块的PHP渲染文件中,正确读取并安全输出content属性:
<?php $content = isset( $attributes['content'] ) ? $attributes['content'] : ''; ?> <div class="h-96 bg-amber-200 flex p-20 wp-block-namespace-hero"> <h2 class="mt-10"><?php echo wp_kses_post( $content ); ?></h2> </div>
3. 验证修改效果
修改后保存页面,块注释会变为携带属性的格式:
<!-- wp:namespace/hero {"content":"你输入的富文本内容"} /-->
刷新后台后,RichText字段会正确加载已保存的值。
内容的提问来源于stack exchange,提问作者Remi
相关产品推荐
相关产品推荐

