Saltar al contenido

Separar en múltiples lineas cuando añadimos el mismo producto más de una vez al carrito

A veces, resulta interesante poder separar un mismo producto en múltiples líneas del carrito de WooCommerce, con distintas cantidades en cada línea. Esto puede resultar interesante en caso de vender por peso, ya que el cliente pude querer comprar distintas cantidades de un mismo producto (para separarlo en bolsas, por ejemplo).

Para poder separar en múltiples líneas el mismo producto cada vez que lo añadimos al carrito, podemos usar un simple filtro:

  • woocommerce_add_cart_item_data:
    Con este filtro podemos añadir datos a cada línea de pedido, cuando esta se añade al carrito. El truco está en añadir una variable única (distinta) cada vez que se añade el producto al carrito. De esta forma, WooCommerce interpreta que se trata de lineas de pedido distintas.

A continuación el snippet para integrar esta nueva columna:

add_filter( 'woocommerce_add_cart_item_data', function ( $cart_item_data, $product_id ) {
    $uid = md5( microtime() . rand() ); //Cualquier valor "único"
    $cart_item_data['uid'] = $uid;
    return $cart_item_data;
}, 10, 2);

En caso de querer limitar la cantidad a 1 cada vez que se añade al carrito, se puede usar esta otra línea de código:

add_filter( 'woocommerce_is_sold_individually', '__return_true' );