新增产品捆绑折扣功能,支持百分比和固定金额折扣 添加购物车中编辑捆绑产品子项的功能 优化前端价格显示和购物车样式 集成 WooCommerce All Products for Subscriptions 插件 重构后台管理界面,增加折扣和编辑选项 |
||
|---|---|---|
| assets | ||
| docs | ||
| includes | ||
| templates/global | ||
| .gitignore | ||
| README.md | ||
| yoone-product-bundles.php | ||
README.md
Yoone Product Bundles (混装产品)
为 WooCommerce 提供一个基础的“混装产品(Bundle)”类型:
- 后台为某个产品配置:可混装的简单商品列表、最小混装数量、展示用的分类分组;
- 前端在该混装产品的产品页显示一个表单,按分类分组列出可混装商品,用户为每个商品填写数量;
- 当总数量达到或者超过“最小混装数量”时,允许加入购物车;
- 购物车中该混装产品的行项目价格 = 所选简单商品单价 × 数量 的总和;
- 购物车与订单行项目显示所选组件的摘要;
本插件是一个可运行的 MVP,结构清晰、注释完整,方便后续扩展(动态价格、库存校验、分组规则、变体商品支持、打包折扣等)。
安装与启用
- 将插件目录
yoone-product-bundles放置到站点的wp-content/plugins/下。 - 在 WordPress 后台 -> 插件 中启用 “Yoone Product Bundles (混装产品)”。
- 确保 WooCommerce 已安装并启用。
使用步骤(后台)
- 新建或编辑一个产品,在“产品类型”下拉中选择 “混装产品 (Yoone Bundle)”。
- 在出现的 “混装产品” 标签页中配置:
- 可混装商品:搜索并选择多个 simple product;
- 最小混装数量:顾客选择的总数需不小于此值;
- 展示分类:用于在前端按分类分组显示可混装商品(仅显示属于所选分类的商品)。
- 发布或更新该产品。
前端体验
访问该混装产品的产品页:
- 页面按分类分组列出可混装商品,并显示每个商品的价格;
- 用户为每个商品填写数量,页面实时展示“当前选择数量”;
- 当选择总数达到最小混装数量后,“加入购物车”按钮自动可用;
- 加入购物车后,购物车中该混装产品的价格为所选商品价格总和,并显示所选内容的摘要;
技术实现概览
- 产品类型注册:
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 价(当前实现为一个行项目合计价格)。
常见问题
- 为什么“加入购物车”不可用?
- 需要先达到“最小混装数量”;
- 或者后台未配置可混装商品。
- 价格是否含税?
- 当前以
get_price()基础价计算总价,不含税;实际显示与结算是否含税取决于 WooCommerce 税设置。可在价格调整钩子中自定义。
- 当前以
- 是否支持变体商品?
- MVP 仅支持 simple product;后续可扩展到变体商品与多层组合。
参考实现
可参考以下现有插件:
woocommerce-product-bundles_v8.5.2wpc-composite-products-premium_v7.6.2woocommerce-composite-products_v11.0.1woo-product-bundle-premium_v8.3.5
这些插件实现更复杂的组合逻辑与定价;本插件以轻量的方式提供一个可扩展的基础框架。