Files
hesu-JT/docs/superpowers/specs/2026-08-15-hesu-wordpress-theme-design.md
T

250 lines
24 KiB
Markdown
Raw Normal View History

2026-08-27 11:54:26 +08:00
# HESU WordPress 主题设计文档
- 日期:2026-08-15
- 状态:已获用户批准(三轮设计审查修正后)
- 来源:`d:\wp\demojt` 下 10 页静态 HTML 模板 → WordPress 经典主题
## 1. 目标与约束
把现有静态站(HESU,外贸企业站,暗色+橙色主题,英文)1:1 迁移为 WordPress 主题:
- **固定模板**:页面结构锁死,编辑者在后台只能改内容(文字/图片/数字),不能增删或调换板块。
- **公共板块可复用**:抽为原生自定义 Gutenberg 区块(`block.json` + PHP `render.php`),内容存在 `post_content` 区块标记中(非 post meta)。
- **内容后台填充**:区块编辑器可视化编辑;新闻走完整文章系统。
- **不依赖 ACF / 付费插件**:唯一插件依赖 Contact Form 7(联系表单)。
- **严格复刻设计稿**:前端输出 HTML 与静态站逐字节对齐(项目既定原则)。
- 交付位置 `d:\wp\demojt\hesu-theme\hesu\`(zip 后即为标准主题包)。
- 环境:本机无 PHP、无 WP;验证采用"便携 PHP + WordPress + SQLite 插件"一次性测试站(用户已确认)。
## 2. 关键决策记录
| 决策 | 结论 | 备选与理由 |
|---|---|---|
| 主题形态 | 经典主题(PHP 模板)+ 原生自定义区块 | FSE 全区块主题需重写全部 JS 交互(fullpage/pinned/时间线),风险高,弃 |
| 区块实现 | 原生 Gutenberg 区块,无构建工具链(编辑器脚本用原生 `wp.element`,非 JSX) | ACF Pro 区块被用户排除;无 npm 依赖,交付即用 |
| 内容存储 | 区块标记写入 `post_content` | 所见即所得、导入导出原生支持 |
| 结构锁定 | 页面包裹区块 `InnerBlocks templateLock:"all"` + 全部区块实例级 `lock:{move:true,remove:true}` | 见 §5 锁定机制 |
| 新闻 | CPT `news` + 分类法 `news_cat`,Tab 用**分类归档地址**(非自定义 query var) | 原生分页/高亮/canonical 免费获得 |
| 联系表单 | Contact Form 7,seed 时程序化创建默认表单 | 未装 CF7 时显示引导占位 |
| 资产加载 | `has_block()` 判断内容区块条件加载 CSS/JS | 与 slug/模板解耦,编辑者改 slug 不影响 |
| Header/Footer | WP 菜单(自定义渲染)+ Customizer,不做区块 | 见 §6 |
| Seed | `after_switch_theme` 一次性播种(幂等守卫 + 管理员手动重跑按钮) | |
## 3. 主题目录结构
```
wp-content/themes/hesu/
├── style.css # 主题头信息 + 站点基础样式(原 style.css)
├── functions.php # 入口,require inc/ 各模块
├── inc/
│ ├── setup.php # 主题支持、菜单注册、add_post_type_support('page','excerpt')
│ ├── assets.php # has_block() 映射表条件加载 + 编辑器样式
│ ├── blocks.php # 扫描 blocks/ 注册区块
│ ├── cpt-news.php # CPT news + 分类法 news_cat
│ ├── customizer.php # 社交链接、页脚标语、版权、Mega Menu 左侧文案
│ ├── seed.php # 激活播种 + 主题设置页(重新创建预置页面按钮)
│ └── walker-mega.php # Mega Menu 自定义渲染
├── header.php / footer.php
├── page.php # 所有以区块组成的页面共用(唯一渲染入口)
├── archive-news.php # 新闻列表(Tab + 分页)
├── single-news.php # 新闻详情
├── css/ js/ fonts/ image/ # 静态站资产原样迁移(保持相对路径结构)
├── editor-style.css # 编辑器预览样式(含页面级 class 场景)
└── blocks/ # 每区块一个目录:block.json / render.php / index.js
```
无构建步骤;PHP 目标 7.4+,WP 6.0+(用到区块实例锁)。输出一律转义(`esc_html/esc_attr/esc_url`)。
**前端 body class 注入(关键)**:各页面基底 CSS 挂在 `body.is-*` 上(如 `body.is-bp { background:#fff; ... }` 切换浅色主题),page-shell 只在 `<main>` 上输出 class 覆盖不到 body。静态站实际只有 3 种 body 钩子:`is-bp`(4 个业务页**和发展历程页**,main 同为 `bp`)、`is-news`、`is-contact`;首页/全球布局/关于我们三页 `<body>` 无 class。方案:`page.php` 经 `body_class` 过滤器解析当前 `post_content` 中 page-shell 的变体,注入 `is-bp`(含发展历程)/ `is-contact`(main 为 `ct`)/ `is-gp` / `is-au`(后两者 CSS 无对应钩子,仅为语义标记);`archive-news.php` / `single-news.php` 直接注入 `is-news`。编辑器侧则由 page-shell 的容器 class 提供同场景(§10)。
## 4. 区块清单(`hesu/` 命名空间,22 个)
> *勘误(2026-08-17):标题的 22 为早期概数,下表实列 33 个;实现最终为 37 个(补充 brand-card/cap/caps/partner-slide 以对应真实静态 DOM)。以实现与 readme 为准。*
### 通用
| 区块 | 属性/结构 |
|---|---|
| `hesu/hero` | 背景图(ID)、标题、副标题(RichText)、CTA(文字+链接)、SCROLL 指示器开关、对齐变体(左/居中/home/dh/ct);home 变体内置锁定 InnerBlocks 槽位放 stats-bar(DOM 与静态站一致:stats 在 hero section 内) |
| `hesu/stats-bar` → 子块 `hesu/stat` | 子项:图标图(可选)、数字、后缀、标签;输出 `data-count` |
| `hesu/business-intro` | 固定两栏:左(标题+RichText 段落+stats-bar) 右(图片) |
| `hesu/section-heading` | 标题(+副文+可选外框按钮) |
| `hesu/view-more` | 文字+链接 |
| `hesu/page-shell` | 页面级锁定容器:`templateLock:"all"`,class 由 seed 写死(如 `is-bp`/`page-content`),渲染为语义化 `<main>`(home 的 `page-content` 为 div,与静态站一致),无编辑 UI |
### 首页专属
| 区块 | 说明 |
|---|---|
| `hesu/bento-grid` → `hesu/banner-cell` + `hesu/media-card` | 四大业务磁贴,4 卡结构锁死 |
| `hesu/presence` | 标题+副文(含加粗)+按钮+世界地图图 |
| `hesu/hub-carousel` → `hesu/hub-card` | 区域轮播卡(图+区域名+链接) |
| `hesu/partner` | 轮播 slide(图) + 橙色覆盖层(标题+4 特性项:图标+词) |
| `hesu/news-grid` | 动态查询块:自动拉最新 4 篇新闻(图=特色图、分类+年份自动),仅"查看更多"链接可配 |
所有带锚点目标的区块(`gp-screen` 的 `gp-1..gp-5`、产品区 `#products` 等)的 `id` 为可配置属性,seed 沿用静态站原值,保证页脚锚点链接(如 `global-presence#gp-2`)不失效。
### 业务页专属
| 区块 | 说明 |
|---|---|
| `hesu/large-image` | 全宽大图框(bm-stock/gl-port 共用) |
| `hesu/product-cards` → `hesu/product-card` | 产品分类卡:主题内置 SVG 图标集选择(或自定义图)+名称 |
| `hesu/feature-cards` → `hesu/feature-card` | 统一"图标+标题+描述"卡片组,变体 class 区分 as-services / ae-region / as-region / gl-services 四处样式 |
| `hesu/showcase` / `hesu/brand-wall` / `hesu/model-list` | 汽车出口页专属 |
### 特殊页面
| 区块 | 说明 |
|---|---|
| `hesu/timeline` → `hesu/timeline-item` | 发展历程横向时间线(年份/标题/描述) |
| `hesu/gp-shell` → `hesu/gp-screen` | 全球布局 fullpage。容器含 `.gp-pagebg` 背景层;每屏变体(概览/区域,id `gp-1..gp-5` 可配);**概览屏内部含 `gp-nav-list` 链接列表(屏内容的一部分,非独立导航)**——列表项为锁定子区块(文案+`#gp-N` 锚点+`data-i`)。global-presence.js **零适配**原样迁移(它只做 active 高亮,按 `data-i` 匹配) |
| `hesu/au-stage` → `hesu/au-screen-1` / `hesu/au-screen-2` | 关于我们 pinned 视屏:内部结构(背景图/角图/遮罩/标语层/缩放图/大 logo)固定,开放文案+图片编辑。注意 au-screen-1 背景为 style 内联 background-image |
| `hesu/au-gps` | 关于我们底部区,**内部 4 层锁定结构**:① head(标题+文案) ② 4 图一行 ③ 宽幅图 ④ 左右分栏——左侧数据轮播(`au-gps__data-card`: 图+标题+描述 ×3,圆点由 about-us.js 驱动) + 右侧图文覆盖卡(图+overlay 标题+文案) |
| `hesu/contact-form` | CF7 表单下拉选择器+容器样式;CF7 未装显示安装引导占位 |
| `hesu/contact-map` | 总部地图:默认嵌入静态站的 OpenStreetMap iframe(URL 可配置) |
### 编辑器脚本与渲染约定
- 主文案内联 RichText;数字/后缀/链接等用右侧栏 TextControl(控制代码量)。
- **RichText 属性存储(关键陷阱)**:本主题区块全部为动态渲染(render.php、无 save 函数),RichText 属性**禁止用 `source:'html'`**(无保存标记可解析会丢内容),一律普通 string 属性 + `value`/`onChange`。
- **stat-num DOM 微结构(关键)**:main.js 计数器以 `el.firstChild.nodeValue` 写数字——`<span class="stat-num" data-count="20">20<span class="plus">+</span></span>` 中数字文本节点必须是 firstChild,render.php 输出不得多包元素。
- 容器类动态区块 render.php 必须输出 `$content`(InnerBlocks 内容)。
- 不做 inserter `example` 配置(页面锁死,无人手动插入区块)。
- 共享 helper(createElement 包装、公共 Inspector)提为 `blocks/editor/helpers.js` 单 handle。
## 5. 结构锁定机制(核心)
1. **页面级**:每个页面 = `page-shell`(或首页 = `hero(home)` + `page-shell` 两个顶层块,因静态站 DOM 中 hero 在 `page-content` 之外)。顶层块带实例锁 `lock:{move:true,remove:true}`。
2. **容器级**:`page-shell` 内 `InnerBlocks templateLock:"all"`——不能增删/移动子板块,只能进入编辑内容。
3. **编辑器加固**:非管理员隐藏区块插入器与解锁入口(editor settings 过滤)。
4. **残余风险(已向用户说明)**:WP 核心无法阻止管理员手动解锁破坏结构;文档注明"解锁=破坏页面"。
## 6. Header / Footer 内容来源(不用区块)
| 部位 | 配置方式 |
|---|---|
| Logo | 原生 Custom Logo |
| 主导航 | WP 菜单;Mega Menu 用 `wp_get_nav_menu_items()` 自定义渲染:卡片 = 菜单项,卡片图 = 目标页特色图片(无图回退主题占位图,如指向归档/锚点的 News 卡),卡片文案 = 页面摘要(页面启用 excerpt)或菜单项描述 |
| Mega Menu 左侧文案 × 2 组 | Customizer 文本字段 |
| Contact Us 按钮 | 指向联系页 |
| Footer 5 栏 | 1 个 WP 菜单(4 个一级项=4 栏) + 标语走 Customizer |
| 社交图标 4 个 | Customizer(平台+URL) |
| 版权 / Privacy / Terms / Sitemap | Customizer |
| 菜单高亮 | `nav_menu_css_class` 过滤器补 `active` 类(静态 CSS 认 `.active`,WP 原生输出 `.current-menu-item`) |
Mega Menu 卡片恰好 4 张是布局约束,seed 保证初始 4 项;文档说明增删项会改变布局。
## 7. 页面编排(seed 写死顺序)
| 页面 | 组成 |
|---|---|
| 首页 Home | `hero(home,含stats)` + `page-shell(page-content)` → bento-grid → presence → hub-carousel → partner → news-grid |
| 建材出口 | `page-shell(is-bp)` → hero → business-intro(+stats,4 项 data-count) → large-image → product-cards → view-more |
| 汽车出口 | `page-shell(is-bp)` → hero(居中) → business-intro(无 stats,静态站此页没有) → showcase → brand-wall → model-list → feature-cards(region) → view-more |
| 售后改装 | `page-shell(is-bp)` → hero → business-intro(无 stats,静态站此页没有) → feature-cards(services) → feature-cards(region) |
| 国际物流 | `page-shell(is-bp)` → hero → business-intro(+stats,4 项 data-count) → large-image(port) → feature-cards(services) |
| 全球布局 | `page-shell(main 为 gp-main)` → gp-shell(1 概览屏+4 区域屏) |
| 关于我们 | `page-shell(main 为 au-main)` → au-stage(2 pinned 屏) → au-gps |
| 发展历程 | `page-shell(is-bp,静态站此页 body 即 is-bp)` → hero(dh) → timeline |
| 联系我们 | `page-shell(is-contact,main 为 ct)` → hero(ct) → contact-form → contact-map |
| 新闻列表/详情 | PHP 模板渲染,不用区块 |
## 8. 新闻系统
- CPT `news`:支持标题/编辑器/特色图片/摘要;归档 `/news/`(**不建 News 页面,避免 URL 冲突**;导航 News 链接指向 `get_post_type_archive_link('news')`)。
- 分类法 `news_cat`(非层级):seed 建 4 词——Company News / Delivery Cases / Exhibition Info / Global Network(第 4 个供首页卡片 meta 与页脚 News 栏使用;Tab 自动列出全部词,初始即 4 个,较静态站多出 Global Network 一项为有意取舍)。Tab = 全部分类词的**归档地址链接**;分页原生。
- `archive-news.php`:新闻 Hero → Tab → **左文右图行列表(`.nw-row`,与静态站一致,非卡片网格)** → 分页(每页 5 条,与静态 news.js 的 PER_PAGE 一致)。行内 `[data-reveal]`/`.nw-row` 默认 `opacity:0`,reveal 逻辑并入 main.js(见 §10)。**Hero 背景图来源**:Customizer 新增"新闻 Hero 图"设置(theme mod,默认主题资产 `image/carexport/export-bg.jpg`),归档与详情共用。
- `single-news.php`(按 `demo-html/新闻详情1.jpg` 已读图确认):新闻 Hero+面包屑 → 分类标签+日期+标题 → 特色图 → 正文(核心区块编辑器,零自定义区块)→ 上一篇/下一篇 → 返回列表。
- 首页 `news-grid` 自动拉最新 4 篇。
- 静态 `news.js`(207 行,客户端渲染 15 篇硬编码数据 + Tab 过滤 + 分页)服务端化后大部分作废,不迁移;仅 reveal 行为由 main.js 承接。
## 9. Seed 流程
```
守卫(option hesu_seeded) → 图片入库(image/ 内容图经临时文件 + media_handle_sideload)
→ 建 9 个页面(锁定区块标记,引用图片附件 ID;9 页全部设置特色图片,供 Mega Menu 卡片使用)
→ 设 show_on_front/page_on_front → 建 4 个分类词
→ 建 15 篇示例新闻(迁移 news.js 内置的全部 15 篇数据,保证分页可见 3 页)
→ 建主菜单+页脚菜单并绑定卡位 → CF7 已激活时创建默认表单(字段=静态表单)
→ 写入 hesu_seeded
```
- CF7 晚于主题激活的场景:另挂 `activated_plugin` 钩子,检测到 CF7 启用且默认表单缺失时补建;主题设置页"重新创建预置页面"按钮作为最终兜底。
- Mega Menu 卡片无特色图时的占位:复刻静态站 `ph-*` 占位样式(底色 + "Photo" 标签的 div),不使用裸 `<img>`。
- 主题设置页提供管理员"重新创建预置页面"按钮(幂等重跑)。
- 若在已有内容的站点激活:seed 仍会创建预置页面并设置首页,文档说明预期用于全新安装。
## 10. 资产加载
| 层级 | 策略 |
|---|---|
| 全站 | `style.css` + `fonts.css` + `main.js`(footer 加载,与静态站 body 尾一致;扩展:新增对 `[data-reveal]` 与 `.nw-row` 的 IntersectionObserver reveal——业务页 `[data-reveal]` 与新闻行默认 `opacity:0`,无 JS 则内容不可见) |
| 按区块 CSS | `business-intro→business.css`、`hero→business.css`、`product-cards→building-materials.css`、`brand-wall/showcase/model-list→auto-export.css`、`feature-cards→after-sales.css+auto-export.css+global-logistics.css`(交叉装载无害:各文件选择器以自身变体 class 作用域)、`timeline→development-history.css+js`、`gp-shell→global-presence.css+js`、`au-stage→about-us.css+js`、`news-grid→news.css`、`contact-form→contact.css+js` |
| 按区块 JS | 出现任一业务页区块(hero/business-intro/product-cards/brand-wall/showcase/model-list/feature-cards/large-image)→ 加载 4 个业务页 JS(building-materials.js / auto-export.js / after-sales.js / global-logistics.js,共约 6KB)。理由:各文件自带选择器守卫(无目标即 return),其中 data-count 计数(建材/物流两页的 bp-stats)与部分 reveal 由它们驱动,main.js 的 `.stat-num` 计数器不覆盖 `bp-stat__num` 结构 |
| news.js | 不迁移(客户端渲染/过滤/分页已服务端化),reveal 逻辑由 main.js 扩展承接 |
| 模板直载 | archive/single-news 直接 enqueue `news.css` |
| 编辑器 | 编辑器侧加载 `fonts.css` + `style.css` + **全部页面 CSS**(约 130KB,仅后台开销,无法按页条件);page-shell 输出页面级 class(如 `is-bp`)使作用域 CSS 在编辑器 iframe 生效 |
| 行为边界 | 交互(计数/轮播/fullpage)仅在.front 前端运行,编辑器内为静态预览——WP 服务端渲染区块的固有限制 |
### CF7 与静态表单的样式映射
静态表单是自绘结构(`ct-form/ct-field/ct-label/ct-input/ct-selectwrap` + `#ctForm` 客户端校验 + `#ctNote` 成功态);CF7 输出 `form.wpcf7-form` + `span.wpcf7-form-control-wrap` 包裹。约定:
- seed 建表单时为每个字段 shortcode 挂静态 class(如 `[text* your-name class:ct-input]`)。
- `contact.css` 增补桥接规则:以 CF7 实际 DOM(`.wpcf7-form` / `.wpcf7-form-control-wrap` / `.wpcf7-not-valid` / 响应元素 `.wpcf7-response-output`)为目标复刻 ct-* 视觉。CF7 6.x 起状态类(`invalid` / `sent` / `failed` / `aborted` / `unaccepted` / `spam`)挂在 form 元素上(如 `form.wpcf7-form.sent`),响应元素仅保留 `.wpcf7-response-output`,桥接规则按 `form.{invalid,sent,...} .wpcf7-response-output` 匹配;校验与提交反馈全部交给 CF7 原生状态 class,`contact.js` 的表单分支不迁移。
JS 依赖事实:静态站全部 JS 为原生手写(无 GSAP/fullpage 库),**全部原样迁移、零适配**(global-presence.js 的 active 高亮依赖 `gp-nav-list a[data-i]` 标记,由概览屏锁定子区块保证)。main.js 的 network 无限轮播克隆逻辑要求 `.network-card` 为 `.network-track` 直接子元素,hub-carousel 渲染须保持该层级。
## 11. 验证方案(用户已确认搭一次性环境)
1. 下载便携版 PHP(≥7.4,含 pdo_sqlite)解压至项目临时目录(不入库)。
2. WordPress + SQLite drop-in(如 wp-sqlite-db)搭建一次性站点,安装主题与 CF7。
3. 实跑验收清单(§12)。
4. 测完删除临时站点;若用户后续装正式环境可复用清单。
## 12. 验收清单
1. 干净 WP 激活 → 页面/菜单/示例新闻自动生成,首页即成型。
2. 10 个路由与静态站逐页对照:板块顺序、数字滚动、Mega Menu、轮播拖拽、fullpage 翻屏、pinned 视屏、时间线横滑全部工作(含 `.reveal` 滚动动画)。
3. 以"编辑"角色打开任意页面:结构不可增删/移动,文字图片可改;尝试删除被锁区块被拒绝。
4. 新闻:各类别发文 → 归档 Tab 过滤 + 分页 + 首页卡片自动更新。
5. 联系表单:样式按 §10 桥接规则还原静态视觉;测试环境将 CF7 邮件设为 dummy(便携 PHP 无邮件服务),验收标准为**提交成功态/校验态正确展示**,不要求真实发信。
6. 导航高亮、Customizer 各字段生效。
7. `php -l` 全过、输出转义审查、控制台无报错、本地字体正常加载。
8. CF7 缺失时联系页显示引导提示而非报错。
## 13. 设计审查修正记录(三轮)
| # | 级别 | 问题 | 修正 |
|---|---|---|---|
| 1 | 漏洞 | `templateLock` 锁不到顶层区块 | 全部区块实例级 `lock:{move,remove}` |
| 2 | 漏洞 | News 页面与 CPT 归档 `/news/` URL 冲突 | 不建 News 页面 |
| 3 | 漏洞 | 按 slug 条件加载资产脆弱 | 改 `has_block()` |
| 4 | 漏洞 | 页面级 CSS 依赖 body class,编辑器不生效 | page-shell 输出等价 class |
| 5 | 漏洞 | 首页 hero 与 page-content 的 DOM 层级套不进单容器 | 两个顶层锁死块;hero(home) 内嵌 stats 槽位 |
| 6 | 缺口 | Mega Menu News 卡片无特色图/摘要 | 占位图+菜单描述兜底 |
| 7 | 缺口 | 菜单高亮 `.active` vs `.current-menu-item` | nav_menu_css_class 过滤器 |
| 8 | 缺口 | wp_nav_menu 输出不了 mega 结构 | wp_get_nav_menu_items 自定义渲染 |
| 9 | 缺口 | 新闻 Tab 分页保参易错 | 改用分类归档地址,原生分页 |
| 10 | 缺口 | seed 无重跑出口 | 主题设置页按钮 |
| 11 | 缺口 | News 卡用 query_var 方案繁琐 | 改原生归档 URL |
| 12 | 矛盾 | 验收清单需实机 vs 本机无 PHP | 便携 PHP + SQLite 一次性测试站 |
| 13 | 漏洞 | 页面基底 CSS 挂在 `body.is-*`(如 body.is-bp 浅色主题),page-shell 的 main class 覆盖不到 body | `body_class` 过滤器按 page-shell 变体注入前端 body class(spec 审查发现) |
| 14 | 漏洞 | 4 个业务页 JS(data-count 计数/reveal)未纳入资产映射;`[data-reveal]` 默认 opacity:0,JS 缺失内容不可见 | has_block 命中业务区块即加载 4 个业务 JS;main.js 扩展承接 news reveal(spec 审查发现) |
| 15 | 错误 | 汽车出口/售后改装两页静态站没有 stats,编排误写 business-intro(+stats) | 改为无 stats(spec 审查发现) |
| 16 | 错误 | 新闻列表实为左文右图行、每页 5 条、news.js 内置 15 篇,spec 误写 3 列卡片/9 条/4 篇 | 按静态站修正;Tab 有意保留 4 词(spec 审查发现) |
| 17 | 缺口 | CF7 DOM 与静态表单差异未定义、CF7 晚激活无法补建表单、seed 未设页面特色图、锚点 id 保留未覆盖、测试环境无法真实发信 | §10 桥接规则、activated_plugin 补建、seed 设特色图+ph-* 占位、区块 id 可配置、验收措辞调整(spec 审查发现) |
| 18 | 错误 | body 变体名臆造:静态 CSS 只有 is-bp/is-news/is-contact 三种钩子;发展历程页实为 is-bp+main.bp,联系页为 is-contact+main.ct,不存在 is-dh/is-ct | §3/§7 按静态站事实改注 is-bp / is-contact(二审发现) |
| 19 | 错误 | gp"圆点导航由 JS 从 data-nav-title 生成"系错误假设:gp-nav-list 实为概览屏内部链接列表(屏内容),js 仅做 active 高亮,无需任何适配;导航文案与屏标题在静态站本就不一致,不应自动生成 | §4 改为概览屏锁定子区块,global-presence.js 零适配(四轮源码核查发现) |
| 20 | 不足 | au-gps 实为 4 层结构(head/4 图行/宽图/数据轮播+图文卡分栏),spec 仅一句带过 | §4 细化内部结构(四轮源码核查发现) |
| 21 | 缺口 | 动态区块 RichText 用 source:html 会丢内容;stat-num 的 firstChild 文本节点微结构未约定;编辑器 CSS 加载范围未明确;新闻 Hero 图来源未定义;contact-map 实为 OSM iframe | 编辑器约定补两条关键约定、§10 明确全量页面 CSS、§8 Customizer 新闻 Hero 图、contact-map 改 iframe(四轮源码核查发现) |
**内容备注(非缺陷)**:静态站 gp-3(Africa)屏的 lead 文案讲的是 Minsk/Belarus(静态站自身的复制粘贴错误)。迁移按原文保留,seed 后可在后台修正。
## 14. 范围外(明确不做)
- 多语言(结构不阻碍后续接多语言插件,内容在 post_content 中天然可翻译)。
- Classic Editor 插件兼容(文档注明必须使用区块编辑器)。
- 性能优化超出 §10 所列(CDN、缓存策略交由宿主环境)。
## 15. v2 同步记录(2026-08-17)
静态站改版 v2(commit a68ff43)后的主题同步:mega 精简(Business 只留 title/About 空 left 2 卡)、footer 社交 img 化(LinkedIn→Instagram)、hero scroll 全删、bp-stats→bp-caps(含物流双 label)、SVG 图标全面 img 化、as-loc 简化、ae-models 去 tags、ae-map 去 markers、au-gps 重构(img 化+4 数据卡+feature-copy)、au-zoom-mask 新增、ct-map 三层结构、新闻系统重做(4 篇/nd-* 详情页/nw-empty 空态)、news-banner 新图。详见 `plans/2026-08-17-static-v2-sync-report.md` 与验收日志。已接受偏差:footer 按正确闭合(不复刻旧页嵌套错误);"Four Core Businessesk"与"99% Awards Winner"原样复刻。