【问题标题】:WooCommerce programmatically deleting from cartWooCommerce 以编程方式从购物车中删除
【发布时间】:2016-06-04 09:51:27
【问题描述】:

如何使用 AJAX 以编程方式从 Woocommerce 购物车中删除商品?我尝试在我的 functions.php 文件中放置一个函数并访问它,但没有任何内容被删除。我尝试对产品 299 进行硬编码,但它没有删除。这是我所做的:

functions.php

function remove_item_from_cart() {
    $cart = WC()->instance()->cart;
    $id = 299;
    $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);
    }
    return true;
}

主题/我的/main.js

$.ajax({
    type: 'POST',
    dataType: 'text',
    url: "http://www.../wp/wp-content/themes/mine/functions.php",
    data: {
        action: 'remove_item_from_cart'
    },
    success: function( data ) {
        console.log(data);
    }
});

【问题讨论】:

    标签: ajax wordpress woocommerce


    【解决方案1】:

    像这样使用 wordpress 的正确 ajax 方法:这对我来说很好。

    //functions.php

        function remove_item_from_cart() {
        $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);
           return true;
        } 
        return false;
        }
    
        add_action('wp_ajax_remove_item_from_cart', 'remove_item_from_cart');
        add_action('wp_ajax_nopriv_remove_item_from_cart', 'remove_item_from_cart');
    

    //main.js

        $.ajax({
            type: "POST",
            url: 'http://localhost/your_site/wp-admin/admin-ajax.php',
            data: {action : 'remove_item_from_cart','product_id' : '4'},
            success: function (res) {
                if (res) {
                    alert('Removed Successfully');
                }
            }
        });
    

    【讨论】:

    • 谢谢你,成功了。我不确定如何在 WP 中执行 ajax,Google 帮不上什么忙。
    • @timpiele,如果对您有帮助,请接受我的回答。 :)
    • @MahaDev :有没有办法通过 URL 调用这个函数?例如,要有一个链接触发从购物车中删除指定项目,使用 ajax(这样用户就不会离开他们所在的页面)?
    • 我使用了上面的代码——它有效!现在的问题是,我的页面在 AJAX 执行后正在刷新。有什么帮助吗?
    • 我使用了上面的代码——它有效!现在的问题是,刷新页面后我的页面更新购物车数量。有什么帮助吗?
    【解决方案2】:

    这似乎行得通。

    HTML:

    <?php
      foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ){
        ?<
           <button class="remove-item" data-cart-item-key="<?=$cart_item_key;?>">
              remove item
           </button>
        <?
      }
    ?>
    

    Javascript:

    $('.remove-item').click(function(e){
        e.preventDefault();
        $.ajax({
            type: "POST",
            url: ajaxurl,
            data: {
                    action: 'remove_item_from_cart', 
                   'cart_item_key': String($(this).data('cart-item-key'))
                   }
        });
    });
    

    在functions.php中,模板文件夹内:

    function remove_item_from_cart() {
        $cart_item_key = $_POST['cart_item_key'];
        if($cart_item_key){
           WC()->cart->remove_cart_item($cart_item_key);
           return true;
        } 
        return false;
    }
    add_action('wp_ajax_remove_item_from_cart', 'remove_item_from_cart');
    add_action('wp_ajax_nopriv_remove_item_from_cart', 'remove_item_from_cart');
    

    【讨论】:

      【解决方案3】:

      对于 WooCommerce 3.0+,您可以使用内置的 remove_cart_item() 函数来完成

      function findCartItemKey($cartItems, $productId){               
        foreach($cartItems as $cartKey => $item){
          $product = $item['data'];
          if($product->get_id() == $productId){
                  return $cartKey;
          }       
          return false;
        }    
      }
      
      global $woocommerce;
      $cartItemKey = findCartItemKey($woocommerce->cart->get_cart())
      $woocommerce->cart->remove_cart_item($cartItemKey);
      

      【讨论】:

        猜你喜欢
        • 2017-10-13
        • 1970-01-01
        • 2017-01-29
        • 2016-02-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-19
        • 1970-01-01
        相关资源
        最近更新 更多