Es posible que en algunos proyectos quieras limitar la compra de productos a un único ítem, es decir, puedes agregar varios productos pero solo uno de cada uno.
Resultado Final
Al final queremos obtener algo similar a como se muestra en la imagen:
Código para agregar un ítem por producto
Puedes agregar el siguiente código en el archivo functions.php de tu tema hijo o usando algún plugin de Snippets.
// Validación al agregar al carrito
add_filter( 'woocommerce_add_to_cart_validation', 'dcms_add_to_cart_validation', 10, 3 );
function dcms_add_to_cart_validation( $valid, $product_id, $quantity ) {
if ( $valid && $quantity > 1){
wc_add_notice( 'Sólo puedes agregar un item por producto', 'error' );
return false;
}
if ( $valid && ! empty( WC()->cart->get_cart() ) ) {
foreach ( WC()->cart->get_cart() as $values ) {
if ( $product_id == $values['product_id'] ) {
wc_add_notice( 'El producto ya existe en el carrito', 'error' );
return false;
}
}
}
return $valid;
}
// Validación al actualizar el carrito
add_filter( 'woocommerce_update_cart_validation', 'dcms_update_cart_validation', 10, 4 );
function dcms_update_cart_validation( $valid, $cart_item_key, $values, $quantity ) {
if ( $valid && $quantity > 1){
wc_add_notice( 'Sólo puedes agregar un item por producto', 'error' );
return false;
}
return $valid;
}
En el código anterior:
- Usamos Hooks de validación, es decir podemos cancelar el proceso retornando falso
- El primer Hook de filtro es woocommerce_add_to_cart_validation, hace referencia a la función dcms_add_to_cart_validation y se ejecuta tras añadir un producto al carrito
- Dentro de esta función tenemos dos partes, la primera valida que sólo se agregue una cantidad de una unidad
- La segunda parte controla si el producto ya esta añadido al carrito, en ambos casos si falla emite un mensaje y retornamos falso
- El otro Hook es woocommerce_update_cart_validation, hace referencia a la función dcms_update_cart_validation, este se ejecuta cuando se actualizan las cantidades del carrito
- Dentro de esta función simplemente validamos que la cantidad no sea mayor que uno
Conclusión
Si quieres controlar que sólo se agregue una unidad por cada producto en el carrito de WooCommerce, puedes realizarlo fácilmente directamente a través de código. También puedes editar el código para que en lugar de una unidad te acepte una cantidad máxima.
¿Aún con dudas?, en el siguiente video se detalla el uso del código anterior.
La entrada Agrega una única unidad por producto al carrito de WooCommerce es un artículo reciente del sitio DecodeCMS.
0 Commentaires