搜索全站
主题 12 分钟阅读

Bricks / Elementor Pro / Divi 构建器型主题对比:锁定成本与迁移难度

选构建器容易,离开难。本文对比 Elementor、Bricks、Divi 三家的数据存储方式、退出成本与迁移难点,并给出可执行的解绑步骤与 SQL 排查脚本。

U
UFO_PF 2023-04-05 · 阅读 12 分钟
Br 主题
阅读提示
本文约 4,712 字,预计阅读 12 分钟。文中命令与配置均经过实测,可直接参考执行。

引言:上线三个月后才发现,内容和工具绑死了

选择构建器型产品的那一刻,你通常只考虑了“好不好用”。但真正决定长期成本的,是另外三个问题:我的页面数据存在哪里?如果停用它会变成什么?迁移到别家需要重做多少内容?

这三家的答案差异巨大。Elementor 把布局存在 post meta 的 JSON 里,正文可读性尚存;Divi 主要把结构写进 post_content 的短代码;Bricks 则以结构化的 post meta + 局部 Gutenberg 兼容的方式存储。不同的存储方式,直接决定了三年后的迁移难度。

如果你已经身处其中,本文提供的方法可以直接用;如果你正在选型,请把“退出成本”作为第一决策依据——这也是Hello Elementor 与容器类主题的取舍里强调的同一个原则。

原理分析:三种存储结构决定了三种命运

构建器 数据存放位置 正文特征 停用后的表现 迁移难度
Elementor _elementor_data (post meta) + _elementor_edit_mode post_content 里以 Gutenberg 区块形式存一份(通常是 <!-- wp:html --> 包装) 裸 HTML 仍可读,样式大部分丢失 中
Divi post_content 内的 [et_pb_*] 短代码 + _et_pb_use_builder meta 正文被短代码完全占据 页面上全是裸露的短代码文本 高
Bricks _bricks_page_content_2 (post meta) post_content 保留较强的可读 HTML 输出相对干净,样式丢失 中低

核心结论是:内容离原生 Gutenberg 结构越近,迁移越容易。Divi 的短代码方式意味着 post_content 里全是 [et_pb_section ...] 这样的私有语法,一旦主题停用就是满屏乱码文本;而 Elementor 和 Bricks 在 post_content 里保留了更接近 HTML 的痕迹,至少能被搜索引擎和迁移工具识别。

另一个维度是 耦合面:Divi 既是主题又是构建器(强耦合),Elementor 是插件(可搭配任意主题),Bricks 是主题自带构建器(中耦合)。耦合越紧,卸载时需要处理的周边(主题自身的选项数据、配套插件、License)越多。

保姆级实操

第一步:先量化你被绑定了多少。

-- 统计有多少页面用了各家的构建器
SELECT 'Elementor' AS builder, COUNT(*) AS pages
  FROM wp_posts p JOIN wp_postmeta m ON p.ID = m.post_id
 WHERE m.meta_key = '_elementor_edit_mode'
UNION ALL
SELECT 'Divi', COUNT(*)
  FROM wp_posts
 WHERE post_content LIKE '%[et_pb_section%'
UNION ALL
SELECT 'Bricks', COUNT(*)
  FROM wp_postmeta
 WHERE meta_key LIKE '%_bricks_page_content%';
# 用 WP-CLI 快速跑上面的统计
wp db query "SELECT COUNT(*) FROM wp_posts WHERE post_content LIKE '%[et_pb_section%';"

第二步:检查有多少内容是「纯构建器」而无法被原生编辑。

Elementor 用户常以为自己在用区块编辑器,其实正文可能是被 <!-- wp:html --> 包裹的一大坨 HTML。

wp db query "SELECT ID, post_title FROM wp_posts WHERE post_content LIKE '<!-- wp:html -->%' AND post_type='page' LIMIT 20;"

命中数量越多,说明越多内容无法在未来享受区块编辑器的红利。

第三步:导出前先看结构化程度是否合理。

# 导出包含构建器元数据的完整 XML(注意:默认导出不含 meta,需要工具支持)
wp plugin install wordpress-importer --activate
wp export --dir=./wp-content/uploads/exports --start_date=1970-01-01 --post_type=page

标准 WordPress 导出(wxr)默认不包含 post meta,所以构建器的数据并不会随之导出。迁移必须依赖各家自己的 Import/Export 工具,这一点很多人忽略了。

