# B2B Trade 发布审查标准

适用范围：B2B Trade 2.1.x，WordPress 6.8+，PHP 8.1+。

## 1. 自动检查

每次发布必须满足：

- `git diff --check` 无输出；
- 所有 PHP 文件在 PHP 8.1 CLI 下通过 `php -l`；
- PHPCS 通过 WordPress Coding Standards 与 PHPCompatibilityWP；
- `node --check assets/js/theme.js` 通过；
- CSS 花括号配对，所有 `url(...)` 本地资源存在；
- PHP、CSS 和 JS 不包含脚本、样式或字体 CDN 请求；
- 主题引用的本地静态资源全部存在；
- 仓库不包含已清退的旧业务词、旧视频弹窗库或旧产品位图。

## 2. 初始化与数据安全

在空数据库中：

1. 安装 WordPress 并激活主题；
2. 确认创建 7 个带种子标识的服务；
3. 确认创建 `home`、`about`、`faq`、`contact`；
4. 再运行两次初始化；
5. 确认服务数和页面数不增加；
6. 确认 `fragrance_trade_schema_version` 仅在无错误时推进。

在已有数据库中：

- 已有页面正文、标题和状态不被覆盖；
- 草稿、私密或回收站页面不被自动发布；
- 对应页面模板被补齐；
- 后台显示非发布状态提醒；
- 已有 `_service_image` 和 `store_map_url` 保持有效。

需要注入一次 `wp_insert_post()` 错误，确认错误被记录、管理员可见且迁移版本不推进。

## 3. 页面冒烟

以下页面必须返回预期状态，并且 PHP 日志无 Warning、Deprecated、Parse 或 Fatal：

| 页面 | 预期 |
| --- | --- |
| 首页 | 200 |
| 服务列表 | 200 |
| 服务详情 | 200 |
| 案例列表 | 200 |
| 案例详情 | 200 |
| 关于门店 | 200 |
| 常见问题 | 200 |
| 联系我们 | 200 |
| 普通文章 | 200 |
| 搜索结果 | 200 |
| 不存在路径 | 404 |

浏览器控制台不得出现 JavaScript 错误，Network 面板不得出现主题资源 404。

## 4. 业务分支

### 服务图片

分别构造并确认：

1. 有特色图片时优先显示特色图片；
2. 无特色图片、有 `_service_image` 时显示旧 URL；
3. 两者都没有时显示对应 SVG 占位图；
4. 首页和列表输出 `fragrance-capability`；
5. 详情输出 `large`。

### 地图

分别确认：

1. 显式地图 URL 优先于地址；
2. 只有地址时生成百度地图导航；
3. 地址和 URL 都为空时不渲染地图卡片；
4. 页面不出现任何硬编码门店地址。

### 导航

- 未分配菜单时输出 6 项默认导航；
- 少于两个菜单项时后台显示提醒；
- 桌面导航与移动 Offcanvas 均可键盘操作；
- 当前菜单不会造成横向滚动。

### 视频与 FAQ

- 有视频 URL 时只产生普通新窗口链接；
- 链接包含 `target="_blank"` 与 `rel="noopener noreferrer"`；
- 无视频 URL 时显示联系门店入口；
- FAQ 手风琴可点击和键盘操作，ARIA 状态随展开更新。

### 联系

- 联系页不存在提交表单；
- 服务入口不生成服务查询参数；
- 电话、邮箱与 WhatsApp 链接按配置显示；
- 主题不注册前端提交或邮件发送 Hook。

## 5. 兼容矩阵

至少完成：

| 环境 | 用途 |
| --- | --- |
| WordPress 7.0 系列 + PHP 8.3 | 当前版本主回归 |
| WordPress 6.8 系列 + PHP 8.2 | 最低 WordPress 分支 |
| PHP 8.1 CLI | 最低 PHP 语法检查 |

兼容环境可由维护者现有的 WordPress 测试站点提供，不要求主题仓库附带容器配置。

## 6. 视觉与无障碍

桌面至少检查 1440 × 1000，移动至少检查 390 × 844：

- 首页、服务列表、服务详情、案例列表、关于、FAQ、联系；
- 无水平滚动、布局跳动、遮挡或断裂；
- 图片具有明确尺寸与替代文本；
- 可交互元素有可见焦点；
- 文本与背景保持可读对比度；
- Offcanvas 打开后焦点可进入，关闭后可返回触发按钮；
- 新窗口链接的可访问名称能表达用途。

主题预览图必须来自通过桌面验收的中性演示首页，不得包含过时业务内容、品牌承诺或虚构真实门店照片。

## 7. 发布元数据

发布前确认 `style.css`：

- `Version: 2.1.0`
- `Requires at least: 6.8`
- `Tested up to: 7.0`
- `Requires PHP: 8.1`
- Theme URI 指向实际仓库
- 文本域为 `fragrance-trade`

同时确认 `languages/fragrance-trade.pot` 已按当前源码重新生成，本地 Bootstrap 许可证随主题包发布。
