想在WordPress块编辑器(Gutenberg编辑器)的系统默认代码块上集成CodeMirror代码编辑器来增强功能,这个想法很不错。CodeMirror能带来更优秀的代码高亮和编辑体验。
下面我给你介绍两种主要的实现方法:使用现成插件和手动编码集成。
🛠 实现方法:插件优先,手动备选
推荐使用现成的插件,因为它们通常更稳定且方便。如果需要高度自定义,再考虑手动集成。
方法一:使用现成插件(推荐大多数用户)
这是最简单快捷的方式,无需编写代码。
1. CodeMirror Blocks
这款插件专为WordPress块编辑器设计,支持100多种编程语言和56种主题。它直接在代码块顶部添加了一个控制面板,显示语言信息,并提供运行代码、全屏和复制代码按钮。
安装步骤:
- 进入WordPress后台 -> “插件” -> “安装插件”。
- 搜索“CodeMirror Blocks”。
- 点击“安装”并“启用”。
安装启用后,你之前添加的代码块通常会自动获得增强的CodeMirror界面。
2. DL CodeMirror
这款插件使用CodeMirror库为文本区域(textarea)提供类似IDE的编辑体验,支持语法高亮、缩进、自动补全等功能,并支持C、C#、CSS、JavaScript、HTML、PHP和SQL等常见编程语言。但请注意,它最近更新是2016年,可能无法保证与最新版WordPress的完全兼容性。
方法二:手动编码集成(供开发参考)
如果你有开发能力,希望深度定制,可以考虑手动将CodeMirror集成到你的主题或自定义插件中。此方法需要编辑主题的 functions.php 文件或创建自定义插件。
核心步骤:
- 引入资源: 将CodeMirror的JS和CSS文件加入WordPress。WordPress 4.9+ 核心已集成CodeMirror,可通过
wp_enqueue_code_editor()函数调用。 - 初始化并替换默认代码块: 使用JavaScript检测块编辑器中的代码块,并用CodeMirror实例替换它们。
示例代码:
以下代码片段展示了如何尝试利用WordPress自带的CodeMirror资源并为代码块进行初始化:
/**
* 尝试在WordPress块编辑器的代码块上启用CodeMirror语法高亮
* 注意:此为基本示例,实际实现可能需要更复杂的JS来处理块编辑器的动态加载和状态同步。
*/
function my_enqueue_codemirror_for_blocks() {
// 仅在块编辑器后台页面加载
if ( is_admin() && function_exists( 'wp_enqueue_code_editor' ) ) {
// 尝试对 'text/html' 类型的代码启用代码编辑器(WordPress可能会处理一部分初始化)
$settings = wp_enqueue_code_editor( array( 'type' => 'text/html' ) ); //
if ( false !== $settings && ! empty( $settings['codemirror'] ) ) {
// 内联脚本,用于尝试初始化代码块上的CodeMirror
wp_add_inline_script(
'code-editor', // 依赖WordPress的code-editor脚本
sprintf(
'jQuery( document ).ready( function() {
// 监听块编辑器的加载与更新
if ( wp.data && wp.blocks && wp.domReady ) {
wp.domReady( function() {
// 尝试查找所有的代码块并进行替换
var codeBlocks = document.querySelectorAll( '.wp-block-code textarea' );
if ( codeBlocks.length ) {
// 使用WordPress内置的CodeMirror和配置初始化每一个代码文本区域
codeBlocks.forEach( function( textarea ) {
// 这里需要根据实际情况使用CodeMirror.fromTextArea并传递配置%s
// 注意:这是一个复杂的过程,需要处理编辑器实例的创建、状态同步等问题。
// 下面的代码仅示意,很可能不能直接工作。
var editor = wp.codeEditor.initialize( textarea, %s );
} );
}
} );
}
} );',
wp_json_encode( $settings )
)
);
}
}
}
add_action( 'admin_enqueue_scripts', 'my_enqueue_codemirror_for_blocks' );重要提醒:
- 慎用手动集成:上面的PHP代码示例主要展示了如何引入资源。真正用CodeMirror实例替换Gutenberg代码块并实现双向内容同步(即CodeMirror中编辑的内容要能回写到区块的
textarea,否则内容无法保存)非常复杂,需要大量的JavaScript编程和对Gutenberg数据流(wp.data)的理解。Gutenberg是动态加载的,简单地用CodeMirror.fromTextArea初始化可能无法可靠工作,且容易在块更新时产生问题。 - 推荐使用插件:正因为手动实现如此复杂,对于绝大多数用户,强烈推荐直接使用“CodeMirror Blocks”这类成熟插件。它们已经解决了所有这些兼容性和同步问题。
📋 方法对比
下面是一个表格,帮你快速了解不同方法的特点:
| 特性方面 | CodeMirror Blocks 插件 | DL CodeMirror 插件 | 手动编码集成 |
|---|---|---|---|
| 易用性 | 高,安装启用即可 | 中,但版本较旧 | 低,需要编码能力,且实现复杂 |
| 自定义程度 | 中高,提供多种主题和语言 | 中,支持常见语言 | 理论上最高,但实现成本极高 |
| 维护性 | 高,由插件作者更新维护 | 低,长期未更新 | 低,需自行维护,可能随WordPress更新而出错 |
| 功能特性 | 丰富,支持执行代码、全屏、复制等 | 基础,提供语法高亮等IDE基础功能 | 取决于开发实现 |
| 推荐使用场景 | 绝大多数用户,希望快速获得强大且稳定的代码编辑功能 | 需要基础代码高亮,且不介意可能存在的兼容性问题的用户 | 高级开发者,有非常特殊的定制化需求 |
⚠️ 注意事项
- 插件兼容性:安装任何插件前,务必确认其与你现在使用的WordPress版本和PHP版本的兼容性。像“DL CodeMirror”这类长期未更新的插件可能无法在最新环境中稳定工作。
- 性能考量: CodeMirror脚本和样式需要加载。好的插件(如CodeMirror Blocks)通常会做按需加载(只在包含代码块的页面加载资源),这是优选。
- 备份!: 在安装新插件或向你的主题
functions.php文件添加任何代码之前,请务必备份你的网站(文件和数据库)。这样若出现问题,可以轻松恢复。 - 测试环境: 强烈建议先在** staging环境(测试环境)** 或本地开发环境中进行更改和测试,确认无误后再应用到正式网站。
💎 总结
对于绝大多数用户而言,安装并启用“CodeMirror Blocks”插件是在WordPress块编辑器代码块上集成CodeMirror的最优解。它开箱即用,功能强大,能显著提升代码编辑和显示的体验。
希望这些信息能帮助你顺利地在你的WordPress网站中实现漂亮的代码高亮功能。

