wake-up-neo.com

Artikel entfernen mit $ product_id - Woocommerce

Eine Funktion, bei der der Kunde ein Produkt in den Warenkorb legt, wenn er eine bestimmte Menge erreicht. 

Beispiel, wenn der Kunde Level 3 erreicht und das Produkt hinzugefügt wird.

// 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);

Wenn der Kunde beschließt, Artikel zu entfernen, so dass diese Aussage wahr ist, möchte ich ihn wieder entfernen können.

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);
        }
    }
}

Mir ist es nicht gelungen, das Produkt aus dem Warenkorb zu entfernen. Irgendwelche Ideen, was macht hier falsch? Ich habe herumgesucht, ohne eine Lösung zu finden, die für mich funktioniert. 

Lösung

Mit der Hilfe von @Rohil_PHPBeginner & @WisdmLabs kam ich zu dieser Lösung, die die Aufgabe für mich erledigte. 

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);
        }
    }
}
15
Mathias Asberg

Ich denke, Sie verwenden remove_cart_item falsch. Wenn Sie die documentation durchgehen, werden Sie feststellen, dass cart_item_key als Parameter akzeptiert wird (als in Kommentar erwähnte wisdmLabs).

Sie verwenden es wie folgt: 

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

Versuchen Sie es stattdessen: 

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

Nach der Aktualisierung dieser Zeile denke ich, dass Sie das Produkt entfernen können.

17

sie können dies verwenden:

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

ersetzen Sie PRODUCT ID durch Ihre.

0
Mehdico