第四步:做迁移前先把「锚主任医师」格式清洗出来。

Divi 用户迁移的第一步通常是用 wp search-replace 把短代码替换成原生区块,但这必须分步验证:

# 先在克隆环境试运行(--dry-run 只报告不写入)
wp search-replace '[et_pb_section' '' --include-columns=post_content --dry-run --network=0

# 确认影响行数与抽样内容后,再执行真实替换(务必先备份)
wp db export pre-divi-clean.sql

第五步:Elementor → 原生区块的渐进替换。

Elementor 用户可以按页面逐个「Convert to Blocks」,但付费部件不支持。更可控的做法是:

<?php
// mu-plugins/migration-helper.php —— 找出仅包含 HTML 区块的页面,优先处理它们
add_action( 'admin_menu', function () {
    add_submenu_page(
        'tools.php',
        '迁移候选页',
        '迁移候选页',
        'manage_options',
        'migration-candidates',
        function () {
            global $wpdb;
            $rows = $wpdb->get_results(
                "SELECT ID, post_title FROM {$wpdb->posts}
                 WHERE post_type='page' AND post_status='publish'
                   AND post_content REGEXP '<!-- wp:html -->'
                 LIMIT 100"
            );
            echo '<div class="wrap"><h1>可优先迁移的页面</h1><ol>';
            foreach ( $rows as $r ) {
                printf(
                    '<li><a href="%s">%s</a></li>',
                    esc_url( get_edit_post_link( $r->ID ) ),
                    esc_html( $r->post_title )
                );
            }
            echo '</ol></div>';
        }
    );
} );

第六步:核对移除后的残留。

# 停用构建器后检查前台是否还有裸露短代码
curl -s https://example.com/sample-page/ | grep -o '\[et_pb_[a-z]*' | sort | uniq -c | head
# 期望输出为空

常见踩坑

  1. 以为 wp export 能带走构建器布局。标准导出不带 post meta,布局必须靠各家导出器。
  2. 直接在生产环境跑 wp search-replace 短代码替换。一旦替换后样式全丢且无法回退,务必先在克隆环境试运行并导出 SQL 备份。
  3. 忘了处理 Global widgets / Theme Builder 模板。它们在 wp_posts 里是独立的 post type(elementor_library、et_pb_layout、bricks_template),主内容线索迁走了,引用它们的模板却没有跟上,页面上就会出现大片空白。
  4. 忽视 license 到期后的更新断供。Bricks 与 Elementor 的 License 到期只是不能更新,一般不影响既有站点运行;但 Divi 与 Élémentor Cloud 这类打包方案在计费结束后的策略需要看官方条款。
  5. 认为 Bricks 因为是主题所以“没有插件依赖”。实际上 Bricks 仍然引入自身的 class 与 API,只是耦合面比 Divi 少。
  6. 没有统计多语言站点的影响。WPML/Polylang 下同一页面每种语言都要重建模板,迁移量 × N。
  7. 案例:某客户从 Divi 迁到 Astra + Spectra,直接在新站导入旧站的 WXR 导出。前台出现大量 [et_pb_row] 文本,且部分页面因为短代码未闭合导致 HTML 结构错乱、页脚被挤到正文中间。最终处理方式是:回退数据库 → 用 wp post delete $(wp post list --post_type=page --format=ids) --force 清空 → 重新编写核心页面。教训:跨建构器迁移本质上是一次重做,不是一次导入;把它当成内容重建项目来排期,而不是当成一次搬迁。

总结

选型判断标准:优先选把内容存在原生结构附近的工具。具体到三家:Elementor 生态最大但付费部件依赖强、迁移成本中;Bricks 性能好、数据结构相对干净,但社区规模较小、找人维护难;Divi 全家桶耦合最深,短代码方式让迁移代价最高。

行动清单无论选哪家都要做(停用构建器后还要按插件停用卸载后的残留数据清理处理它的 post meta 与定时任务):每季度导出一次构建器自有的完整包 + 一份数据库备份;把高频模块做成可复用的全局部件而非逐页堆砌;关键落地页保留一份“纯 HTML”版本(哪怕是一个 <!-- wp:html --> 区块下的干净 HTML),日后工具不可用时不至于全站崩塌。

U
UFO_PF作者

专注 WordPress 生态的实战作者,内容以「可复制、可验证」为第一原则。

留下你的想法

邮箱地址不会被公开。带 * 的为必填项。