某些产品是购物车 woocommerce 中的单品
certain product are single product in cart woocommerce
某些产品具有标签值 "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个产品加入购物车时没有其他产品不能加入购物车。当用户尝试添加时显示通知 "Error!"
感谢任何解决方案。提前致谢。
感谢任何人的帮助。
您可以使用 woocommerce_add_to_cart_validation
而不是 woocommerce_add_cart_item_data
。这有效。
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();
}
某些产品具有标签值 "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个产品加入购物车时没有其他产品不能加入购物车。当用户尝试添加时显示通知 "Error!"
感谢任何解决方案。提前致谢。 感谢任何人的帮助。
您可以使用 woocommerce_add_to_cart_validation
而不是 woocommerce_add_cart_item_data
。这有效。
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();
}