我有两个分组产品 A
和 B
:
1)产品A
2)产品B
不同之处在于订阅Alfa。
问题
我想要那个" Alpha"只在购物车中出现一次(每月或每年)。
当前状态
如果用户添加到购物车" A" (它每月有一个alpha月度+平台)。然后,如果它改变主意并点击" B",系统将告诉他平台不能再次添加,但每年添加alpha - 这意味着alpha在购物车中两次,不行。
还有一个X产品 - 单独的" x订阅",可以订购(不是集团产品)。
我看到的一个解决方案是,在添加到篮子之前,系统应首先清空篮子。
一个可能的解决方案还是检查特定产品是否已经在购物车中(例如alpha - 每月)并将其删除并添加一个新产品(当用户点击添加到购物车时传递的产品)。 / p>
我在网上找到了一个代码(进入functions.php)。功能会清空购物车,但会为每个添加的产品清空它。所以,在购物车中,只有"平台"留下(因为系统可能会清空购物车,添加alpha,然后再次清空购物车,然后添加平台)。
以下是代码:
add_filter( 'woocommerce_add_cart_item_data', 'wdm_empty_cart', 10, 3);
function wdm_empty_cart( $cart_item_data, $product_id, $variation_id )
{
global $woocommerce;
$woocommerce->cart->empty_cart();
// Do nothing with the data and return
return $cart_item_data;
}
如何只允许2个特定产品中的一个放入购物车?
答案 0 :(得分:0)
以下代码基于您的2个“Alpha”订阅产品ID。如果两个产品都在购物车中,它将删除添加到购物车的第一个产品。您必须在此功能中设置两个产品ID:
add_action('woocommerce_before_calculate_totals', 'checking_and_removing_cart_items', 20, 1 );
function checking_and_removing_cart_items( $cart ){
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
// HERE below define your "Alpha" products
$alpha_monthly_id = 37;
$alpha_yearly_id = 53;
$found_monthly = $found_yearly = false;
$keys = array();
// Checking cart items
foreach( $cart->get_cart() as $key => $cart_item ) {
if( $cart_item['product_id'] == $alpha_monthly_id ){
$found_monthly = true;
$keys[] = $key;
} elseif( $cart_item['product_id'] == $alpha_yearly_id ){
$found_yearly = true;
$keys[] = $key;
}
}
// If both product found, we remove the first one
if( $found_monthly && $found_yearly ){
$cart->remove_cart_item($keys[0]);
// (optional) Remove notices before they get displayed
if( ! is_checkout() )
wc_clear_notices();
}
}
代码进入活动子主题(或活动主题)的function.php文件。
经过测试和工作