
适用场景:已经禁用古登堡编辑器,改用经典编辑器,但旧文章源码充斥大量
<!-- wp:xxx -->、<!-- /wp:xxx -->块注释、wp-block-*CSS类,源码杂乱,不便于编辑管理。 前端页面虽然不会显示这些注释,但是后台文本编辑器源码臃肿,复制内容容易携带垃圾代码。
一、现象说明
古登堡块编辑器保存文章时,会插入一套标记用来识别区块:
<!-- wp:list-item -->
<!-- /wp:list-item -->
<h4 class="wp-block-heading">标题</h4>
<ul class="wp-block-list">
特点:
- 属于HTML注释,网站前台不会展示,不影响页面外观;
- 切换经典编辑器后,源码里全部残留,阅读和编辑文章很麻烦;
- 只要再次使用古登堡打开旧文章并保存,这套标记会重新生成。
二、清理方案选择(MySQL5.7无REGEXP_REPLACE函数,无法直接SQL替换)
MySQL5.7 不支持 REGEXP_REPLACE,所以放弃数据库直接SQL批量替换,推荐 WP-CLI 命令行批量清理(服务器SSH环境),备选Code Snippets代码片段方案(无需SSH)。
方案1:WP-CLI 批量清理(本次实操方案,宝塔 + PHP8.3)
前置准备
- 服务器SSH登录;
- 安装WP-CLI;
- 临时修改PHP8.3 CLI配置:
php-cli.ini,从disable_functions删除proc_open,proc_close; - 提前完整备份数据库!(操作失败可以一键回滚)
- 进入WordPress网站根目录执行命令。
清理命令
① 预览模拟(–dry-run,不修改数据,优先执行)
# 清理全部古登堡注释,包含 <!-- wp:xxx --> 和 <!-- /wp:xxx -->,支持换行
wp search-replace '<!-- /?wp:.*?-->' '' --regex --regex-flags=s --include-columns=post_content --dry-run --allow-root
# 清理古登堡自带wp-block开头class
wp search-replace '\sclass="wp-block[^"]*"' '' --regex --include-columns=post_content --dry-run --allow-root
② 正式执行清理(预览结果正常后执行)
wp search-replace '<!-- /?wp:.*?-->' '' --regex --regex-flags=s --include-columns=post_content --allow-root
wp search-replace '\sclass="wp-block[^"]*"' '' --regex --include-columns=post_content --allow-root
操作完成后安全收尾
- 修改
/www/server/php/83/etc/php-cli.ini,把proc_open,proc_close重新添加到disable_functions,恢复服务器安全限制; - 验证文章:后台经典编辑器打开旧文章,切换到文本模式,检查古登堡注释、wp-block class是否清除干净。
方案2:Code Snippets 代码片段(备选,不需要SSH、WP-CLI)
适合无法使用SSH,或者WP-CLI环境配置困难的场景。
- WordPress后台安装插件 Code Snippets;
- 新建代码片段,粘贴代码,启用;
- 浏览器访问
域名/wp-admin/?run_clean_gutenberg=1一键批量清理; - 执行完毕,立刻删除该代码片段,防止重复运行。
<?php
/**
* 清理古登堡块全部注释(含开标签与闭合标签)+ wp-block class
* 访问:域名/wp-admin/?run_clean_gutenberg=1
*/
add_action('admin_init', function () {
if (!isset($_GET['run_clean_gutenberg'])) return;
if (!current_user_can('manage_options')) die('权限不足');
$args = [
'post_type' => ['post','page'],
'post_status' => 'any',
'posts_per_page' => -1,
'no_found_rows' => true,
'update_post_meta_cache' => false,
'update_post_term_cache' => false,
];
$posts = get_posts($args);
$count = 0;
foreach ($posts as $p) {
$content = $p->post_content;
// 删除全部古登堡注释,包含 <!-- wp:xxx --> 和 <!-- /wp:xxx -->,支持换行匹配
$cleaned = preg_replace('/<!-- \/?wp:.*?-->/s', '', $content);
// 删除所有 wp-block 开头class
$cleaned = preg_replace('/\sclass="wp-block[^"]*"/', '', $cleaned);
if ($cleaned !== $content) {
wp_update_post([
'ID' => $p->ID,
'post_content' => $cleaned,
]);
$count++;
}
}
echo "<h3>清理完成!一共处理 {$count} 篇文章/页面</h3>";
exit;
});
三、额外优化:清理空段落 <p></p>(可选)
清理完古登堡注释之后,经常会遗留空段落标签 <p></p>,源码依旧有冗余。 WP-CLI预览命令:
wp search-replace '<p>\s*</p>' '' --regex --include-columns=post_content --dry-run --allow-root
正式执行:
wp search-replace '<p>\s*</p>' '' --regex --include-columns=post_content --allow-root
四、长期维护规范(关键)
- 永久禁用古登堡编辑器,全程使用经典编辑器撰写、修改文章;
- 禁止使用古登堡编辑器打开旧文章并保存,一旦保存,古登堡标记会再次生成;
- 新文章直接用经典编辑器编写,不会产生任何古登堡区块垃圾代码;
- 定期备份数据库,批量操作前务必备份。
五、常见踩坑记录
- MySQL5.7 没有
REGEXP_REPLACE函数,无法直接数据库SQL正则替换; - WP-CLI运行报错:
proc_open/proc_close被禁用,需要临时修改php-cli.ini(CLI和网页FPM是两份独立ini配置); - root用户执行WP-CLI必须增加参数
--allow-root; - 正则缺少
s修饰符,无法匹配跨行的古登堡注释; - 只匹配
<!-- wp:,漏掉闭合注释<!-- /wp:xxx -->。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
没有相关内容!
暂无评论...
想要以后继续访问,按住Ctrl+D键,把aoxox.com收藏起来吧!
