En esta entrada te voy a presentar un sencillo truco para avisar en WooCommerce si un producto está ya en el carro antes de que vuelva a añadirlo por equivocación.
Si el cliente hace finalmente un pedido, duplicando por error el número de artículos de un producto determinado, lo más probable es que cuando lo reciba, quiera efectuar la devolución del producto sobrante.
Está claro que los gastos de envío de la devolución corren a cargo del cliente y que hasta que tú no tengas en tus manos el producto, no tienes obligación de reembolsar el importe de la devolución. Pero vas a perder tiempo en la gestión y desde luego van a aumentar las probabilidades de que el cliente quede descontento, aunque la culpa no haya sido tuya.
Cuando la compra se hace a través de una tienda online y no en persona, es más fácil eximirse de responsabilidad y echar la culpa al vendedor.
Truco para comprobar si hay un producto repetido en el carro con WooCommerce.
El truco del que hablo consiste en usar un código snippet para WooCommerce, el cual se encarga de avisar automáticamente al cliente cuando va a añadir de nuevo un producto que ya está en el carro.
El funcionamiento del código es bastante sencillo. Cuando el cliente entra en la página de catálogo o en la de un producto, el código snippet comprueba si el producto o los productos que está visualizando ya han sido añadidos al carro y en caso de que sea así, modifica el texto del botón de compra y muestra en su lugar el texto «Ya está en el carro«.
En realidad, puedes poner el texto que desees para el aviso editando la línea de código «return __(‘Ya está en el carro’ , ‘woocommerce’)» y cambiándola por la frase que desees.
Puede que esta técnica no tenga sentido usarla para cualquier tipo de producto, pero si puede ser útil cuando; vendes productos hechos a medida o personalizados, o productos exclusivos y de coste elevado como por ejemplo, joyas o relojes. En estos casos es poco probable que el cliente quiera comprar dos productos exactamente iguales.
Aún así, este código no bloquea el botón de compra en WooCommerce en ningún momento, solamente muestra un aviso. Por tanto, si de verdad el cliente tiene interés en repetir producto, puede hacerlo sin problema.
Sea cual sea el uso que le des, ya sabes que es posible avisar en WooCommerce si un producto está ya en el carro sin necesidad de instalar plugins, simplemente usando un sencillo código snippet.
Hola, a mi no me esta funcionando este codigo , uso el tema shopical , por donde puede venir el problema ?
Hola, estoy buscando la funcionalidad de que para comprar el producto B, antes debe haber comprado el producto A. Debería saber si existe ese producto en historial de compra, no en carrito actual. Se trata de matricula para curso. Para poder comprar modulos, tiene q haber comprado matricula alguna vez. Me podrás contar si existe esto que necesito implementar? Gracias!
Hola que tal?
gracias por este codigo
PREGUNTA:
Se puede poner una clase distinta al boton cuando esta agregado al carrito? asi lo tengo de otro color
espero su respuesta
gracias!
Gracias! Me puede venir bien, comprueba que exista cualquier tipo de variación de ese producto en cesta o solo la variación seleccionada?
Un saludo
Hola Rafa,
El código no diferencia entre el tipo de variación del producto que hay en el carro, simplemente comprueba que el producto esté dentro de la cesta y te avisa.
Saludos!
Buenas Antonio, gracias por el código, te querría preguntar, si queremos también bloquear el botón de compra para que no se pueda volver a añadir al carrito, ¿Qué podemos hacer?
Gracias.
Hola Miguel,
Con el código que uso en la entrada no se puede reutilizar para eso y ahora mismo no conozco ningún plugin que te permita hacerlo.
Hacerse, se podría hacer, pero habría que desarrollarlo.
Un saludo!
Ok, buenas Antonio.
Ahí dejo el código:
/** Aviso producto solo una vez */
add_filter(‘single_add_to_cart_text’, ‘texto_perdonalizado_aviso_carrito’);
function texto_perdonalizado_aviso_carrito() {
global $woocommerce;
foreach($woocommerce->cart->get_cart() as $cart_item_key => $values ) {
$_product = $values[‘data’];
if( get_the_ID() == $_product->id ) {
return __(‘El producto ya está en el carrito’, ‘woocommerce’);
}
}
return __(‘Add to cart’, ‘woocommerce’);
}
/** Filtro producto solo una vez */
add_filter( ‘woocommerce_add_to_cart_validation’, ‘valida_carrito’, 10, 5 );
function valida_carrito( $passed, $product_id, $quantity, $variation_id = », $variations= » ) {
global $woocommerce;
$r = 1;
foreach($woocommerce->cart->get_cart() as $cart_item_key => $values ) {
$_product = $values[‘data’];
if($product_id == $_product->id)
$r = 0;
}
if($r == 0) {
$passed = false;
wc_add_notice( __( «El producto «.$product_id.» ya está en el carrito con una cantidad de «.».$quantity.».», si quieres volver a elegirn la misma cantidad tienes que completar primero la compra actual, puedes elegir otro paquete con otro diseño distinto, gracias y perdón por las moléstias…», ‘textdomain’ ), ‘error’ );
}
return $passed;
}
Recién salido del horno.
¡Gracias!
Jaja… ¡Muy bueno!
¡Gracias por el aporte Miguel Angel!
Saludos.
Gracias! el codigo del post me está funcionando correctamente, pero este no me está bloqueando el botón, ¿que puede pasar?
De hecho lo que me vendría perfecto es que al añadir al carrito un producto borre primero lo que haya en el carro ya que por el tipo de productos que vendemos (incripciones) sólo queremos que se venda uno cada vez
Si pueden ayudarme!
Gracias de nuevo
Hola Rafael,
El código no bloquea en ningún momento el botón de compra. Lo especifico al final del artículo.
Un saludo!
Hola, estoy buscando la funcionalidad de que para comprar el producto B, antes debe haber comprado el producto A. Debería saber si existe ese producto en historial de compra, no en carrito actual. Se trata de matricula para curso. Para poder comprar modulos, tiene q haber comprado matricula alguna vez. Me podrás contar si existe esto que necesito implementar? Gracias!
Hola Antonio
Mira lo que quiero hacer es parecido pero cuando la persona incluya un producto al carrito de compra se le active una ventana de popus con dos botones uno diciendole si quiere seguir comprando y el otro si quiere ir al carrito para procesar el pago. Ya compre el plugin Indeed Smart PopUp for WordPress e hice la ventana pero no se como activarlo con ese evento.
Quisiera saber si me podrias ayudar para saber cual es el ID o el Class de wocommerce para el boton del carrito de compra, ya que en el plugin es lo que me pide para personalizarlo.
Saludos
Hola, Antonio! Cómo estás?
Me gustaría contactarme con vos, ya que tengo un problemita con la traducción de un theme en la parte de woocommerce y quisiera saber qué posibilidades hay de solucionar eso.
Te agradezco de antemano.
Saludos cordiales.
Héctor Moreno
Skype: hectormoreno2238
Hola Hector,
Te recomiendo que eches un vistazo a este artículo –> https://woodemia.com/como-traducir-los-botones-de-woocommerce/
Espero que te sirva.
Saludos!