使用$ product_id删除项目 - Woocommerce

时间:2022-10-25 10:05:55

Made a function where the customer get a product added to the cart when they reach a specific amount.

制作一项功能,让客户在达到特定金额时将产品添加到购物车中。

Example of when customer reaches level 3 and get the product added.

客户达到3级并添加产品的示例。

// Bonus products
$product_1 = '4751'; 
$product_2 = '4752'; 
$product_3 = '4753'; 

// Get cart value in a clean format
$cart_total = WC()->cart->get_cart_subtotal();
$cart_total = html_entity_decode($cart_total, ENT_QUOTES, 'UTF-8');
$cart_total_format = strip_tags($cart_total);
$cart_value = preg_filter("/[^0-9]/", "", $cart_total_format);
$sum_raw = $cart_value;

// Set the sum level 
$level3 = '1500';

// Check sum and apply product
if ($sum_raw >= $level3) {

// Cycle through each product in the cart and check for match
$found = 'false';
foreach (WC()->cart->cart_contents as $item) {
    global $product;
    $product_id = $item['variation_id'];

    if ($product_id == $product_3) {
        $found = 'true';
    }
}

// If product found we do nothing 
if ($found == 'true') {}
// else we will add it
else {
    //We add the product
    WC()->cart->add_to_cart($product_3);

If customer decides to remove item's so this statement is true i want to be able to remove it again.

如果客户决定删除项目,那么此声明为真,我希望能够再次删除它。

if ($sum_raw < $level3) {

    // Trying to remove item
    foreach ($woocommerce->cart->get_cart() as $cart_item_key => $cart_item) {
        if ($cart_item['variation_id'] == $product_3) {

            //remove single product
            WC()->cart->remove_cart_item($product_3);
        }
    }
}

Am do not manage to remove the product from cart. Any ideas what am doing wrong here? Have been searching around without finding any solution that works for me.

我无法从购物车中删除产品。任何想法在这里做错了什么?一直在寻找,但没有找到任何适合我的解决方案。

Solution

With help from @Rohil_PHPBeginner & @WisdmLabs I came to this solution that did the job for me.

在@Rohil_PHPBeginner和@WisdmLabs的帮助下,我找到了这个为我完成工作的解决方案。

global $woocommerce;
// Check if sum
if ($sum_raw < $level3) {
    foreach ($woocommerce->cart->get_cart() as $cart_item_key => $cart_item) {

        if ($cart_item['variation_id'] == $product_3) {
            //remove single product
            $woocommerce->cart->remove_cart_item($cart_item_key);
        }
    }
}

2 个解决方案

#1


15  

I think you're using remove_cart_item incorrectly. If you go through the documentation, you will find that it accepts cart_item_key as parameter (as wisdmLabs mentioned in comment).

我认为你错误地使用了remove_cart_item。如果您浏览文档,您会发现它接受cart_item_key作为参数(如注释中提到的wisdmLabs)。

You are using it like so:

你这样使用它:

WC()->cart->remove_cart_item($product_3);

Try this instead:

试试这个:

WC()->cart->remove_cart_item($cart_item_key);

After updating that line, I think you will able to remove product.

更新该行后,我认为您将能够删除该产品。

#2


0  

you can use this :

你可以用这个:

$cartId = WC()->cart->generate_cart_id( 'PRODUCT ID' );
$cartItemKey = WC()->cart->find_product_in_cart( $cartId );
WC()->cart->remove_cart_item( $cartItemKey );

replace PRODUCT ID with yours.

用您的产品替换PRODUCT ID。

#1


15  

I think you're using remove_cart_item incorrectly. If you go through the documentation, you will find that it accepts cart_item_key as parameter (as wisdmLabs mentioned in comment).

我认为你错误地使用了remove_cart_item。如果您浏览文档,您会发现它接受cart_item_key作为参数(如注释中提到的wisdmLabs)。

You are using it like so:

你这样使用它:

WC()->cart->remove_cart_item($product_3);

Try this instead:

试试这个:

WC()->cart->remove_cart_item($cart_item_key);

After updating that line, I think you will able to remove product.

更新该行后,我认为您将能够删除该产品。

#2


0  

you can use this :

你可以用这个:

$cartId = WC()->cart->generate_cart_id( 'PRODUCT ID' );
$cartItemKey = WC()->cart->find_product_in_cart( $cartId );
WC()->cart->remove_cart_item( $cartItemKey );

replace PRODUCT ID with yours.

用您的产品替换PRODUCT ID。