Go to file
tikkhun a1c47d3a57 feat: 实现混装产品插件基础框架和核心功能
添加 WooCommerce 混装产品插件的基础框架,包括:
- 主插件文件和产品类型注册
- 后台配置界面和前端展示模板
- 购物车逻辑和价格计算
- 文档和资源文件

插件允许创建混装产品类型,配置可混装的简单商品和最小数量,并在前端按分类展示选择表单。加入购物车时自动计算所选商品总价并显示组件摘要。
2025-11-06 11:43:54 +08:00
assets feat: 实现混装产品插件基础框架和核心功能 2025-11-06 11:43:54 +08:00
docs feat: 实现混装产品插件基础框架和核心功能 2025-11-06 11:43:54 +08:00
includes feat: 实现混装产品插件基础框架和核心功能 2025-11-06 11:43:54 +08:00
templates/single-product/add-to-cart feat: 实现混装产品插件基础框架和核心功能 2025-11-06 11:43:54 +08:00
README.md feat: 实现混装产品插件基础框架和核心功能 2025-11-06 11:43:54 +08:00
yoone-product-bundles.php feat: 实现混装产品插件基础框架和核心功能 2025-11-06 11:43:54 +08:00

README.md

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_Bundlesproduct_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

这些插件实现更复杂的组合逻辑与定价;本插件以轻量的方式提供一个可扩展的基础框架。