Lazy loaded image
技术分享
📑技术分享 | 用 WP-CLI 为 WordPress 导出/导入文章
字数 2209阅读时长 6 分钟
2025-11-8
2025-11-8
type
status
date
slug
summary
tags
category
icon
password
URL

🌱 背景:为什么我要重新开始?

最近,我发现自己的 WordPress 网站越来越“沉重”——后台响应迟缓、数据库膨胀、插件冲突频发。虽然站点内容不多,但因为早期安装了大量实验性插件,导致数据库中残留了许多无用表和冗余选项。久而久之,网站性能明显下降,维护成本反而上升。
于是,我决定采取一个经典但有效的策略:彻底清零,从头再来
目标很明确:
  • 部署一个全新的、干净的 WordPress 环境;
  • 只迁移真正需要的内容(文章、分类、标签);
  • 彻底摆脱历史包袱,轻装上阵。
然而,问题来了:我的文章总量不小,导出的 XML 文件超过 15MB。通过 WordPress 后台“工具 → 导出”功能下载时,由于服务器带宽有限(仅 1Mbps),浏览器频繁因超时中断,文件总是在下载到 10MB 左右时失败。
怎么办?这时候,我想到了一个更高效、更可靠的方案——使用 WP-CLI 命令行工具直接在服务器端导出 XML

⚙️ 为什么选择 WP-CLI?

WP-CLI 是 WordPress 官方推出的命令行工具,被誉为“WordPress 开发者的瑞士军刀”。相比传统的后台操作,它有以下显著优势:
  • 不依赖 Web 界面:即使后台卡顿甚至无法访问,只要能 SSH 登录,就能操作;
  • 执行效率高:直接调用 PHP 和数据库,绕过 HTTP 请求和浏览器限制;
  • 支持自动化:可集成到脚本中,实现批量或定时任务;
  • 输出稳定可靠:生成的 XML 是标准 WXR(WordPress eXtended RSS)格式,与官方导入器完全兼容。
对于像我这样需要导出大文件、又受限于网络环境的用户来说,WP-CLI 几乎是唯一可行的方案。

🛠️ 准备工作

在动手前,需确保以下条件满足:
  1. 拥有服务器的 SSH 访问权限(我使用的是 Ubuntu 22.04 LTS);
  1. 当前用户对网站目录有读取权限(通常需进入 wp-config.php 所在目录);
  1. PHP CLI 环境已安装且可用(可通过 php -v 验证);
  1. WP-CLI 尚未安装(大多数生产环境默认不包含)。
🔒 注意:出于安全考虑,本文已对服务器 IP、域名、路径等敏感信息进行脱敏处理。

📝 操作步骤详解

第一步:安装 WP-CLI

由于直接从 GitHub 下载常因网络问题失败,我改用清华大学开源镜像站提供的国内加速链接:
仍然失败,那就手动下载:
 
安装完成后,验证是否成功:
如果看到 PHP 版本、WP-CLI 版本等信息,说明安装成功!
💡 提示:若遇到 proc_open() disabled 错误,需编辑 php-cli.ini,移除 disable_functions 中的 proc_open 和 proc_get_status。这是宝塔等面板环境的常见限制。

第二步:生成标准 WXR XML 文件

进入 WordPress 站点根目录(即 wp-config.php 所在位置),执行导出命令:
该命令会:
  • 自动识别 WordPress 配置;
  • 遍历所有文章、页面、分类、标签、作者等;
  • 生成一个标准命名的 .xml 文件(如 yoursite.2025-11-08.xml);
  • 不包含插件数据或无用表结构,仅保留内容层信息。
✅ 重要说明:wp export 默认已包含附件(图片)的 URL 引用,无需额外参数。所谓“附件”是指媒体库中的文件链接,而非二进制数据本身,因此 XML 文件体积可控。

第三步:安全下载 XML 文件

