601451f22b
Overlay ~150 upstream items onto our V8.12 base, preserving trade-pro
theme, registry tests, and design docs. Re-applied our patch set
(discovery/env_for/blocks.css/type-mapping/theme_color/frontend entries,
test_theme_pro_v3 mods) — all anchors survived upstream evolution.
New platform enhancement (fixes upgrade-introduced regression):
multilingual.site_locale now honors settings_json.locale, plus
PUT /api/i18n/sites/{id}/locale — standalone English sites get
<html lang='en'> under the V8.15 locale-rewrite pipeline.
compose: adopt V8.21.3 (image 8.21.3-dev.1, /api/ready probes, MySQL/S3
env) with project name pinned to siteforge-v8-10 (data volumes).
Tests: 356 passed / 11 failed — all 11 confirmed pre-existing in
pristine V8.21.3 on this host (10 upstream Windows env + our build test
now green after locale fix). Patch registry updated in plan doc.
Co-Authored-By: Claude Code <noreply@anthropic.com>
49 lines
4.4 KiB
Markdown
49 lines
4.4 KiB
Markdown
# SiteForge Enterprise V8.20 — WordPress 复杂迁移增强
|
||
|
||
版本:`8.20.0-dev.1`。此版本属于**开发集成版**,在 V8.19 完整源码上增加离线兼容预检、简单 ACF Repeater 结构保留、CSS 背景图本地化、批次暂存路径阻断。**不代表复杂 Elementor/ACF/WooCommerce 功能或设计已实现无损迁移。**
|
||
|
||
## 1. 新增实际功能
|
||
|
||
- 新增 `app/wp_complex_v820.py`,使用 `defusedxml` 安全解析最多 16 MB、20,000 条记录的 WXR,按已发布内容发现 URL 冲突、动态参数 URL、复杂 Elementor、ACF 字段、PHP 序列化、自定义文章类型、WooCommerce 和动态短代码。
|
||
- 新增后台 `POST /api/migrations/sites/{site_id}/wordpress/wxr-preflight`:`multipart/form-data` 的 `file` 字段,登录、CSRF 和站点 Editor 权限均必需。只读返回 JSON,不写站点数据,不访问外网。
|
||
- 现有 `/production-v8` WordPress 面板新增“兼容性预检”按钮和结果区。
|
||
- `app/importers.py` 直接 WXR 导入:带参数的动态 URL 或缺失原始路径现在拒绝导入,不再凭 slug 猜测路径;ACF 简单 Repeater 结构保留在 `meta.fields` 和 `meta.acf_repeaters` 中,原始字段仍保留供核对。
|
||
- `app/v8_workflows.py` WXR 暂存:复用预检阻断危险旧 URL;不再将自定义文章类型错当成分类;复杂组件形成发布审核项。
|
||
- `app/wp_migration_v82.py` 媒体本地化扩展至行内 CSS `url(https://...)`、`data-background`、`data-background-image` 与已有 `srcset`。只允许已授权主机的资源进入自动下载,其他 URL 需要单独审核。
|
||
- 新增 `scripts/wp_v820_preflight.py`:离线生成 JSON/HTML 风险报告;可选 `--dist` 对比静态 HTML 路径覆盖。
|
||
|
||
## 2. 直接运行
|
||
|
||
在项目根目录:
|
||
|
||
```bash
|
||
python scripts/wp_v820_preflight.py fixtures/v820/wordPress-complex-sample.xml --output reports/v820-demo.json
|
||
# 可选,待已经执行静态构建后:
|
||
python scripts/wp_v820_preflight.py export.xml --dist /absolute/path/to/build/dist --output reports/my-site.json
|
||
```
|
||
|
||
脚本返回码:`0` 表示没有识别到阻断问题且(如指定 `--dist`)没有发现缺失的 HTML 路径;`1` 表示出现阻断或缺失路径;`2` 表示输入、读取或 XML 解析失败。**退出码 0 不意味着布局或业务功能无损,人工审核仍是发布条件。**
|
||
|
||
在统一后台选择网站 → 网站生产控制台 → WordPress 迁移 → 选择 WXR 文件 → 点击“检查旧 URL / Elementor / ACF / 动态功能”。
|
||
|
||
## 3. 风险与未完成项目
|
||
|
||
| 方向 | 当前实现 | 未完成的生产验收 |
|
||
|---|---|---|
|
||
| Elementor | 识别已支持/未知组件,有限静态 HTML 转换,保留原始 JSON | 容器布局、动态标签、全局样式、响应式精确还原、交互插件 |
|
||
| ACF | 单值字段、简单 Repeater 的有界结构提取;PHP 序列化只标记,不执行 | 字段组 schema、Flexible Content、嵌套 Repeater、关系字段、文件字段 |
|
||
| WooCommerce | 识别产品相关数据并列入审核 | 变体、价格策略、库存、购物车、结算、订单等动态服务 |
|
||
| 媒体 | 同源 HTTPS/HTTP 图片与 CSS 背景图引用分析及本地化 | 跨域 CDN 授权、尺寸变体资源、未引用附件、CSS 外链文件及版权许可 |
|
||
| URL/SEO | WXR 旧路径预检,静态构建路径核查,原有 SEO 差异工具 | 真正旧站的完整 Sitemap + robots + 分页 + 301 + Canonical 实测核对 |
|
||
| 插件功能 | 表单、动态短代码、iframe 标为风险 | CRM/表单业务重建与实际浏览器 E2E |
|
||
|
||
WXR XML **不包含附件原文件,也不包含完整站点设置和全部插件配置**;需另行取得对应 WordPress 资源以及已获授权的插件数据。
|
||
|
||
## 4. 迁移作业建议
|
||
|
||
先备份 WordPress 原站、数据库与媒体文件;离线预检 WXR 和 Sitemap;修复阻断问题后按站点逐步暂存/提交数据;迁移 CSS/响应式图片及全部媒体;新旧站逐 URL 对账,再在独立预生产环境实测 PC/移动端布局、交互、SEO、动态表单及发布回滚。上线前必须完成每一个已识别风险的人工复核。
|
||
|
||
## 5. 测试证据边界
|
||
|
||
自动化使用本地固定 WXR、TestClient 和模拟媒体,禁止把这些结果描述为真实客户网站的迁移通过。V8.18 生产 PostgreSQL/Redis/Docker 多 Worker 与 Art Design Pro 官方工程编译仍未完成真实现场验收。本包不会自行连接或更改用户的生产网站。
|