2013-11-22 26 views
5

Tôi đang triển khai nút Xóa mục bên cạnh nút thêm vào giỏ hàng tuy nhiên tôi gặp sự cố khi nhận biến $ cart_item_key cho một sản phẩm. Tôi có các biến toàn cục $ woocommerce và $ product nhưng cách duy nhất $ cart_item_key được sử dụng là một foreach không giúp ích gì cho tôi khi tôi cần thêm mã vào add-to-cart.php.

Trả lời

9

Bạn cần phải thiết lập các liên kết loại bỏ đối với từng sản phẩm trong vòng lặp như thế này,

foreach ($woocommerce->cart->get_cart() as $cart_item_key => $cart_item) { 

echo $cart_item_key; 
if($cart_item['product_id'] == $your_product_id_to_remove){ 
    //remove single product 
} 
} 

Trong mọi tình huống bạn có giỏ hàng niêm yết; từ đó bạn phải xóa, vì vậy foreach sẽ hoạt động theo yêu cầu của bạn.

Hy vọng nó sẽ giúp ..

+0

cảm ơn bạn! nó hoạt động! Chỉ là điều tôi đang tìm kiếm! –

+0

bạn được chào đón :) –

+1

Điều này có vẻ như một cách rất kém hiệu quả để đạt được điều này. Tôi biết rằng cấu trúc của WooCommerce ngày càng ít gây ra loại giải pháp này - tuy nhiên, chúng tôi chủ yếu nói: "Đối với mỗi mục trong giỏ hàng, hãy kiểm tra tất cả các mặt hàng khác trong giỏ hàng, nếu đó là một trận đấu - làm một cái gì đó ". Thực hiện các phép toán cơ bản, chúng ta có thể thấy rõ ràng rằng chúng ta phải lặp lại các mục trong giỏ hàng của chúng ta 'Y bình phương' lần (trong đó Y là số mục trong giỏ hàng của chúng tôi). 1 mục - 2 lần lặp 2 mục - 4 lần lặp 3 mục - 9 lần lặp 4 mục - 16 lần lặp –

2

Mã này làm việc cho tôi. Nhờ Jobin Jose (https://stackoverflow.com/users/1258004/jobin-jose) cho giải pháp!

foreach ($woocommerce->cart->get_cart() as $cart_item_key => $cart_item) { 
    if ($cart_item['product_id'] == $product->id) { 
     echo apply_filters('woocommerce_cart_item_remove_link', sprintf('<a href="%s" class="remove" title="%s">&times;</a>', esc_url($woocommerce->cart->get_remove_url($cart_item_key)), __('Remove this item', 'woocommerce')), $cart_item_key); 
} 
Các vấn đề liên quan