Un aliciente para conseguir más ventas en nuestra tienda online es la de ofrecer promociones o descuentos a partir de una cantidad mínima de pedido. Unos de los recursos más utilizados es ofrecer el envío gratuito.

Siendo conscientes de que a WooCommerce le queda un largo camino para convertirse en un estándar como plataforma de E-Commerce, debido precisamente a sus muchas carencias y limitaciones en su base, podemos ofrecer esta alternativa de envío gratuito no sin algún que otro «extraño» que como veremos en este artículo podremos solucionar aplicando un pequeño «parche».

Añadiendo el método de envío gratutito

Desde el «limitado» configurador de envíos de WooCommerce, supongamos que tenemos un coste fijo de 4.5€ por envío, pero queremos que cuando el carrito llegue o supere los 50€, el envío salga gratis.

Para ellos nos dirigiremos a la sección de Envío dentro de WooCommerce:

En el que podemos ver que para la zona España existe un método de envío configurado consistente en un precio fijo, sea cual sea el importe de carrito.

Vamos a añadir un nuevo método de envío para la zona de España, haciendo clic en el enlace España, y el botón Añadir método de Envío:

En la ventana modal que se abrirá seleccionamos de la lista: Envío gratuito y lo añadimos como método de envío:

Ahora editamos el nuevo método de envío, pasando el ratón por encima, aparecerá el enlace Editar:

En esta pantalla podemos seleccionar el nombre que aparecerá como Envío en el carrito de compra (por defecto Envío gratuito), y seleccionaremos la condición requerida para que el método de envío se active.

En este caso seleccionaremos «Una cantidad mínima de pedido», y en el siguiente campo el importe mínimo (50€).

Guardamos los cambios y añadimos unos cuantos artículos al carrito para ver el resultado.

Podemos fijarnos que el método de Envío gratuito aparece al cumplirse la condición de que el carrito supere los 50€, pero esta no es una «solución natural», ya que obligas al cliente a elegir el método de envío gratuito, cosa que no tiene sentido, pues ningún cliente querría seleccionar pagar por el envío. Es más, si el cliente se equivoca y elige pagar, para después descubrir que le podría haber salido gratis, seguramente recibamos una reclamación, y no queremos eso.

Lo ideal sería, que superados los 50€ en el carrito, se activase automáticamente el envío gratuito y no apareciera ninguna opción más.

Añadiendo la función al archivo de funciones del tema activo

Eso han debido pensar los desarrolladores de WooCommerce, ya que ellos mismos han lanzado una función para este problema, que de momento, en la versión 3.5.3, no está integrada en el núcleo.

En la siguiente página de la documentación oficial de WooCommerce, podréis encontrar la función según vuestra versión:

URL documentación: https://docs.woocommerce.com/document/hide-other-shipping-methods-when-free-shipping-is-available/

Para versiones de WooCommerce 3.0 en adelante, hay que incluir este código en el archivo de funciones de vuestro tema activo, o en vuestro plugin de funciones personales si lo tenéis habilitado:

/**
* Hide shipping rates when free shipping is available.
* Updated to support WooCommerce 2.6 Shipping Zones.
*
* @param array $rates Array of rates found for the package.
* @return array
*/
function my_hide_shipping_when_free_is_available( $rates ) {
$free = array();
foreach ( $rates as $rate_id => $rate ) {
if ( 'free_shipping' === $rate->method_id ) {
$free[ $rate_id ] = $rate;
break;
}
}
return ! empty( $free ) ? $free : $rates;
}
add_filter( 'woocommerce_package_rates', 'my_hide_shipping_when_free_is_available', 100 );

Y este para versiones de WooCommerce hasta la 2.5:

/**
 * woocommerce_package_rates is a 2.1+ hook
 */
add_filter( 'woocommerce_package_rates', 'hide_shipping_when_free_is_available', 10, 2 );
 
/**
 * Hide shipping rates when free shipping is available
 *
 * @param array $rates Array of rates found for the package
 * @param array $package The package array/object being shipped
 * @return array of modified rates
 */
function hide_shipping_when_free_is_available( $rates, $package ) {
  
  // Only modify rates if free_shipping is present
   if ( isset( $rates['free_shipping'] ) ) {
   
   // To unset a single rate/method, do the following. This example unsets flat_rate shipping
   unset( $rates['flat_rate'] );
   
   // To unset all methods except for free_shipping, do the following
   $free_shipping          = $rates['free_shipping'];
   $rates                  = array();
   $rates['free_shipping'] = $free_shipping;
 }
 
 return $rates;
}

En nuestro ejemplo vamos a ir a Apariencia – Editor y seleccionamos nuestro tema activo. Localizamos el archivo de funciones (functions.php) y pegamos el código al final del archivo.

Muy importante: Siempre que hagamos cambios en archivos internos del tema, hacer una copia de seguridad del archivo.

Actualizamos y antes de probar la nueva función, vaciamos la caché de WooCommerce en:

WooCommerce – Estado – Pestaña Herramientas – Borrar datos temporales

Ahora sí, nos dirigimos nuevamente al carrito y actualizamos:

Veremos cómo ahora, el envío gratuito es activado automáticamente si el importe del carrito es igual o supera los 50€, no mostrando ni permitiendo seleccionar otro método.

Espero que este tipo de «parches» y complementos se vayan incorporando o afinando en el núcleo de WooCommerce en el futuro, si queremos tener una plataforma completa de e-commerce, más que un añadido de WordPress para vender productos. Seguro que poco a poco lo vamos consiguiendo…

Si te ha gustado el artículo, no olvides compartirlo en tus redes o guardarlo en tus favoritos para futuras consultas.

Nos vemos en el siguiente post! 😉