使用WordPress Elementor elementor/document/save/data钩子报错排查
问题原因及修复方案
核心错误
你误用了钩子类型:elementor/document/save/data是过滤器钩子,不是动作钩子,必须用add_filter注册,且强制要求返回处理后的$editor_data数组。
你用add_action注册时,函数未返回值,默认返回null,而Elementor的sanitize_content()函数要求接收数组类型参数,因此触发类型错误。
修复代码
情况1:仅监听保存事件,不修改数据
即便只是执行自定义逻辑(比如记录日志、更新字段),也必须返回原数组:
function my_custom_elementor_save( $editor_data, $post_id ) { // 这里写你的自定义逻辑 // 必须返回编辑器数据数组 return $editor_data; } // 注意用add_filter,参数顺序为$editor_data在前,$post_id在后 add_filter( 'elementor/document/save/data', 'my_custom_elementor_save', 10, 2);
情况2:需要修改编辑器保存的数据
如果要调整页面内容,处理后返回修改后的数组即可:
function my_custom_elementor_save( $editor_data, $post_id ) { // 遍历模块,修改指定内容(示例:替换所有文本编辑器的内容) foreach ( $editor_data as &$element ) { if ( 'text-editor' === $element['widgetType'] ) { $element['settings']['editor'] = str_replace('旧内容', '新内容', $element['settings']['editor']); } } // 返回修改后的数组 return $editor_data; } add_filter( 'elementor/document/save/data', 'my_custom_elementor_save', 10, 2);
关键注意点
- 过滤器钩子的参数顺序:第一个参数是
$editor_data,第二个是$post_id,必须对应正确。 - 无论是否修改数据,必须返回数组类型的
$editor_data,否则会触发类型错误。
内容的提问来源于stack exchange,提问作者Blackfire
相关产品推荐
相关产品推荐

