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