# B2B Trade B2B Trade 是一个面向汽车贴膜门店的 WordPress 经典主题。主题提供服务项目、施工案例、门店介绍、常见问题和联系方式;联系页只展示电话、邮箱、WhatsApp、营业时间与地图导航,不包含提交表单、邮件发送处理器或 SMTP 依赖。 ## 运行要求 - WordPress 6.8 或更高版本 - PHP 8.1 或更高版本 - 当前发布版:2.1.0 - 已针对 WordPress 7.0 系列配置回归环境 前端依赖仅包含主题内置的 Bootstrap 5.3.8 CSS 和 bundle JS。字体使用操作系统字体栈,不会向字体、脚本或样式 CDN 发起请求。 ## 页面与内容结构 首页固定显示 5 个板块: 1. 首屏定位与双按钮 2. 四项信任指标 3. 服务项目(最多 6 项) 4. 案例作品(最多 6 项) 5. 联系门店行动区 关于页承载门店介绍、信任指标、环境图片、外部视频链接和服务文档。FAQ 页复用 8 项手风琴内容;联系页按配置展示门店信息和地图卡片。 主题注册: - `service` 服务项目文章类型,归档路径 `/services/` - `case` 案例文章类型,归档路径 `/cases/` - `case_type` 案例分类法 - `fragrance-capability` 图片尺寸(760 × 720,硬裁切) 服务图片的显示优先级为: 1. WordPress 特色图片 2. 旧站点的 `_service_image` URL 3. 主题内置的中性 SVG 占位图 列表和首页使用 `fragrance-capability`,详情页使用 `large`。 ## 首次激活 激活主题后会运行版本化且可重试的初始化: - 创建 7 个默认服务,并使用 `_fragrance_seed_key` 防止重复; - 创建或复用 `home`、`about`、`faq`、`contact` 页面; - 为约定页面补齐模板,但不修改已有正文; - 不会自动发布或恢复用户已有的草稿、私密页或回收站页面; - 将已发布的 `home` 设置为静态首页; - 仅在数据库写入全部成功后推进 `fragrance_trade_schema_version`。 重复激活和重复执行初始化不会增加服务或页面数量。失败信息和未发布页面状态会在后台显示管理员通知。 未分配主导航时,主题输出:首页、服务项目、案例作品、关于门店、常见问题、联系我们。已分配菜单但少于两个菜单项时,后台同样会提醒。 ## 外观配置 “外观 → 自定义 → 门店首页”包含 6 个配置板块: - 首屏定位 - 信任栏 - 门店环境与参观 - 文档支持 - 常见问题 - 联系方式与社交链接 视频链接不会嵌入页面或打开弹窗;配置后会在新标签页直接打开,并带有 `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` 为准。 - 旧的联系页 URL 即使带有额外查询参数也能打开,但主题不再生成、读取、显示或传递服务名称。 ## 许可证 主题按 GNU GPL v2 或更高版本发布。Bootstrap 5.3.8 的 MIT 许可证副本位于 `assets/vendor/bootstrap/LICENSE`。