You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 09:48:12