A todo el mundo le gustan las ofertas. La oportunidad de comprar un producto por menos de lo que vale hace que nuestro cerebro esté más predispuesto a comprarlo, porque percibe (aunque sea de forma subjetiva) una recompensa. Veamos cómo podemos aprovechar este mecanismo psicológico para aumentar las ventas de nuestro ecommerce creando ofertas 3×2 con WooCommerce.
Tabla de contenidos
Descuento del 33% frente a oferta 3×2: el poder de lo gratis
Sí, es cierto que puedes aplicar una rebaja del 33% al artículo, pero no es lo mismo. Las cosas gratis llaman la atención de forma mucho más poderosa que una rebaja. No podemos evitarlo: si es gratis, lo queremos. Aunque no lo necesitemos.
Los grandes almacenes lo saben bien, y por eso crean regularmente campañas de ofertas 3×2 (compras 3 y pagas 2). Y, frecuentemente, los compradores actúan de forma tan irracional que prefieren esa oferta frente a un descuento superior.
Carrefour lo sabe bien, por poner un ejemplo de una cadena que lo hace de forma frecuente. Prácticamente cada mes realiza una promoción con artículos a 3×2 o bien con la segunda unidad al 70%. Fíjate bien:
- Oferta 3×2: equivale a un descuento del 33%, pero debes comprar al menos 3 unidades
- Segunda unidad al 70%: equivale a un descuento del 35%, pero debes comprar al menos 2 unidades
¡La segunda opción es mucho mejor! Es más descuento, y requiere que compres una unidad menos. Y sin embargo, de forma inconsciente, la gente aprecia mucho más las ofertas 3×2. ¿Por qué? Porque percibe que está obteniendo una unidad gratis.
Y lo gratis es irresistible.
Cómo crear una oferta de 3×2 en WooCommerce
Pues bien, si Carrefour puede hacerlo nosotros, con nuestra tienda WooCommerce, también (siempre y cuando los márgenes nos lo permitan, claro). Eso aumentará las ventas, el ticket medio, o nos permitirá deshacernos del stock de ese producto que nos está costando tanto vender, ocupando espacio en el almacén y bloqueando liquidez. ¡Vamos a ver cómo!
En realidad no hay un plugin para ello (al menos no uno gratuito), pero basta con añadir el siguiente código a tu archivo functions.php o, mucho más recomendado según te explico en este artículo, a un plugin para funciones personalizadas:
// Oferta 3x2 en WooCommerce const ID_DE_PRODUCTO = 48; function oferta_3x2 ($subtotal, $cart_item, $cart_item_key) { $ofertaFinal = $subtotal; $cantidad = $cart_item ['quantity']; if (($cart_item ['product_id'] === ID_DE_PRODUCTO ) && ($cantidad >= 3)) { $precioProducto = $cart_item ['data']->get_price(); $precioProductoImpuestoIncl = $cart_item['data']->get_price_including_tax(); $descuento = floor ($cantidad / 3) * $precioProducto; $descuentoImpuestoIncl = floor ($cantidad / 3) * $precioProductoImpuestoIncl; // Calcula oferta para configuración de impuestos activa if ('excl' == WC()->cart->tax_display_cart) { $oferta = $cart_item['data']->get_price_excluding_tax ($cantidad) - $descuento; $ofertaFinal = wc_price ($oferta); if (WC()->cart->prices_include_tax && WC()->cart->tax_total > 0) $ofertaFinal .= ' ' . WC()->countries->ex_tax_or_vat() . ''; } else { $oferta = $cart_item['data']->get_price_including_tax($cantidad) - $descuentoImpuestoIncl; $ofertaFinal = wc_price($oferta); if (!WC()->cart->prices_include_tax && WC()->cart->tax_total > 0) $ofertaFinal .= ' ' . WC()->countries->inc_tax_or_vat(). ''; } // Actualiza subtotal del carrito if ('excl' == WC()->cart->tax_display_cart) WC()->cart->subtotal_ex_tax = WC()->cart->subtotal_ex_tax - $descuento; else WC()->cart->subtotal = WC()->cart->subtotal - $descuentoImpuestoIncl; // Actualiza total del carrito WC()->cart->total = WC()->cart->total - $descuentoImpuestoIncl; } return $ofertaFinal; } add_filter ('woocommerce_cart_item_subtotal', 'oferta_3x2', 10, 3); // Corrección de impuestos function corrige_impuestos ($tax_totals, $cartObject) { $impuestosDesc = 0; foreach ($cartObject->get_cart() as $cart_item_key => $cart_item) { if (($cart_item['product_id'] === ID_DE_PRODUCTO) && ($cart_item['quantity'] >= 3)) $impuestosDesc = ($cart_item['data'] -> get_price_including_tax() - $cart_item['data']->get_price_excluding_tax()) * floor($cart_item['quantity'] / 3); } // Aplica la corrección al desglose de impuestos mostrado debajo del total del carrito $newTaxTotal = current($tax_totals); $clave = key($tax_totals); $newTaxTotal->amount -= $impuestosDesc; $newTaxTotal->formatted_amount = wc_price($newTaxTotal->amount); $tax_totals[$clave] = $newTaxTotal; return $tax_totals; } add_filter ('woocommerce_cart_tax_totals', 'corrige_impuestos', 10, 2);
Sólo tienes que cambiar una única cosa: en la primera línea, donde dice:
const ID_DE_PRODUCTO = 48;
debes cambiar el «48» por el identificador del producto que quieras poner en oferta 3×2. ¿Y cómo sabes cuál es el identificador de un producto? ¡Muy fácil! Sólo tienes que ir al listado de productos que tienes publicados (en el menú, opción Productos > Productos), localizarlo y pasarle el puntero del ratón por encima. Verás el identificador con la leyenda ID bajo el nombre.
Identificador de producto en WooCommerce
Limitaciones
Nada más, es lo único que debes hacer. Ojo, porque el código, así como está, sólo va a funcionar para un único producto. Es decir, no puedes poner varios a la vez en oferta 3×2. Para ello habría que adaptar el código ligeramente.
Esa es la primera limitación que tiene. Otra de ellas son los productos variables: si realizas una oferta 3×2 en un producto variable, sólo se aplicará si el usuario compra tres unidades iguales, es decir, de la misma variedad. Si son de variedades combinadas, no se aplicará la oferta.
Y por último debes tener el mismo grupo de impuestos en todos los artículos. Si vendes en dos grupos de impuestos (por ejemplo artículos con IVA normal y con IVA reducido) no realizará bien el cálculo del desglose de impuestos.
¿Estás construyendo tu tienda online o eres implementador WordPress?
¿Necesitas plugins de calidad y con soporte para implementar funcionalidades concretas?
Consigue todos los plugins a la venta en la sección de plugins de esta web y todos los que siga añadiendo. Acceso a los 96 plugins (y subiendo) con soporte directo del desarrollador, actualizaciones y uso ilimitado: úsalos en tantas webs como lo necesites.
Informa al usuario: YITH WooCommerce Cart Messages
Bien, de momento la oferta 3×2 con WooCommerce queda correctamente establecida con ese código. Se aplica correctamente (siempre que respetes las limitaciones que hemos visto) y técnicamente es correcta. Pero, seamos sinceros, en cuanto a marketing esto deja mucho que desear:
Como puedes ver en la imagen, el cálculo se ha hecho correctamente (sólo se cobran dos unidades y el desglose de impuestos se recalcula bien), pero ni se advierte al usuario de que se le aplica la oferta y, lo que es mucho peor, si alguien va a comprar una unidad del artículo no se le avisa de la disponibilidad de la misma.
Eso lo podemos remediar fácilmente utilizando el plugin YITH WooCommerce Cart Messages, que nos permite mostrar avisos en el carrito y/o en el checkout, tanto fijos como condicionales, dependiendo de si se incluye o bien un producto determinado o uno de una determinada categoría.
Para ello una vez instalado y activado podemos ir a YITH Plugins > Cart Messages para elegir si queremos mostrar el mensaje en el carrito, en el checkout, o en ambos. Para la oferta 3×2 los mostraremos en ambos.
Sin embargo no es ahí donde se configuran los mensajes. Para eso tenemos que ir a WooCommerce > Yith Cart Messages, donde encontrarás un listado de los mensajes que tienes configurados. La primera vez, evidentemente, el listado estará vacío.
Mensaje «Aprovecha la oferta 3×2»
Así que vamos a crear uno nuevo (Add New Message) que se titule «Artículo con oferta 3×2» o algo parecido. Nadie va a ver el título, es sólo para reconocerlo nosotros mismos.
Bien, una vez creado ya podemos elegir sus características. Nos encontraremos con un cuadro de opciones como éste:
Primero hay que elegir en el menú desplegable Message Type el tipo de mensaje, es decir, cuándo se va a mostrar. Tenemos tres opciones:
- Products in Cart: el mensaje se mostrará sólo cuando en el carrito haya alguno de los productos que configuremos
- Categories in Cart: el mensaje se mostrará sólo cuando en el carrito haya algún producto de una de las categorías que configuremos
- Simple Message: el mensaje se mostrará siempre, sin condiciones, en los lugares que hayamos elegido en la pantalla de opciones principal (carrito y/o checkout)
Para nuestra oferta 3×2 en WooCommerce vamos a elegir la opción Products in Cart, ya que queremos mostrar el mensaje a los usuarios que añadan al carrito nuestro producto en oferta.
A continuación creamos el mensaje en la casilla de texto Message. Si escribimos {products} el texto se sustituirá automáticamente por el producto que le hayamos indicado (lo haremos a continuación) que está en oferta y si ponemos {required_quantity} lo cambia por la cantidad mínima necesaria para aprovecharse de la promoción, en este caso 3. Así, yo he puesto este texto:
El artículo {products} está en oferta 3×2. ¡Compra {required_quantity} unidades para beneficiarte de ella!
Ya sólo nos quedan dos cosas por configurar. En primer lugar, la cantidad de unidades necesarias para aprovechar la oferta, que en nuestro caso serán 3. Eso hay que ponerlo en la casilla Required quantity. En Treshold amount no hay que poner nada, esta opción la vamos a usar para nuestro siguiente mensaje.
Por último falta indicar cuál es el producto en oferta, que se pone en Select products. Con introducir las tres primeras letras ya te hace una búsqueda inteligente y te ofrece resultados. Elije el de tu producto.
Bien, con esto hemos terminado este primer mensaje. El plugin permite añadir un botón personalizado, pero no lo vamos a necesitar, así que no hay que poner nada más. Guardamos, y ahora cuando alguien añada nuestro producto en promoción al carrito verá algo así:
Mensaje «Oferta 3×2 aplicada»
Pero aún no hemos acabado del todo. Vamos a crear otro nuevo mensaje titulado «Oferta 3×2 aplicada» o algo similar, que informe al usuario de que la oferta se le ha aplicado.
Este mensaje lo configuraremos con el mismo tipo de mensaje (Products in Cart) que el anterior y poniendo el mismo artículo sobre el que se aplica, pero esta vez dejaremos en blanco la opción Required quantity y usaremos Treshold amount (es decir, el mínimo de unidades para que el mensaje aparezca), donde pondremos un 3. El mensaje puede ser algo así:
Te estás beneficiando de una oferta 3×2 en el producto {products}. ¡Enhorabuena!
Y el resultado:
Mucho mejor que antes, ¿verdad?
Conclusión
Como ves, aunque a veces no haya plugins para determinadas funcionalidades que queremos dar a nuestra tienda WooCommerce, con un poco de inventiva y algo de código podemos hacer «casi» de todo. En este caso, una oferta 3×2 puede ser muy útil, como decía al principio, para aumentar el ticket medio de caja o para liberar stocks de un artículo difícil de vender.
Si tienes alguna necesidad específica para tu tienda WooCommerce no dudes en contactarme y buscaremos una solución. Como siempre, me tienes a tu disposición para cualquier duda que tengas respecto a WordPress o a WooCommerce.
Facundo dice
Hola Enrique, como estas?
muy buenos tus aportes sobre woocommerce.
quisiera saber , que se deberia cmabiar en la programacion para poder realizar un descuento en la segunda unidad unicamente, sin importar la categoria o el id .
Beatriz dice
Hola Enrique
Muy buena tu solución, gracias. Para mí que soy nueva en esto, me viene estupendamente
También me ha encantado el plugin para los mensajes, y el ebook «Mejorando WooCommerce» que he recibido.
Gracias por tu generosidad.
A ver si me puedes ayudar, he colocado tu código y funciona correctamente hasta cuando finalizo la compra, aquí ya no respeta los totales de la promoción, es como si los dejara sin efecto, y pone los totales normales.
Faltará colocar algo que yo no sé?
Un saludo y gracias por tu tiempo.
Enrique dice
Hola Beatriz
Gracias a ti, me alegra que mis contenidos te sean de utilidad. No falta nada, el código es completo y no necesita de ninguna otra cosa para funcionar (siempre y cuando hayas especificado el ID de producto, que entiendo que sí lo has hecho ya que dices que en carrito lo aplica bien)
Quizá estés utilizando algún otro plugin o snippet de código que interfiere con éste, habría que comprobar eso.
Un saludo.
Marta dice
Hola, he aplicado el código en mi tienda. Se trata de un producto variable pero el código funciona, al menos hasta la hora del pago.
Te cuento:
En el carrito me aparece el precio perfectamente, o sea el producto de 2 aunque añadas 3 y si añades 4 te mantiene la oferta, perfecto vaya.
El problema viene a la hora de realizar el pago, resulta que hasta en finalizar compra sale el precio correcto, le das a pagar con paypal y de pronto el precio es el de 3 productos.
¿Cómo lo puedo arreglar?
Un saludo y gracias por el aporte
Enrique Ros dice
Hola Marta
Ese código es bastante sencillo, y sólo funciona con productos simples o bien con una variación de un producto variable. Ten en cuenta que en un producto variable el producto en sí tiene un ID y cada una de las variaciones tiene su propio ID.
Como ves es un código bastante limitado, ten en cuenta que un plugin bien hecho para aplicar ofertas 3×2 puede llevar cientos de líneas de código.
Juan Pedro dice
Hola Enrique!
Muchas gracias por compartir tus conocimientos, nos ayudas mucho.
El código de 3×2 se aplica bien en la página del carrito y en la del checkout, pero cuando realizas el pedido, en la página de thank you, sale el precio de los 3 artículos sin el descuento correspondiente. También se refleja el precio de los 3 artículos en el mail de confirmación de pedido y en el historial de pedidos del cliente.
¿Habría alguna forma de solucionarlo?
Muchas gracias.
Un saludo.
Raul dice
Hola Enrique:
¿Crees que el código se podría adaptar para una categoría en concreto en lugar de para un producto?
Enrique J. Ros dice
Hola Raul
Sí, claro, con algunas modificaciones se puede hacer.
Un saludo
Yasmin dice
Hola Enrique,
Antes de nada, quiero agradecerte por subir toda la info que subis, en más de una ocacion me has ayudado muchisimo.
Ahora tengo una consulta, y es si es posible crear campos personalizados en el formulario de WooCommerceque solo se muestran cuando se hace la compra de algunos productos.
El tema es que estoy trabajando con una página que vende eventos deportivos y no para todos los eventos me hacen falta los mismos datos.
¿Será posible?
Desde ya muchas gracias
Dani dice
muy bueno,
quiero modificar el mensa «Detalles de facturación» por «Detalles del Pedido»
ademas eliminar el bloque ¿Enviar a una dirección diferente?
Por ultimo adicionar imagenes a los métodos de pago
es posible?
que necesito? plugins? puedo hacerlo por codigo? utilizo el theme Jupiter pro
gracias