搜索全站
插件 10 分钟阅读

WP All Export 导出数据做备份与迁移:模板、筛选与定时导出

要迁移站点或交给客户核对数据?WP All Export 能按任意条件筛出文章并导出成 CSV/XML/JSON。本文讲清列编辑器、筛选条件、高级查询模式、模板复用与定时导出的落地方式。

U
UFO_PF 2024-10-31 · 阅读 10 分钟
WP 插件
阅读提示
本文约 3,918 字,预计阅读 10 分钟。文中命令与配置均经过实测,可直接参考执行。

引言:备份插件解决不了”只导出一部分数据”

完整备份有 UpdraftPlus 这类工具,但实际工作里更常见的需求是”只导出一部分”:把 2024 年之后发布的产品导出给客户核对价格;把某个分类下的 500 篇文章连自定义字段一起导出,准备迁到新站;每月导出一次订单数据给财务。

WordPress 自带的「工具 → 导出」只能导出默认的文章/页面/自定义类型,格式是 WXR(XML),不含自定义字段,也不能按字段值筛选。WP All Export 补的就是这块:它把导出拆成”选什么数据 → 选哪些列 → 什么格式 → 什么时候跑”四步,配置可以存成模板反复用。

原理分析:导出其实是”查询 + 列映射”

导出的底层逻辑可以理解成两条 SQL 加一层映射:

  1. 选数据:按文章类型、分类、作者、状态、日期区间、自定义字段条件筛出一个 ID 集合;
  2. 取列:对每个 ID,按你拖好的列配置逐个取值(标题、内容、特色图 URL、某个 meta、某个分类名)。

这个结构决定了两件事:

  • 筛选条件越精确,导出越快;不加任何条件导出十万条数据,内存和超时都会出问题。
  • 列的取值方式决定了迁移难度。比如特色图导出成”附件 ID”在新站毫无意义,导出成”图片 URL”才可能被 WP All Import 重新下载;分类导出成 slug 比导出成 ID 更安全。
导出格式 适用场景 注意
CSV 给客户看、进 Excel、给财务 中文需 UTF-8 BOM,否则 Excel 乱码
XML 配合 WP All Import 迁移 结构可自定义,字段嵌套友好
JSON 给程序/接口消费 字段类型保持较好
Excel(XLS/XLSX) 客户直接改完回传 通常需付费扩展

另外一个关键设计:导出的”列配置 + 筛选条件”可以保存为模板。模板复用意味着每月的例行导出不需要重配,也让”导出 → 导入”的迁移链路可重复验证。

保姆级实操

第一步:新建导出并选择数据源

「All Export → New Export」,选择 Post Type(如 product)。之后进入「Choose Data to Export」:

  • Specific Post Type:带可视化筛选器,最常用;
  • WP_Query Results:直接贴 WP_Query 参数(PRO 版),适合复杂条件;
  • Custom Query:直接写 SQL(PRO 版),适合跨表聚合。

第二步:配置筛选条件

常用筛选器:

  • Taxonomy:等于 / 不等于某个分类;
  • Author、Post Status、Date Range(Publish date / Modified date);
  • Custom Field:price 大于 1000,或 stock 等于 0。

想做”库存为 0 且价格大于 1000 的产品”,用 WP_Query 模式更直观:

array(
    'post_type'      => 'product',
    'post_status'    => 'publish',
    'posts_per_page' => -1,
    'fields'         => 'ids',
    'meta_query'     => array(
        'relation' => 'AND',
        array( 'key' => 'stock', 'value' => 0, 'compare' => '=', 'type' => 'NUMERIC' ),
        array( 'key' => 'price', 'value' => 1000, 'compare' => '>', 'type' => 'NUMERIC' ),
    ),
    'tax_query'      => array(
        array( 'taxonomy' => 'product_cat', 'field' => 'slug', 'terms' => 'ventilation' ),
    ),
)

需要跨表统计(比如”导出评论数超过 10 的文章”)时用 Custom Query:

