本文约 4,374 字,预计阅读 11 分钟。文中命令与配置均经过实测,可直接参考执行。
引言:不是守旧,是有真实需求
区块编辑器上线六年多,仍然有大量站点坚持用经典编辑器(Classic Editor / TinyMCE)。原因很实际:
- 写了几百篇带大量短代码的老文章,区块编辑器打开全是”未转换的区块”;
- 页面构建器(Elementor、WPBakery)接管了布局,正文只是纯文本,区块编辑器显得多余;
- 编辑团队已经形成肌肉记忆,换编辑器直接影响产出;
- 某些老插件的元框(metabox)在区块编辑器侧栏里显示异常。
这些需求都是真实的。这篇文章讲怎么恢复,以及恢复之后要注意什么。
原理分析:编辑器切换到底改了什么
经典编辑器的核心是 TinyMCE(一个独立的 JS 富文本编辑器),外加 WordPress 的 wp_editor() 封装。区块编辑器( Gutenberg)是完全独立的一套 React 应用。
关键区别在内容存储:
- 经典编辑器存的是纯 HTML(
<p>文字</p>); - 区块编辑器存的是带
<!-- wp:xxx -->注释的 HTML。
两者互相兼容:区块编辑器能读纯 HTML(自动包成经典区块),经典编辑器也能读区块 HTML——但会丢失区块信息。这是最重要的一条:
用经典编辑器打开并保存一篇区块文章,所有区块注释会被清掉,文章降级成纯 HTML。再想用区块编辑器编辑,就得”转换区块”,且部分布局信息已永久丢失。
所以如果团队里两种编辑器混用,很容易出现”某人保存了一下,整站的区块布局全没了”这种事故。
保姆级实操
方案一:装官方 Classic Editor 插件(推荐)
插件目录搜 “Classic Editor”,作者是 WordPress Contributors(官方维护)。
装完去 设置 → 撰写(旧版在 设置 → 经典编辑器设置):
- 默认编辑器:选”经典编辑器”或”区块编辑器”;
- 允许用户切换编辑器:勾上后,每个用户在 用户 → 个人资料 里可以自己选;
- 也可以按文章类型分别设置。
官方插件的好处是它会持续维护,且提供 classic-editor-reminder 之类的钩子供二次开发。
方案二:代码禁用(不装插件)
在子主题 functions.php 里加:
// 全站禁用区块编辑器
add_filter( 'use_block_editor_for_post_type', '__return_false', 100 );
// 同时禁用小工具的区块编辑器
add_filter( 'use_widgets_block_editor', '__return_false' );
只禁用文章,页面保留区块编辑器:
add_filter( 'use_block_editor_for_post_type', function( $use, $post_type ) {
if ( 'post' === $post_type ) {
return false;
}
return $use;
}, 100, 2 );
按文章 ID 精确控制:
add_filter( 'use_block_editor_for_post', function( $use, $post ) {
// ID 为 123 的文章强制用经典编辑器
if ( $post && 123 === $post->ID ) {
return false;
}
return $use;
}, 100, 2 );
按用户角色控制:
add_filter( 'use_block_editor_for_post_type', function( $use, $post_type ) {
if ( 'post' === $post_type && ! current_user_can( 'manage_options' ) ) {
return false; // 非管理员一律用经典编辑器
}
return $use;
}, 100, 2 );
方案三:装 Classic Widgets 恢复老小工具界面
WordPress 5.8 把小工具也区块化了。装 “Classic Widgets” 插件(官方)可以恢复老界面。或者代码:
add_filter( 'use_widgets_block_editor', '__return_false' );
定制 TinyMCE 工具栏
经典编辑器的按钮可以增删:
add_filter( 'mce_buttons', function( $buttons ) {
// 第一行按钮
$buttons[] = 'superscript';
$buttons[] = 'subscript';
return $buttons;
});
add_filter( 'mce_buttons_2', function( $buttons ) {
// 第二行:加上删除线、下划线、字体颜色
array_unshift( $buttons, 'strikethrough', 'forecolor' );
return $buttons;
});
常用按钮名:bold、italic、underline、strikethrough、bullist、numlist、blockquote、alignleft、aligncenter、alignright、link、unlink、wp_more、fullscreen、wp_adv、hr、removeformat、charmap、pastetext。
启用”文本”标签页的 HTML 编辑:经典编辑器默认有”可视化/文本”两个标签。如果”文本”标签没了,通常是被插件或主题禁用了:
add_filter( 'wp_editor_settings', function( $settings ) {
$settings['quicktags'] = true;
return $settings;
});
处理老短代码
经典编辑器最典型的用途就是配合短代码。如果短代码前台不生效:
// 确保短代码在正文和摘要里都执行
add_filter( 'the_content', 'do_shortcode', 11 );
add_filter( 'the_excerpt', 'do_shortcode', 11 );
// 在小工具里也执行
add_filter( 'widget_text', 'do_shortcode' );
主题的 single.php 必须输出的是 the_content() 而不是 get_the_content()(后者不执行过滤器):
grep -n "the_content\|get_the_content" wp-content/themes/你的主题/single.php
让经典编辑器支持更多标签(不被过滤)
WordPress 的 wp_kses_post 会过滤危险标签。如果需要保留 iframe(比如嵌入视频):
add_filter( 'wp_kses_allowed_html', function( $tags, $context ) {
if ( 'post' === $context ) {
$tags['iframe'] = array(
'src' => true,
'width' => true,
'height' => true,
'frameborder' => true,
'allowfullscreen' => true,
'style' => true,
);
}
return $tags;
}, 10, 2 );
常见踩坑与失败案例
- 案例一:团队里有人用经典编辑器打开并保存了首页(区块做的落地页),所有区块结构丢失,前台布局全塌。教训:用区块编辑器做的页面,务必把经典编辑器排除掉,用上面”按文章 ID 控制”的代码锁定。
- 案例二:装了 Classic Editor 但设置页找不到。这个插件的设置入口在 设置 → 撰写,不在插件列表里。
- 禁用后 metabox 位置变了:经典编辑器里自定义字段框在正文下方正常显示,区块编辑器里被塞进右侧栏。禁用后恢复正常,这是很多人坚持用经典编辑器的真实原因。
- TinyMCE 按钮加了不显示:浏览器缓存了旧的 JS。清浏览器缓存,或者
wp cache flush。 - 案例三:主题用
get_the_content()输出,短代码显示成[xxx]原文。改成the_content()即可。 - 经典编辑器里的空段落:从 Word 粘贴内容会产生大量
<p> </p>,前台留白很多。用”文本”标签手工清理,或装 “TinyMCE Advanced” 的粘贴清理功能。 - 长期风险:官方承诺 Classic Editor 插件会持续维护,但核心开发资源都投向区块编辑器和站点编辑器(FSE)。新建站点建议直接上区块编辑器;老站点继续用经典编辑器没问题,但要有”未来可能要迁移”的心理准备。
总结
恢复经典编辑器的最省事方案是装官方 Classic Editor 插件并在 设置 → 撰写 里配置,比写代码更好维护;需要精细控制(按文章、按角色)时用 use_block_editor_for_post_type / use_block_editor_for_post 钩子;同时别忘了 use_widgets_block_editor 这一个小工具开关。最大的风险点是混用:经典编辑器保存区块文章会永久清除区块结构,所以一定要用代码锁定重要页面不许用经典编辑器打开。老站继续用没问题,新建站建议拥抱区块编辑器——它和 SEO 结构化数据、FSE 主题、多端适配是绑定的。
