某些产品何时具有标签价值" buynow"或者按品种产品添加到购物车中的类别我想删除购物车中的所有其他产品,不允许在购物车中添加更多产品。当一个用户添加了这种类型的产品并尝试在购物车中添加其他产品时,它将显示错误通知。
我已尝试使用此产品ID 1024
的代码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;
if($product_id == '1024'){
$woocommerce->cart->empty_cart();
wc_add_notice( 'Error!', 'error' );
}
elseif ( WC()->cart->get_cart_contents_count() >=1 ){
$items = $woocommerce->cart->get_cart();
foreach($items as $item => $values) {
$_product = $values['data']->post;
$cartproductid[] = $_product->ID;
}
foreach($cartproductid as $id){
if($id == 1024){
wc_add_notice( 'Error!', 'error' );
$woocommerce->cart->empty_cart();
$woocommerce->cart->add_to_cart('1024');
}
}
}
return $cart_item_data;
}
我的代码如下:
当用户将1024个产品ID添加到购物车时,它会清空购物车并仅添加1024个产品。当用户在添加1024不是同一产品后添加产品时,它会向购物车添加一个产品,停止添加更多产品。
我的要求是当1024产品添加到购物车时没有其他产品无法添加到购物车。当用户尝试添加时,会显示通知"错误!"
任何解决方案都表示赞赏。提前致谢。 任何人的帮助表示赞赏。
答案 0 :(得分:3)
您可以使用woocommerce_add_cart_item_data
代替woocommerce_add_to_cart_validation
。这很有效。
add_filter( 'woocommerce_add_to_cart_validation', 'woocommerce_add_to_cart_validation_CB', 30, 3);
function woocommerce_add_to_cart_validation_CB( $bool, $product_id, $quantity )
{
global $woocommerce;
if($product_id == '1024'){
$woocommerce->cart->empty_cart();
}
elseif ( WC()->cart->get_cart_contents_count() >= 1 ){
$items = $woocommerce->cart->get_cart();
foreach($items as $item => $values) {
if( '1024' == $values['product_id'] ){
wc_add_notice( 'Error!', 'error' );
return false;
}
}
}
return $bool;
}
如果您想为featured
产品执行此操作,请使用以下代码。
add_filter( 'woocommerce_add_to_cart_validation', 'woocommerce_add_to_cart_validation_CB', 30, 3);
function woocommerce_add_to_cart_validation_CB( $bool, $product_id, $quantity )
{
global $woocommerce;
if( isFeaturedProduct($product_id)){
$woocommerce->cart->empty_cart();
}
elseif ( WC()->cart->get_cart_contents_count() >= 1 ){
$items = $woocommerce->cart->get_cart();
foreach($items as $item => $values) {
if(isFeaturedProduct($values['product_id']) ){
wc_add_notice( 'Error!', 'error' );
return false;
}
}
}
return $bool;
}
function isFeaturedProduct( $product_id ){
$wc_product_obj = new WC_Product($product_id);
return $wc_product_obj->is_featured();
}