yoone-wc-product-bundles/README.md

96 lines
5.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Yoone Product Bundles (混装产品)
为 WooCommerce 提供一个基础的“混装产品Bundle”类型
- 后台为某个产品配置:可混装的简单商品列表、最小混装数量、展示用的分类分组;
- 前端在该混装产品的产品页显示一个表单,按分类分组列出可混装商品,用户为每个商品填写数量;
- 当总数量达到或者超过“最小混装数量”时,允许加入购物车;
- 购物车中该混装产品的行项目价格 = 所选简单商品单价 × 数量 的总和;
- 购物车与订单行项目显示所选组件的摘要;
本插件是一个可运行的 MVP结构清晰、注释完整方便后续扩展动态价格、库存校验、分组规则、变体商品支持、打包折扣等
## 安装与启用
1. 将插件目录 `yoone-product-bundles` 放置到站点的 `wp-content/plugins/` 下。
2. 在 WordPress 后台 -> 插件 中启用 “Yoone Product Bundles (混装产品)”。
3. 确保 WooCommerce 已安装并启用。
## 使用步骤(后台)
1. 新建或编辑一个产品,在“产品类型”下拉中选择 “混装产品 (Yoone Bundle)”。
2. 在出现的 “混装产品” 标签页中配置:
- 可混装商品:搜索并选择多个 simple product
- 最小混装数量:顾客选择的总数需不小于此值;
- 展示分类:用于在前端按分类分组显示可混装商品(仅显示属于所选分类的商品)。
3. 发布或更新该产品。
## 前端体验
访问该混装产品的产品页:
- 页面按分类分组列出可混装商品,并显示每个商品的价格;
- 用户为每个商品填写数量,页面实时展示“当前选择数量”;
- 当选择总数达到最小混装数量后,“加入购物车”按钮自动可用;
- 加入购物车后,购物车中该混装产品的价格为所选商品价格总和,并显示所选内容的摘要;
## 技术实现概览
- 产品类型注册:`Yoone_Product_Bundles` 在 `product_type_selector` 中注册类型标识 `yoone_bundle`,并通过 `woocommerce_product_class` 映射到 `WC_Product_Yoone_Bundle`
- 后台配置面板:`Yoone_Product_Bundles_Admin` 在产品编辑页添加一个标签页与面板,使用 WooCommerce 原生的 `wc-product-search` 组件搜索选择产品;数据保存在以下 postmeta
- `_yoone_bundle_allowed_products` (int[]) 可混装的产品ID列表
- `_yoone_bundle_min_quantity` (int) 最小混装数量;
- `_yoone_bundle_categories` (int[]) 用于分组显示的 product_cat 分类ID列表
- 前端表单与购物车:`Yoone_Product_Bundles_Frontend`
- 通过 `woocommerce_yoone_bundle_add_to_cart` 钩子渲染模板 `templates/single-product/add-to-cart/yoone-bundle.php`
-`woocommerce_add_to_cart_validation` 中校验总数量是否达到最小值;
-`woocommerce_add_cart_item_data` 中把所选组件pid=>qty存入购物车项
-`woocommerce_get_item_data` 中展示购物车行项目的组件摘要;
-`woocommerce_before_calculate_totals` 中根据组件动态设置该行项目价格(基础价,不含税),确保结算金额正确;
## 目录结构
```
yoone-product-bundles/
├── yoone-product-bundles.php // 插件入口
├── includes/
│ ├── class-yoone-product-bundles.php // 核心:类型注册、读取配置
│ ├── class-yoone-product-type-bundle.php // 产品类型对象 WC_Product_Yoone_Bundle
│ ├── admin/
│ │ └── class-yoone-product-bundles-admin.php
│ └── frontend/
│ └── class-yoone-product-bundles-frontend.php
├── templates/
│ └── single-product/add-to-cart/yoone-bundle.php // 前端表单模板
└── assets/
├── css/{admin.css, frontend.css}
└── js/{admin.js, frontend.js}
```
## 钩子与扩展点
- 读取配置:`Yoone_Product_Bundles::get_bundle_config($product)`,返回 `allowed_products/min_qty/categories`
- 可在 `Yoone_Product_Bundles_Frontend::adjust_bundle_price()` 中替换价格计算逻辑,例如引入折扣、不同计价规则;
- 可添加库存校验:在 `validate_add_to_cart()` 中检验每个组件的可售数量;
- 可将组件拆分为独立行项目:在 `add_to_cart` 阶段为每个组件添加到购物车,并将 bundle 项设为 0 价(当前实现为一个行项目合计价格)。
## 常见问题
1. 为什么“加入购物车”不可用?
- 需要先达到“最小混装数量”;
- 或者后台未配置可混装商品。
2. 价格是否含税?
- 当前以 `get_price()` 基础价计算总价,不含税;实际显示与结算是否含税取决于 WooCommerce 税设置。可在价格调整钩子中自定义。
3. 是否支持变体商品?
- MVP 仅支持 simple product后续可扩展到变体商品与多层组合。
## 参考实现
可参考以下现有插件:
- `woocommerce-product-bundles_v8.5.2`
- `wpc-composite-products-premium_v7.6.2`
- `woocommerce-composite-products_v11.0.1`
- `woo-product-bundle-premium_v8.3.5`
这些插件实现更复杂的组合逻辑与定价;本插件以轻量的方式提供一个可扩展的基础框架。