WordPress 插件:三级生成、多出口与版本升级
插件在链路里的位置
WordPress ──(插件)──> D1(结构化数据)
├─> R2(静态单页 + 媒体)
└─> 其它托管(S3 / GitHub / Netlify / …)
插件负责三件事:生成、同步、发布。它不是 Worker 的一部分,而是"源站适配器"。
三级生成
单页 HTML 的生成按顺序降级:
一级:内部模板渲染
在 WP 进程内 load_template(),拿到主题渲染结果。最快、最贴近原主题。
有个坑:load_template() 是 require_once 语义,同一进程第二次渲染会得到空内容。插件用 get_included_files() 做了 guard。
二级:前台抓取
内部渲染失败时,模拟 HTTP 请求访问前台页面,把 HTML 抓下来。
CLI 环境下 home_url() 可能退化成 http://localhost,所以脚本支持 --site=<原站 URL> 在 wp-load 前补 $_SERVER。
三级:硬编码兜底
前两种都失败时,用一份极简模板保证"至少有一页",并记录日志。
多出口
除了 Cloudflare,还支持:
- S3 兼容存储
- GitHub / GitLab
- Netlify / Vercel
- FTP / WebDAV
- 本地目录
出口是"能力"的组合:有的支持上传,有的支持删除,有的支持 D1。插件按能力分派,不假设每个目标都一样。
版本 2.5.0 的主要变化
- 列表每页文章数可配置;
taxonomies升级复合主键(type, slug),修复同名分类/标签串数据;- 主题静态资源随 Worker 打包为 assets,边缘免费直出;
- 清理死代码,新增
uninstall.php。
安装与升级
- 备份数据库;
- 停用旧版,覆盖插件目录;
- 启用后在设置页确认目标配置仍在;
- 如果表结构有变更,点一次「初始化 / 迁移」;
- 跑一遍「重建全部单页」。
插件不会自动改表结构,迁移需要手动触发,这是为了避免升级时静默改数据。