# B2B Trade

B2B Trade 是一个面向汽车贴膜门店的 WordPress 经典主题。主题提供服务项目、施工案例、新闻资讯、门店介绍、常见问题和联系方式；联系页只展示门店对外信息、营业时间与地图导航，不包含提交表单、邮件发送处理器或 SMTP 依赖。

## 运行要求

- WordPress 6.8 或更高版本
- PHP 8.1 或更高版本
- 当前发布版：2.2.0
- 已针对 WordPress 7.0 系列配置回归环境

前端依赖仅包含主题内置的 Bootstrap 5.3.8 CSS 和 bundle JS。字体使用操作系统字体栈，不会向字体、脚本或样式 CDN 发起请求。

首页信任栏、首页咨询区、关于页资料区和联系行动区使用主题内置的汽车施工场景背景图；图片均随主题本地加载，不依赖外部图床。

## 页面与内容结构

首页固定显示 5 个板块：

1. 首屏定位与双按钮
2. 四项信任指标
3. 服务项目轮播（最多 6 项，桌面每屏 2 项）
4. 案例作品轮播（最多 6 项，桌面每屏 2 项）
5. 联系门店行动区

关于页承载门店介绍、信任指标、环境图片、外部视频链接和服务文档。FAQ 页复用 8 项手风琴内容；联系页按配置展示门店信息和地图卡片。新闻资讯使用 WordPress 原生文章和分类，列表页每页显示 9 篇，支持分类、标签、日期归档、搜索、RSS 和独立详情页。

主题注册：

- `service` 服务项目文章类型，归档路径 `/services/`
- `case` 案例文章类型，归档路径 `/cases/`
- `case_type` 案例分类法
- `fragrance-capability` 图片尺寸（760 × 720，硬裁切）

服务卡片图片的显示优先级为：

1. 自定义横版封面 `_fragrance_service_cover_id`
2. 产品初始化数据中的主题横版封面
3. WordPress 特色图片
4. 旧站点的 `_service_image` URL
5. 主题内置的中性 SVG 占位图

首页和列表优先使用 4:3 横版封面；服务详情页仍使用 `large` 尺寸的特色图片，可完整展示产品参数海报。

## 首次激活

激活主题后会运行版本化且可重试的初始化：

- 创建 7 个默认服务，并使用 `_fragrance_seed_key` 防止重复；
- 创建或复用 `home`、`about`、`faq`、`contact` 页面；
- 未配置文章页时创建或复用 `news` 页面，并将其设置为 WordPress 文章页；
- 已配置文章页时保留现有页面与 URL，不强制覆盖；
- 为约定页面补齐模板，但不修改已有正文；
- 不会自动发布或恢复用户已有的草稿、私密页或回收站页面；
- 将已发布的 `home` 设置为静态首页；
- 仅在数据库写入全部成功后推进 `fragrance_trade_schema_version`。

重复激活和重复执行初始化不会增加服务或页面数量。失败信息和未发布页面状态会在后台显示管理员通知。

未分配主导航时，主题输出：首页、服务项目、案例作品、新闻资讯、关于门店、常见问题、联系我们。已分配菜单时，主题不会自动增加新闻入口；如果菜单缺少 WordPress 文章页，后台会提示管理员手动添加。

## 新闻资讯

- 后台通过 WordPress“文章”发布新闻，不注册额外文章类型；
- 新站点的新闻列表默认位于 `/news/`，升级站点保留已有文章页地址；
- 列表卡片显示特色图片、分类、日期、标题和摘要，无图片时使用主题内置占位图；
- 分类、标签、日期和作者归档复用新闻卡片样式；
- 新闻详情包含上一篇、下一篇和联系门店行动区，不显示评论区；
- 主题不修改全站固定链接规则，也不会自动创建新闻分类或示例新闻。

## 服务与案例一键初始化

主题随包提供 5 个 KDX 隐形车衣产品服务、6 篇汽车改色案例和 62 张图片，但不会在主题激活时自动写入。管理员可进入“外观 → 初始化内容”，点击“一键初始化服务与案例”后将内容复制到当前站点的文章与媒体库。

导入器使用稳定的内容和图片标识防止重复；已有同名服务或案例会被保留且不会被覆盖。中途因写入失败留下的草稿可以再次执行导入以继续补齐，已发布内容不会重复生成。

首页的服务与案例区域使用原生响应式轮播，支持箭头、分页圆点、触摸滑动和 9 秒自动播放；鼠标悬停、键盘聚焦或触摸操作时会暂停，系统启用“减少动态效果”时自动播放关闭。

## 外观配置

“外观 → 自定义 → 门店首页”包含 6 个配置板块：

- 首屏定位
- 信任栏
- 门店环境与参观
- 文档支持
- 常见问题
- 联系方式与社交链接

主题已预置康得新合肥新创贴膜中心的对外名称、主营品牌、授权级别、所在城市、门店联系人、电话、地址与营业时间。这些信息仍可在“联系方式与社交链接”板块中逐项修改。页脚 ICP 备案号及备案查询链接也在此配置；备案号留空时前台不会显示。

视频链接不会嵌入页面或打开弹窗；配置后会在新标签页直接打开，并带有 `noopener noreferrer`。

地图与导航按以下顺序工作：

1. “地图导航链接”用于覆盖“打开地图导航”按钮的目标地址；
2. 已配置有效的百度地图经纬度时，内嵌地图固定显示该坐标，并以门店名称和详细地址作为标注内容；
3. 未配置坐标时，使用门店名称检索并将结果限制在所在城市；门店名称为空时回退使用门店地址，检索词也为空时隐藏地图卡片。

Hero 按钮的站内默认路径会通过 `home_url()` 解析，支持 WordPress 子目录安装与多站点路径。

## 安装

1. 将主题目录复制到 WordPress 的 `wp-content/themes/`。
2. 在“外观 → 主题”中激活 B2B Trade。
3. 在“外观 → 菜单”中创建并分配主导航；未分配时主题会显示默认导航。
4. 在“外观 → 自定义 → 门店首页”中核对并按需更新门店信息。
5. 在服务项目和案例后台上传实际图片与内容，并通过“文章”发布新闻资讯。

发布前应在 WordPress 6.8 或更高版本、PHP 8.1 或更高版本环境中检查首页、服务、案例、新闻列表与详情、新闻归档、关于、FAQ、联系、搜索与 404 页面，并确认桌面和移动端没有资源 404、控制台错误或横向滚动。

详细验收项见 `CODE_REVIEW_STANDARD.md`，清理范围与兼容策略见 `CODE_CLEANUP_PLAN.md`。

## 数据兼容

- 保留 `fragrance-trade` 文本域和 `fragrance_trade_*` 函数前缀。
- 保留 `store_map_url` 设置键。
- 保留 `_service_image` 只读回退，不自动改写或删除旧元数据。
- 旧的 `fragrance_trade_setup_done` 仅用于识别已有安装；新的流程以 `fragrance_trade_schema_version` 为准。
- schema 4 只在未配置有效文章页时创建 `/news/`，不会覆盖已有 `page_for_posts`。
- 旧的联系页 URL 即使带有额外查询参数也能打开，但主题不再生成、读取、显示或传递服务名称。

## 许可证

主题按 GNU GPL v2 或更高版本发布。Bootstrap 5.3.8 的 MIT 许可证副本位于 `assets/vendor/bootstrap/LICENSE`。
