WooCommerce设置:限制购物车仅可添加指定4款产品中的一款
实现WooCommerce指定产品互斥加入购物车的方案
嗨,这个需求很好解决,咱们直接用WooCommerce自带的钩子函数就能实现,不需要额外装插件,代码也不复杂。下面是具体的实现步骤和代码:
核心代码实现
你可以把这段代码添加到当前激活主题的functions.php文件底部,或者创建一个自定义插件来存放(推荐后者,避免主题更新丢失代码):
add_filter( 'woocommerce_add_to_cart_validation', 'restrict_specific_products_to_single_in_cart', 10, 3 ); function restrict_specific_products_to_single_in_cart( $passed, $product_id, $quantity ) { // 定义需要互斥的产品ID集合,就是你提到的1、2、3、4 $restricted_product_ids = array( 1, 2, 3, 4 ); // 先判断当前要添加的产品是否属于互斥列表 if ( in_array( $product_id, $restricted_product_ids ) ) { // 遍历购物车里已有的所有商品 foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) { $cart_product_id = $cart_item['product_id']; // 如果购物车里已经有互斥列表里的其他产品,就阻止添加 if ( in_array( $cart_product_id, $restricted_product_ids ) && $cart_product_id != $product_id ) { $existing_product = wc_get_product( $cart_product_id ); // 弹出错误提示,提示内容可以根据你的需求修改 wc_add_notice( sprintf( '您的购物车中已有「%s」,同一时间仅能添加这4款产品中的一款,请先移除现有产品再尝试添加。', $existing_product->get_name() ), 'error' ); $passed = false; break; } } } return $passed; }
代码逻辑说明
- 我们用
woocommerce_add_to_cart_validation这个钩子,它会在产品加入购物车前触发验证,返回true允许添加,false则阻止。 - 首先定义了互斥产品的ID数组,你可以随时修改这里的ID来调整范围。
- 只有当用户添加的是互斥列表里的产品时,才会触发检查逻辑,不会影响其他产品的正常添加。
- 如果检测到购物车里已经有互斥列表中的其他产品,就会弹出错误提示,并且阻止当前产品加入购物车。
额外提示
- 错误提示的文字可以根据你的店铺风格自定义,比如改成更口语化的表述。
- 如果担心主题更新丢失代码,建议创建一个简单的自定义插件:新建一个PHP文件,开头加上插件声明(比如
/* Plugin Name: 产品互斥购物车限制 */),然后把上面的代码放进去,上传到wp-content/plugins/目录,然后在后台启用即可。
内容的提问来源于stack exchange,提问作者Umair Shahzad
相关产品推荐
相关产品推荐

