在woocommerce中使用ajax删除购物车中的产品

Posted

技术标签:

【中文标题】在woocommerce中使用ajax删除购物车中的产品【英文标题】:Remove product in the cart using ajax in woocommerce 【发布时间】:2014-03-20 23:40:19 【问题描述】:

我想在不点击链接的情况下使用 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();

【问题讨论】:

【参考方案1】:

你可以使用 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);

【讨论】:

请注意,此代码不适用于可变产品。在这种情况下,您必须将 $variation_id 添加到函数 generate_cart_id() 或传递 $cart_id(实际上它已经从 ajax 脚本中正确调用了 $cart_item_key 我似乎无法让它适用于可变产品。正如文档所述,我已将我的变体 ID 作为参数传递给 generate_cart_id,但没有任何反应。我是不是忘记了什么? 你能在这里明确一下这个函数的放置位置吗? 您应该将该代码添加到 ajax 中调用的 php 中。我必须说,我不确定这仍然适用于最近版本的 woo commerce 任何人都可以实现这个变量产品? ***.com/questions/39286294/…【参考方案2】:

使用这个:

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

【讨论】:

【参考方案3】:

试试这个:

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

 

【讨论】:

以上是关于在woocommerce中使用ajax删除购物车中的产品的主要内容,如果未能解决你的问题,请参考以下文章

Woocommerce:如何在应用/删除优惠券时禁用 AJAX?

在 WooCommerce 的结帐时禁用 AJAX

在Woocommerce中Ajax化自定义迷你购物车小部件

WooCommerce - 更改数量触发购物车中的 AJAX 调用

AJAX 添加到购物车按钮不适用于自定义查询循环产品 woocommerce

WooCommerce 产品循环中添加 Ajax 选项的复选框添加到购物车