将WordPress插件移植到EmDash
保留插件的用户可见行为和数据模型,无需逐行翻译PHP代码。WordPress和EmDash的职责划分不同,因此首先要决定每个功能应归属于站点Schema、Astro代码、沙箱插件还是可信原生插件。
在实现插件代码前,请先加载创建插件。当移植涉及集合、种子数据、查询或前端模板时,请加载构建EmDash站点。这些技能定义了当前的API;本技能涵盖迁移决策。
理解源插件
检查插件源代码、安装行为、数据库变更、钩子、REST端点、计划任务、管理界面、短代码或块、前端输出、权限以及外部服务。识别用户依赖的行为,并区分开与WordPress特定实现的部分。
记录:
- 所需的内容和配置数据;
- 修改或发布数据的操作;
- 授权和信任边界;
- 后台或重试行为;
- 前端和管理员交互;
- 导入、迁移和回滚需求;
- 重用代码或资产的许可义务。
如果缺少源插件、预期行为或目标EmDash环境的信息,请报告差距而非自行虚构等价物。
分配每个职责
| WordPress 职责 | EmDash 目标 |
|---|---|
| 自定义文章类型、分类法或元数据 | 通过站点Schema或种子数据创建的集合、分类法和字段 |
| 全局呈现设置 | 站点设置,由Astro模板读取 |
| 插件拥有的用户设置 | ctx.settings;将凭据声明为加密的secret字段 |
| 插件拥有的游标、缓存或内部状态 | 插件作用域的ctx.kv |
| 插件拥有的可查询记录 | 声明的ctx.storage.<collection>存储 |
| 内容发现、翻译或发布 | 能力控制的ctx.content和ctx.schema;策略钩子和操作拥有单独的权限 |
| 运行时分类法或重定向管理 | ctx.taxonomies或ctx.redirects,具有有限的读/写能力 |
| 评论管理 | ctx.comments;读取会暴露个人数据,审核使用预期状态 |
| WordPress REST端点 | 声明的插件路由,包含明确的方法、输入、头部和响应模式 |
| 计划任务 | cron钩子和ctx.cron调度 |
| 管理页面或表单 | 沙箱插件使用Block Kit;仅可信原生插件使用React |
| 文章编辑器元框或已保存条目操作 | 私有路由上的admin.editorPanels或admin.editorActions |
| 用户或作者查询 | ctx.users,带users:read权限 |
| 出站HTTP请求 | ctx.http.fetch(),带network:request和allowedHosts条目 |
| 媒体操作 | 分别控制元数据读取、字节读取、元数据写入和上传/删除权限 |
WP_Query或模板标签 | EmDash内容API,位于Astro站点代码中 |
| 短代码或编辑器块 | 尽可能使用已有的Portable Text内容;自定义Portable Text块需要可信原生插件 |
| 原始头部标记或脚本 | 仅可信原生插件可使用page:fragments;通过注册表安装的插件只能贡献经过验证的page:metadata |
不要通过直接访问EmDash系统表来创建集合或分类法。应使用公开的模式、种子数据、CLI或管理边界。不要使用内部REST路由来模拟不存在的沙箱API。
保持权限分离:读取媒体元数据不授予字节访问权限,审核不授予删除权限,发布策略不授予发布操作权限,内容恢复不授予普通内容读取权限。
选择插件格式
默认使用沙箱插件。它支持便携式钩子、路由、声明的存储、媒体、网络访问、MCP工具和Block Kit管理界面,通过安装时的信任契约实现。
仅在功能需要主机进程访问、React管理代码、Astro渲染组件、原始页面片段或自定义Portable Text块定义时,才使用可信原生插件。在迁移计划中说明额外的权限和分发限制。
某些WordPress插件不需要EmDash插件。自定义文章类型加前端模板可能仅需Schema、种子数据和Astro页面即可。当静态站点结构涵盖所需行为时,不要添加运行时扩展。
规划数据迁移
在编写运行时代码之前,描述现有WordPress数据如何映射:
- 映射文章ID、slug、语言、作者、状态、修订版和发布日期;
- 保留文章、术语、媒体和插件拥有记录之间的关系;
- 区分一次性导入和需要持续同步的数据;
- 使导入可重新启动,并定义如何检测重复项;
- 保留源标识符,以便用于对账或重定向;
- 识别无法表达的内容,需要产品决策。
对新站点的初始Schema和示例内容使用种子数据。对现有站点的生产数据使用导入器或迁移路径;种子数据不是备份或持续同步机制。
验证等效行为
通过用户和运行时接触的边界进行测试:
- 针对内容模型更改的Schema和导入数据断言;
- 针对沙箱钩子、路由、存储和权限的生产边界插件测试;
- 针对管理员和前端流程的浏览器验证;
- 重启、重复交付、授权和失败情况(当源功能依赖它们时)。
比较可观察行为,而非内部结构。记录有意为之的差异以及任何仍然不受支持的WordPress功能。
交付移植
提供:
- WordPress行为和数据简洁清单;
- 职责映射表及沙箱/原生决策;
- 数据迁移或种子计划;
- 跨插件和站点代码的实现;
- 验证证据及已知差距;
- 重用代码或资产的归属和许可声明。