由于文件较大(>15MB),不要通过浏览器下载!而是利用 SSH 协议直接拉取:
在本地电脑终端执行(非服务器内):
这种方式:
  • 不受 PHP 超时或内存限制;
  • 连接稳定,支持大文件传输;
  • 无需暴露 Web 目录权限。

🧩 遇到的问题与解决方法

在整个过程中,我遇到了几个典型问题,记录如下供参考:
问题
原因
解决方案
wp: command not found
WP-CLI 未安装
通过清华镜像下载并安装
Permission denied 写入失败
在 Web 目录无写权限
改在家目录或 /tmp 下载
proc_open() disabled
PHP CLI 安全限制
修改 php-cli.ini,启用必要函数
--with-attachments 报错
参数名错误
正确写法为 --with_attachments,但通常可省略
浏览器下载中断
网络慢 + 超时
改用 scp 或 SFTP 工具下载

🎯 导入到新站点

拿到 XML 文件后,在全新安装的 WordPress 后台:
  1. 安装官方插件 “WordPress Importer”;
  1. 上传 XML 文件;
  1. 勾选 “下载并导入文件附件”(确保旧站图片仍可访问);
  1. 映射作者,完成导入;
  1. 删除 Importer 插件,保持系统干净。
至此,一个轻盈、高效、无历史负担的新站点就诞生了!
 
但是,我在运行导入器导入文章后,过20-30秒左右提示:HTTP ERROR 524,页面卡在: https://www.hotelenglish.cn/wp-admin/admin.php?import=wordpress&step=2 我点击浏览器的返回键,回到后台,显示: “抱歉,有错误发生。 文件是空的。请上传有内容的文件。这个错误也有可能是因为您的 php.ini 文件禁止了上传,或 php.ini 中 post_max_size 的值小于 upload_max_filesize 的值。”

1. HTTP ERROR 524(Cloudflare 特有错误)

524 = A timeout occurred
Cloudflare 在等待你的服务器响应时超时(默认 100 秒),导入过程耗时超过这个时间(尤其是大 XML 文件 + 下载附件),于是 Cloudflare 断开连接,返回 524。
✅ 这说明:导入其实还在后台继续运行,但浏览器“以为”失败了。

2. 返回后提示“文件是空的”

这是因为你点击“返回”后,浏览器重新提交了一次表单(或刷新了页面),但此时临时上传的 XML 文件已被清理,或者会话失效,导致系统找不到文件。

3. 部分文章已导入,但不完整

这进一步证明:导入进程确实执行了一部分,但被中断(或你以为中断了)

既然前面能用 wp export,当然也能用 wp import —— 完全绕过 Web 界面和 Cloudflare!

前提:

  • 已安装官方导入器插件(或 WP-CLI 能识别 WordPress Importer)
  • XML 文件已上传到服务器(比如在 /home/ubuntu/site.xml

步骤:

📌 如果想同时下载图片,则去掉 --skip=attachment,但要确保:
  • 旧站图片仍可公开访问;
  • 服务器能联网抓取外部资源。

优点:

  • 无超时限制(PHP CLI 默认不限时);
  • 全程在终端输出进度,清晰可见;
  • 不会因浏览器刷新而中断
✅ 这是我最推荐的方式,尤其适合大站点迁移。

🧪 示例:完整 WP-CLI 导入命令

导入过程中你会看到类似输出:
完成后,直接去前台查看文章是否齐全!

💬 结语

技术的本质是解决问题。面对臃肿的旧系统,与其不断打补丁,不如勇敢地“推倒重来”。而 WP-CLI,正是我们实现这一目标的利器。
希望这篇记录能帮助到同样面临 WordPress 迁移困境的朋友。如果你也有类似经验,欢迎在评论区交流!
龚老师说:干净的系统,从新开始。

本文基于真实运维实践撰写,所有命令均在 Ubuntu 22.04 + WordPress 环境下验证通过。
 
上一篇
学术研究 | 高职院校旅游管理专业学生的人工智能素养
下一篇
技术分享 | 轻松搞定SSL证书自动续签:一站式解决方案

评论
Loading...