2014-02-20 4 views
9

Я хотел бы удалить продукт в корзине woocommerce с помощью ajax без ссылки.Удалить продукт в корзине при помощи ajax в woocommerce

Если у вас есть такая функциональность, пожалуйста, помогите нам.

add_action('wp_footer', 'add_js_to_wp_wcommerce'); 

function add_js_to_wp_wcommerce(){ ?> 
    <script type="text/javascript"> 
    jQuery('.remove-product').click(function(){ 
     var product_id = jQuery(this).attr("data-product_id"); 
     jQuery.ajax({ 
      type: 'POST', 
      dataType: 'json', 
      url: "/wp-admin/admin-ajax.php", 
      data: { action: "product_remove", 
        product_id: product_id 
      },success: function(data){ 
       console.log(data); 
      } 
     }); 
     return false; 
    }); 
    </script> 
<?php } 

add_action('wp_ajax_product_remove', 'product_remove'); 
add_action('wp_ajax_nopriv_product_remove', 'product_remove'); 
function product_remove() { 
    global $wpdb, $woocommerce; 
    session_start(); 
    foreach ($woocommerce->cart->get_cart() as $cart_item_key => $cart_item){ 
     if($cart_item['product_id'] == $_POST['product_id']){ 
      // Remove product in the cart using cart_item_key. 
      $woocommerce->cart->get_remove_url($cart_item_key); 
     } 
    } 
    print_r($woocommerce->cart->get_cart()); 
    //echo json_encode(array('status' => 0)); 
    exit(); 
} 

ответ

21

вы могли бы использовать метод WC_Cart set_quantity

И делать, как это в PHP:

$cart = WC()->instance()->cart; 
$id = $_POST['product_id']; 
$cart_id = $cart->generate_cart_id($id); 
$cart_item_id = $cart->find_product_in_cart($cart_id); 

if($cart_item_id){ 
    $cart->set_quantity($cart_item_id,0); 
} 
+0

Это решение работает! –

+0

Очень приятное решение! – rilwis

+4

Заметим, что этот код не будет работать для переменной продукции. В этом случае вам нужно добавить '$ vari_id' в функцию' generate_cart_id() 'или передать' $ cart_id' (на самом деле это правильно называется '$ cart_item_key' из сценария ajax. – rassoh

1

Попробуйте это:

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

if($cart_item['product_id'] == $product_id){ 

    unset($cartdetails->cart_contents[$cart_item_key]); 

} 
} 
4

использовать это:

$cart = $woocommerce->cart; 

foreach ($woocommerce->cart->get_cart() as $cart_item_key => $cart_item){ 
    if($cart_item['product_id'] == $_POST['product_id']){ 
     // Remove product in the cart using cart_item_key. 
     $cart->remove_cart_item($cart_item_key); 
    } 
} 
Смежные вопросы