本文最后更新于 2026年5月19日。
将 WordPress 中的私密文章迁移到 Directus,通常需要经历 “导出—清洗—建模—导入” 四个核心阶段。由于 Directus 是 Headless CMS,它不会像 WP 那样自动处理前端路由,因此需要手动配置权限映射。
以下是具体的迁移方案:
1. 导出 WordPress 数据
推荐使用 WP 原生的导出功能,或者通过 REST API 获取数据:
-
方法 A (推荐): 使用 WP 后台的 工具 -> 导出,选择“文章”,这会生成一个 XML 文件(WXR 格式)。
-
方法 B (开发者优先): 使用 WP REST API 获取数据,这样可以直接拿到 JSON 格式,方便后续处理。
-
注意:获取“私密”文章需要经过身份验证(如使用 Application Passwords)。
-
端点:
GET /wp-v2/posts?status=private
-
2. 在 Directus 中建立数据模型
在 Directus 仪表盘中创建一个新的 Collection(例如 posts),并根据 WP 的结构建立字段:
-
title (Input)
-
content (WYSIWYG 或 Markdown)
-
slug (Input)
-
publish_date (Datetime)
-
status (Dropdown) — 设置选项为
published,draft,private。
3. 数据转换与清洗
由于 WordPress 导出的 XML 或 JSON 包含很多冗余元数据(如 guid, comment_status 等),你需要编写一个简单的脚本(Python 或 Go)进行转换:
-
HTML 处理: WP 的文章通常包含大量的
wp-block标签,建议将其清理为标准 HTML 或 Markdown。 -
私密状态映射: 确保将 WP 的
post_status: private映射到 Directus 中对应的字段值。
4. 导入到 Directus
你可以使用 Directus 官方提供的工具:
-
CSV 导入: 如果文章数量不多,将数据处理成 CSV 文件,在 Directus 界面直接点击 Import。
-
API 导入 (推荐): 使用 Python 或 Node.js 遍历处理好的 JSON 数据,通过
POST /items/posts写入。
5. 实现“私密”权限(关键步骤)
Directus 默认不区分 WP 那种“私密文章”的概念,你需要通过权限系统来实现:
-
创建角色: 在 Directus 的 Project Settings -> Roles & Permissions 中创建一个角色(例如
Member)。 -
设置权限:
-
针对
Public角色:设置过滤条件,仅允许读取status等于published的文章。 -
针对
Member角色:允许读取status等于published和private的文章。
-
-
鉴权: 在你的前端网站中,通过 Directus SDK 传递用户的 Access Token,只有验证通过的用户才能调取状态为
private的内容。
提示:关于媒体文件
WP 的文章内图片通常存储在 wp-content/uploads。迁移时:
-
建议将图片上传到 Directus 的 Files Library。
-
上传后,需要批量替换文章 HTML 内容中的
<img>标签源码,将旧的 WP URL 指向 Directus 的文件 UUID URL。