WooCommerce:特定商品仅当购物车总额达标时才可加入购物车
嘿,这个需求完全可以通过自定义代码搞定,不用费劲找插件!我之前帮客户做过类似的“附加商品”逻辑,下面给你详细的实现步骤和代码,亲测有效~
实现核心思路
我们需要在用户尝试添加目标商品(也就是那个1美元的保险杠贴纸)到购物车时,做两个关键检查:
- 当前要添加的商品是不是我们设定的“附加商品”
- 购物车中排除这个附加商品后的总金额是否达到了25美元
如果不满足第二个条件,就阻止添加并给用户明确的提示信息。
具体代码实现
你可以把下面的代码复制到你的WordPress主题(强烈建议用子主题,避免主题更新丢失代码)的functions.php文件里,或者封装成一个简单的自定义插件:
// 定义附加商品的ID和最低购物车金额(不含附加商品) define('ATTACHMENT_PRODUCT_ID', 123); // 替换成你的保险杠贴纸商品ID define('MIN_CART_TOTAL', 25); // 最低购物车总额要求 // 拦截添加到购物车的动作,进行验证 add_filter('woocommerce_add_to_cart_validation', 'restrict_attachment_product_add_to_cart', 10, 3); function restrict_attachment_product_add_to_cart($passed, $product_id, $quantity) { // 检查当前要添加的是不是附加商品 if ($product_id == ATTACHMENT_PRODUCT_ID) { $cart_total = 0; // 遍历购物车,计算除了附加商品之外的总金额 foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) { if ($cart_item['product_id'] != ATTACHMENT_PRODUCT_ID) { $cart_total += $cart_item['line_total']; } } // 检查是否满足最低金额要求 if ($cart_total < MIN_CART_TOTAL) { $passed = false; // 设置错误提示信息 wc_add_notice( sprintf( '抱歉,只有当您的购物车中其他商品总额达到 %s 美元时,才能添加这款保险杠贴纸!', wc_price(MIN_CART_TOTAL) ), 'error' ); } } return $passed; }
代码说明
- 常量定义:开头的两个常量
ATTACHMENT_PRODUCT_ID和MIN_CART_TOTAL,你只需要把123换成你实际的保险杠贴纸商品ID,把25换成你需要的最低金额就行。 - 钩子拦截:使用
woocommerce_add_to_cart_validation这个WooCommerce核心钩子,它会在商品添加到购物车之前触发,我们可以在这里做验证并决定是否允许添加。 - 购物车总额计算:遍历购物车中的每个商品,只累加非附加商品的金额,这样就算用户已经添加过一次附加商品,也不会影响验证逻辑。
- 错误提示:如果不满足条件,就把
$passed设为false,并用wc_add_notice显示友好的错误提示,用户会在页面上看到这个提示。
注意事项
- 一定要使用子主题的
functions.php,或者自己创建一个简单的自定义插件来放这段代码,不然主题更新后代码会丢失。 - 如果你有多个这类附加商品,可以把
ATTACHMENT_PRODUCT_ID改成数组,然后用in_array()来判断当前商品是不是附加商品。 - 测试的时候记得清空购物车,或者模拟不同的购物车总额场景,确保逻辑正常。
内容的提问来源于stack exchange,提问作者Andrew Glover
相关产品推荐
相关产品推荐

