主页/WordPress笔记/博客文章/插件推荐/将CodeMirror用在我的WordPress网站的文章中的代码

将CodeMirror用在我的WordPress网站的文章中的代码

想在WordPress块编辑器(Gutenberg编辑器)的系统默认代码块上集成CodeMirror代码编辑器来增强功能,这个想法很不错。CodeMirror能带来更优秀的代码高亮和编辑体验。

下面我给你介绍两种主要的实现方法:使用现成插件和手动编码集成。

🛠 实现方法:插件优先,手动备选

推荐使用现成的插件,因为它们通常更稳定且方便。如果需要高度自定义,再考虑手动集成。

方法一:使用现成插件(推荐大多数用户)

这是最简单快捷的方式,无需编写代码。

1. CodeMirror Blocks

这款插件专为WordPress块编辑器设计,支持100多种编程语言和56种主题。它直接在代码块顶部添加了一个控制面板,显示语言信息,并提供运行代码全屏复制代码按钮。

安装步骤:

  1. 进入WordPress后台 -> “插件” -> “安装插件”。
  2. 搜索“CodeMirror Blocks”。
  3. 点击“安装”并“启用”。

安装启用后,你之前添加的代码块通常会自动获得增强的CodeMirror界面。

2. DL CodeMirror

这款插件使用CodeMirror库为文本区域(textarea)提供类似IDE的编辑体验,支持语法高亮、缩进、自动补全等功能,并支持C、C#、CSS、JavaScript、HTML、PHP和SQL等常见编程语言。但请注意,它最近更新是2016年,可能无法保证与最新版WordPress的完全兼容性。

方法二:手动编码集成(供开发参考)

如果你有开发能力,希望深度定制,可以考虑手动将CodeMirror集成到你的主题或自定义插件中。此方法需要编辑主题的 functions.php 文件或创建自定义插件。

核心步骤:

  1. 引入资源: 将CodeMirror的JS和CSS文件加入WordPress。WordPress 4.9+ 核心已集成CodeMirror,可通过 wp_enqueue_code_editor() 函数调用。
  2. 初始化并替换默认代码块: 使用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基础功能取决于开发实现
推荐使用场景绝大多数用户,希望快速获得强大且稳定的代码编辑功能需要基础代码高亮,且不介意可能存在的兼容性问题的用户高级开发者,有非常特殊的定制化需求

⚠️ 注意事项

  1. 插件兼容性:安装任何插件前,务必确认其与你现在使用的WordPress版本和PHP版本的兼容性。像“DL CodeMirror”这类长期未更新的插件可能无法在最新环境中稳定工作。
  2. 性能考量: CodeMirror脚本和样式需要加载。好的插件(如CodeMirror Blocks)通常会做按需加载(只在包含代码块的页面加载资源),这是优选。
  3. 备份!: 在安装新插件或向你的主题 functions.php 文件添加任何代码之前,请务必备份你的网站(文件和数据库)。这样若出现问题,可以轻松恢复。
  4. 测试环境: 强烈建议先在** staging环境(测试环境)** 或本地开发环境中进行更改和测试,确认无误后再应用到正式网站。

💎 总结

对于绝大多数用户而言,安装并启用“CodeMirror Blocks”插件是在WordPress块编辑器代码块上集成CodeMirror的最优解。它开箱即用,功能强大,能显著提升代码编辑和显示的体验。

希望这些信息能帮助你顺利地在你的WordPress网站中实现漂亮的代码高亮功能。