2015-06-01 16 views
12

Wykonano funkcję, w której klient otrzymuje produkt dodany do koszyka po osiągnięciu określonej kwoty.

Przykład, kiedy klient osiąga poziom 3 i otrzymuje produkt.

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

Jeśli klient zdecyduje się na usunięcie elementu tak, to stwierdzenie jest prawdą, chcę być w stanie usunąć go ponownie.

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

Nie można usunąć produktu z koszyka. Jakieś pomysły, co tu robię źle? Szukałem bez szukania rozwiązania, które będzie dla mnie skuteczne.

Rozwiązanie

z pomocą @Rohil_PHPBeginner & @WisdmLabs doszedłem do takiego rozwiązania, które nie praca dla mnie.

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

WC_Cart :: remove_cart_item ($ cart_item_key); – WisdmLabs

+0

Chould i zmienić WC() -> cart-> remove_cart_item ($ product_3); za to ? –

+0

Co to jest zmienna $ product_3? – WisdmLabs

Odpowiedz

11

Myślę, że nieprawidłowo używasz remove_cart_item. Jeśli przejdziesz przez documentation, uznasz, że jako parametr przyjmuje on cart_item_key (jak wspomniano w komentarzu do wisdmLabs).

używasz go tak:

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

Spróbuj to zamiast:

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

Po zaktualizowaniu tej linii, myślę, że będzie w stanie usunąć produkt.

+0

Dzięki, pomogło mi to rozwiązać. Zaktualizuje mój wpis za pomocą rozwiązania, które inni zobaczą. –

+1

Cieszę się, że to zadziałało. Happy Coding! –

Powiązane problemy