Timpiele
¿Cómo elimino mediante programación un artículo del carrito de Woocommerce usando AJAX? Intenté poner una función en mi archivo functions.php y acceder a eso, pero no se elimina nada. Intenté codificar el producto 299 pero no se elimina. Esto es lo que hice:
funciones.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;
}
temas/mina/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);
}
});
Maha Dev
Use el método ajax adecuado de wordpress como este: Esto funcionó bien para mí.
//funciones.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');
//principal.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');
}
}
});
-
Gracias, eso funcionó. No estaba seguro exactamente de cómo hacer ajax en WP, Google fue de poca ayuda.
– Timpiele
23 de febrero de 2016 a las 5:45
-
@timpiele, acepta mi respuesta si te ayudó. 🙂
– Maha Dev
23 de febrero de 2016 a las 6:02
-
@MahaDev: ¿Hay alguna forma de llamar a esta función a través de una URL? Por ejemplo, ¿para tener un enlace que activa la eliminación del artículo especificado del carrito, usando ajax (para que el usuario no abandone la página en la que se encuentra)?
– inspirado
1 de diciembre de 2017 a las 2:48
-
Utilicé el código anterior, ¡funciona! Problema ahora, mi página se actualiza después de la ejecución de AJAX. ¿Alguna ayuda?
– Antoine Henrich
30 oct 2019 a las 21:20
-
Utilicé el código anterior, ¡funciona! El problema ahora es que mi página actualiza la cantidad del carrito después de actualizar la página. ¿Alguna ayuda?
– Alí
19 de noviembre de 2020 a las 14:02
dimitrov
Esto parece funcionar.
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'))
}
});
});
En functions.php, dentro de la carpeta de plantillas:
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');
Para WooCommerce 3.0+, puede hacerlo usando la función integrada 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);
-
En este ejemplo, no está pasando la identificación del producto
– Fabio Ricci
8 de junio a las 8:25