How change product price in cart on woocommerce?

36 Views Asked by At

i need a way to add a simple textbox on every item in cart to quickly change its price and update the woocommerce cart totals. Thank you

I found here on stackoverflow a possible solution. How to change item price in cart by input field?

I tried to apply the changes read in the post. In particular, I insert

<input type="number" id="customPrice">
<div data-id="<?php echo $product_id ?>" id="updateCart">Update</div>

on my cart.php template and an editable input field appear on every item.

I insert in templates.php file the following, but nothing happens when i click on update button in my cart.

    <script type="text/javascript">
jQuery(function ($) {
    let customPrice = document.getElementById('customPrice');
    let price = customPrice.value;

    let updateCart = document.getElementById('updateCart');
    let id = updateCart.dataset.id


    updateCart.addEventListener('click', function () {
        $.ajax({
            url: "../wp-admin/admin-ajax.php",
            data: {action: "add_custom_price", id: id, price: 10},
            type: "POST",
            success(data) {
                if (data) {
                    console.log(data)
                }
                $("[name='update_cart']").trigger("click");
            }
        });
    });

});
function add_custom_price($cart) {
  if (is_admin() && !defined('DOING_AJAX'))
      return;

  if (did_action('woocommerce_before_calculate_totals') >= 2)
     return;

  if (isset($_POST['price']) && $_POST['id']) {
     $price = intval($_POST['price']);
     $id = intval($_POST['id']);

     // Get product
     $product = wc_get_product($id);
     $product->set_regular_price($price);
     $product->save();
     // delete the relevant product transient
     wc_delete_product_transients( $id );
  }
 }


add_action('wp_ajax_add_custom_price', 'add_custom_price');
add_action('wp_ajax_nopriv_add_custom_price', 'add_custom_price');
add_action('woocommerce_before_calculate_totals', 'add_custom_price', 1000, 1);

Where is my errors?

0

There are 0 best solutions below