2015-06-01 19 views
12

Đã tạo một chức năng mà khách hàng nhận được sản phẩm được thêm vào giỏ hàng khi chúng đạt đến số tiền cụ thể.

Ví dụ về thời điểm khách hàng đạt đến cấp 3 và nhận sản phẩm được thêm vào.

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

Nếu khách hàng quyết định xóa mục để tuyên bố này là đúng, tôi muốn có thể xóa lại nó.

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

Không quản lý để xóa sản phẩm khỏi giỏ hàng. Bất kỳ ý tưởng gì đang làm sai ở đây? Đã tìm kiếm xung quanh mà không tìm thấy bất kỳ giải pháp nào phù hợp với tôi.

Giải pháp

Với sự giúp đỡ từ @Rohil_PHPBeginner & @WisdmLabs tôi đến giải pháp này mà đã làm các công việc cho tôi.

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

Tôi có thể thay đổi WC() -> cart-> remove_cart_item ($ product_3); vì điều đó? –

+0

Biến số $ product_3 là gì? – WisdmLabs

Trả lời

11

Tôi nghĩ bạn đang sử dụng remove_cart_item không chính xác. Nếu bạn đi qua số documentation, bạn sẽ thấy rằng nó chấp nhận cart_item_key làm thông số (như wisdmLabs được đề cập trong nhận xét).

Bạn đang sử dụng nó như vậy:

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

Hãy thử điều này thay vì:

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

Sau khi cập nhật dòng đó, tôi nghĩ rằng bạn sẽ có thể loại bỏ sản phẩm.

+0

Cảm ơn, Điều đó đã giúp tôi giải quyết nó. Sẽ cập nhật bài đăng của tôi với giải pháp cho người khác xem. –

+1

Vui vì nó đã làm việc cho bạn. Happy Coding! –

Các vấn đề liên quan