WooCommerce按分类设置多商品合并最低购买量的技术求助
WooCommerce 按分类独立设置最低购买量限制
以下是优化后的代码,能实现每个分类独立统计购买总量并验证最低购买量的需求:
add_action('woocommerce_check_cart_items', 'custom_category_min_quantity_check'); function custom_category_min_quantity_check() { // 仅在购物车或结账页面执行检查 if (!is_cart() && !is_checkout()) return; // 定义需要限制的分类slug和对应最低购买量,可根据需求修改 $category_minimums = array( 'shoes' => 10, // 鞋子分类,最低10件 'pants' => 10, // 裤子分类,最低10件 'shirts' => 10 // 衬衫分类,最低10件 ); // 初始化分类数量统计数组 $category_quantities = array_fill_keys(array_keys($category_minimums), 0); // 遍历购物车商品,按分类累加数量 foreach (WC()->cart->get_cart() as $cart_item) { $product_id = $cart_item['product_id']; $quantity = $cart_item['quantity']; // 获取商品所属的目标分类 foreach (array_keys($category_minimums) as $category_slug) { if (has_term($category_slug, 'product_cat', $product_id)) { $category_quantities[$category_slug] += $quantity; // 商品可能属于多个分类,这里只统计第一个匹配的(根据需求调整) break; } } } // 检查每个分类的购买量是否达标 foreach ($category_minimums as $category_slug => $min_quantity) { // 只有当该分类有商品在购物车时才检查 if ($category_quantities[$category_slug] > 0 && $category_quantities[$category_slug] < $min_quantity) { // 获取分类名称用于提示信息 $category = get_term_by('slug', $category_slug, 'product_cat'); $category_name = $category ? $category->name : ucfirst($category_slug); wc_add_notice( sprintf( '%s分类的商品需至少购买%d件,当前已购%d件,请补充后再提交订单。', $category_name, $min_quantity, $category_quantities[$category_slug] ), 'error' ); } } }
代码说明:
- 可配置的限制规则:通过
$category_minimums数组可以轻松添加或修改分类的最低购买量,只需填写分类slug和对应数量即可。 - 独立统计分类数量:遍历购物车时,会将每个商品的数量累加到所属分类的统计项中,确保每个分类的数量单独计算。
- 精准的错误提示:针对未达标的分类,会显示分类名称、最低要求和当前购买量,用户能清晰知道需要补充哪些商品。
- 性能优化:仅在购物车和结账页面执行检查,避免不必要的资源消耗。
使用注意:
- 请将
$category_minimums数组中的分类slug替换为你实际使用的分类别名(在WooCommerce分类编辑页面可以查看)。 - 如果商品可能属于多个需要限制的分类,可根据需求调整代码中
break的位置,决定是否重复统计数量。
内容的提问来源于stack exchange,提问作者Raymond Cullen
相关产品推荐
相关产品推荐

