woocommerce checkout page editable products and removeable (mine own last code )

PHOTO EMBED

Wed Oct 18 2023 06:34:08 GMT+0000 (Coordinated Universal Time)

Saved by @Alihaan #php

// Modify quantity input and add remove icon
add_filter('woocommerce_checkout_cart_item_quantity', 'bbloomer_checkout_item_quantity_input', 9999, 3);

function bbloomer_checkout_item_quantity_input($product_quantity, $cart_item, $cart_item_key) {
    $product = apply_filters('woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key);
    $product_id = apply_filters('woocommerce_cart_item_product_id', $cart_item['product_id'], $cart_item, $cart_item_key);

    if (!$product->is_sold_individually()) {
        $product_quantity = woocommerce_quantity_input(array(
            'input_name'  => 'shipping_method_qty_' . $product_id,
            'input_value' => $cart_item['quantity'],
            'max_value'   => $product->get_max_purchase_quantity(),
            'min_value'   => '0',
        ), $product, false);

        // Add remove icon
        $product_quantity .= '<a href="#" class="remove-product" data-product-key="' . $cart_item_key . '">x</a>';

        $product_quantity .= '<input type="hidden" name="product_key_' . $product_id . '" value="' . $cart_item_key . '">';
    }

    return $product_quantity;
}

// Add JavaScript to handle product removal
add_action('wp_footer', 'add_product_removal_script');

function add_product_removal_script() {
    ?>
    <script>
        document.addEventListener('click', function (event) {
            if (event.target.classList.contains('remove-product')) {
                event.preventDefault();
                const productKey = event.target.getAttribute('data-product-key');
                const form = event.target.closest('form');

                if (form && productKey) {
                    // Remove the product from the cart via AJAX
                    jQuery.ajax({
                        type: 'POST',
                        url: wc_checkout_params.ajax_url,
                        data: {
                            action: 'remove_product_from_cart',
                            product_key: productKey
                        },
                        success: function (response) {
                            // Reload the checkout page to reflect the updated cart
                            window.location.reload();
                        }
                    });
                }
            }
        });
    </script>
    <?php
}
add_action('wp_ajax_remove_product_from_cart', 'remove_product_from_cart');

function remove_product_from_cart() {
    if (isset($_POST['product_key'])) {
        $product_key = sanitize_text_field($_POST['product_key']);
        WC()->cart->remove_cart_item($product_key);
        echo 'success';
    }

    wp_die();
}


// Detect Quantity Change and Recalculate Totals
add_action('woocommerce_checkout_update_order_review', 'bbloomer_update_item_quantity_checkout');

function bbloomer_update_item_quantity_checkout($post_data) {
    parse_str($post_data, $post_data_array);
    $updated_qty = false;
    $updated_remove = false;

    foreach ($post_data_array as $key => $value) {
        if (substr($key, 0, 20) === 'shipping_method_qty_') {
            $id = substr($key, 20);
            WC()->cart->set_quantity($post_data_array['product_key_' . $id], $post_data_array[$key], false);
            $updated_qty = true;
        } elseif (substr($key, 0, 15) === 'remove_product_') {
            $cart_item_key = substr($key, 15);
            WC()->cart->remove_cart_item($cart_item_key);
            $updated_remove = true;
        }
    }

    if ($updated_qty || $updated_remove) {
        WC()->cart->calculate_totals();
    }
}
content_copyCOPY