WordPress 使用经典编辑器后批量清理古登堡Gutenberg残留垃圾代码完整教程

1小时前更新 A站导航
566 0
WordPress 使用经典编辑器后批量清理古登堡Gutenberg残留垃圾代码完整教程

适用场景:已经禁用古登堡编辑器,改用经典编辑器,但旧文章源码充斥大量 <!-- wp:xxx -->、<!-- /wp:xxx --> 块注释、wp-block-* CSS类,源码杂乱,不便于编辑管理。 前端页面虽然不会显示这些注释,但是后台文本编辑器源码臃肿,复制内容容易携带垃圾代码。

一、现象说明

古登堡块编辑器保存文章时,会插入一套标记用来识别区块:

<!-- wp:list-item -->
<!-- /wp:list-item -->
<h4 class="wp-block-heading">标题</h4>
<ul class="wp-block-list">

特点:

  1. 属于HTML注释,网站前台不会展示,不影响页面外观;
  2. 切换经典编辑器后,源码里全部残留,阅读和编辑文章很麻烦;
  3. 只要再次使用古登堡打开旧文章并保存,这套标记会重新生成。

二、清理方案选择(MySQL5.7无REGEXP_REPLACE函数,无法直接SQL替换)

MySQL5.7 不支持 REGEXP_REPLACE,所以放弃数据库直接SQL批量替换,推荐 WP-CLI 命令行批量清理(服务器SSH环境),备选Code Snippets代码片段方案(无需SSH)。

方案1:WP-CLI 批量清理(本次实操方案,宝塔 + PHP8.3)

前置准备

  1. 服务器SSH登录;
  2. 安装WP-CLI;
  3. 临时修改PHP8.3 CLI配置:php-cli.ini,从disable_functions删除 proc_open,proc_close;
  4. 提前完整备份数据库!(操作失败可以一键回滚)
  5. 进入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

操作完成后安全收尾

  1. 修改 /www/server/php/83/etc/php-cli.ini,把 proc_open,proc_close 重新添加到 disable_functions,恢复服务器安全限制;
  2. 验证文章:后台经典编辑器打开旧文章,切换到文本模式,检查古登堡注释、wp-block class是否清除干净。

方案2:Code Snippets 代码片段(备选,不需要SSH、WP-CLI)

适合无法使用SSH,或者WP-CLI环境配置困难的场景。

  1. WordPress后台安装插件 Code Snippets;
  2. 新建代码片段,粘贴代码,启用;
  3. 浏览器访问 域名/wp-admin/?run_clean_gutenberg=1 一键批量清理;
  4. 执行完毕,立刻删除该代码片段,防止重复运行。
<?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

四、长期维护规范(关键)

  1. 永久禁用古登堡编辑器,全程使用经典编辑器撰写、修改文章;
  2. 禁止使用古登堡编辑器打开旧文章并保存,一旦保存,古登堡标记会再次生成;
  3. 新文章直接用经典编辑器编写,不会产生任何古登堡区块垃圾代码;
  4. 定期备份数据库,批量操作前务必备份。

五、常见踩坑记录

  1. MySQL5.7 没有REGEXP_REPLACE函数,无法直接数据库SQL正则替换;
  2. WP-CLI运行报错:proc_open/proc_close被禁用,需要临时修改php-cli.ini(CLI和网页FPM是两份独立ini配置);
  3. root用户执行WP-CLI必须增加参数 --allow-root;
  4. 正则缺少 s 修饰符,无法匹配跨行的古登堡注释;
  5. 只匹配 <!-- wp:,漏掉闭合注释 <!-- /wp:xxx -->。
© 版权声明

相关文章

没有相关内容!

暂无评论

未登录用户
none
暂无评论...
想要以后继续访问,按住Ctrl+D键,把aoxox.com收藏起来吧!