SELECT p.ID, p.post_title, COUNT(c.comment_ID) AS comment_count
FROM wp_posts AS p
LEFT JOIN wp_comments AS c ON c.comment_post_ID = p.ID AND c.comment_approved = '1'
WHERE p.post_type = 'post' AND p.post_status = 'publish'
GROUP BY p.ID
HAVING comment_count > 10
ORDER BY comment_count DESC;

第三步:拖列并调整取值格式

右侧列编辑器把可用字段列出来,拖到中间即可。几个高频调整:

  • 特色图:默认可能导出 ID,改成导出 URL(列设置里选 Export the image URL),迁移时才能被重新下载;
  • 分类:选 Export the term names(名字)或 Export the term slugs(slug),多值可设分隔符;
  • 自定义字段:在列编辑器底部「Add Custom Field」填 meta_key,例如 _price;
  • 内容:可勾选 Export the post content as HTML,否则会剥掉标签。

顺序即 CSV 列顺序,导出前在预览区核对一遍表头。

第四步:保存模板并试跑

点「Export」前先确认右上角行数合理。第一次建议只导出前 10 条验证格式:在筛选里加「Limit to 10 records」。确认无误后点「Save Template」存为”月度产品导出”。

第五步:定时导出

PRO 版在「Manage Exports → Scheduling」里开启自动导出,会生成一段 cron URL:

# 每月 1 号凌晨 3 点触发一次导出
0 3 1 * * /usr/bin/wget -q -O - "https://mimangfei.com/wp-cron.php?export_key=XXXX&export_id=2&action=processing" >/dev/null 2>&1

导出文件可以配置输出到 FTP/SFTP 或亚马逊 S3,避免堆积在站点目录里被人直接下载。若你已用系统 crontab 接管了 WP-Cron,调度机制的原理和取舍参见 WP-Cron 改用系统 crontab。

第六步:把导出结果喂回导入

迁移场景的标准流程是:本站 WP All Export 导出 XML → 新站 WP All Import 导入(唯一标识用 SKU 或 slug,图片勾”下载远程图片”)→ 导入后核对数量与随机抽 10 条比对字段 → 最后统一替换域名(见 批量替换文章内容)。

常见踩坑

  1. Excel 打开 CSV 中文乱码。 导出时勾选 UTF-8 BOM,或让客户用”数据 → 从文本导入”并指定 UTF-8。
  2. posts_per_page => -1 导致超时。 大数据量分批导出(按年份、按分类),或直接加 fields => ids 减小内存占用。
  3. 导出了 meta ID 而不是值。 自定义字段若存的是附件 ID、用户 ID,直接导出在新站是废数据,必须先转成 URL / 用户名 / slug。
  4. 内容里的短代码没展开。 导出的是原始内容,短代码会以 形式存在,迁移到不同主题的新站后可能失效。
  5. 定时导出 URL 泄露。 该 URL 不需要登录即可触发导出,别提交到公开仓库;必要时限制 IP 或加一层 Basic 认证。
  6. 导出的文件留在 wp-content/uploads/ 可公开访问。 里面可能含未发布的草稿内容或客户数据,务必改到非 Web 可访问目录,或加 .htaccess 限制。
  7. 案例: 客户要求”每月导出一次全站产品含价格”。管理员建好导出后忘了设行数上限,导出脚本一次遍历 3 万条并逐条取 20 个 meta,PHP 内存打到 512M 上限直接 500,导出失败还把站点拖慢了两分钟。改成按分类分 6 次导出、每次 5000 条,并把内存限制提到 1G 后稳定。教训:导出的成本随”行数 × 列数”增长,务必分批处理并监控内存。

总结

用 WP All Export 的口诀是”筛选先行、格式对齐、模板复用”:先把条件收紧到真正需要的那部分数据,再把每列的取值格式调成”可迁移”的形态(URL 而非 ID、slug 而非 ID),最后把配置存成模板让重复导出不再重配。

判断导出是否成功的三条标准:行数与后台筛选结果一致;随机抽 10 条在新环境能完整还原(含图片与分类);过程不把站点拖慢。例行导出建议输出到站外存储并加访问控制。数据出口整理好之后,导入侧的映射配置可以参考 WP All Import 批量导入配置。

U
UFO_PF作者

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

留下你的想法

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