¿Solo un producto agregado actualmente al carrito de Woocommerce?

2 minutos de lectura

avatar de usuario
Dr.MTR

Me gustaría que Woocommerce solo permita 1 producto en el carrito. Si un producto ya está en el carrito y se agrega otro, entonces debe eliminar el anterior.

Encontré este código en la red:

/**
 * When an item is added to the cart, remove other products
 */
function custom_maybe_empty_cart( $valid, $product_id, $quantity ) {

if( ! empty ( WC()->cart->get_cart() ) && $valid ){
    WC()->cart->empty_cart();
    wc_add_notice( 'Only allowed 1 item in cart, please remove previous 
item.', 'error' ); // here instead popup notice need to remove prevous added product
}

return $valid;

}
add_filter( 'woocommerce_add_to_cart_validation', 'custom_maybe_empty_cart', 
10, 3 );

Pero parece que no está funcionando como yo quería. Necesita eliminar automáticamente el producto agregado previamente en el carrito y agregar el último producto agregado en el carrito. ¿Puede alguien darme una pista sobre lo que necesito actualizar en la clase para trabajar en el último woo 3.3.X?

Este es el código más compacto y real como global $woocommerce ya no es necesario:

add_filter( 'woocommerce_add_to_cart_validation', 'auto_empty_cart', 20, 3 );
function auto_empty_cart( $passed, $product_id, $quantity ) {
    if( WC()->cart->is_empty() ) return $passed; // Exit

    WC()->cart->empty_cart();
    return $passed;
}

El código va en el archivo function.php de su tema secundario activo (o tema activo).

Probado y funciona en todas las versiones de Woocommerce desde 2.6.x

Esta funcionando perfectamente en Woocommerce 3.3.X

add_filter( 'woocommerce_add_to_cart_validation', 
'bbloomer_only_one_in_cart', 99, 2 );

function bbloomer_only_one_in_cart( $passed, $added_product_id ) {

global $woocommerce;

// empty cart: new item will replace previous
$woocommerce->cart->empty_cart();

// display a message if you like
wc_add_notice( 'Product added to cart!', 'notice' );

return $passed;
}

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad