Configurar gastos de envío gratis en WooCommerce

Siguiendo con los tutoriales básicos de configuración de WooCommerce hoy le toca el turno a la opción de gastos de envío gratuitos. Si, has oido bien, gastos de envío gratis. Pero no me refiero a quitar los gastos de envío de todos los pedidos, sino a mostrar la opción de gastos de envío gratis en WooCommerce a partir de una cantidad de dinero gastada.

Es recomendable siempre que se pueda, activar este tipo de opción en tu tienda WooCommerce. Digo siempre que se pueda, porque dependiendo del margen de beneficio que tengas en tus productos, podrás o no costear los gastos de envío.

El usar este tipo de técnicas en una tienda online tiene 2 grandes ventajas, tanto para ti, como para el cliente:

  1. Animas a los visitantes a tu tienda online a gastar un poco más con tal de alcanzar la cantidad mínima para ahorrarse los gastos de envío. De esta forma consigues siempre sacar unas ventas extra de aquellos clientes que no tenían pensado gastar mucho.
  2. Recompensas a aquellos clientes que gastan más, costeando tú los gastos de envío. Aquí es clave que calcules bien, en base a tu margen de beneficio, a partir de que cantidad de dinero por pedido, te sale rentable costear los gastos de envío.

Cómo activar los gastos de envío gratuitos en WooCommerce para pedidos superiores a 100€

En este ejemplo te voy a mostrar cómo hacerlo para pedidos que superen los 100€ (impuestos no incluidos), pero obviamente lo que voy a explicar a continuación puedes aplicarlo a la cifra que tu quieras y a la moneda de tu país. Recuerda que si trabajas con otra moneda diferente al €, debes especificarlo en los ajustes generales de WooCommerce.

Estos serían los pasos que deberías seguir para poder habilitar está opción en tu tienda WooCommerce:

  1. Entra en «WooCommerce > Ajustes» y clica en la pestaña de «Envío«.
  2. Ahora haz clic sobre «Envío gratuito«.
  3. Una vez dentro de la página de ajustes de envío gratuito hay que configurar los campos como sigue:
    • Título del método. Es el título que se mostrará al cliente en el carrito de compra cuando esté habilitada la opción de gastos de envío gratuitos. Puedes dejar el título que viene por defecto.
    • Disponibilidad del método. Aquí tienes que definir si vas a habilitar los gastos de envío gratuitos para todos los países o sólo para algunos. Si quieres restringir esta opción sólo a tu país, simplemente elige la opción «Países específicos» y en el nuevo campo que aparece, introduce el nombre de tu país.
    • El envío gratuito requiere… En este campo hay que elegir la condición necesaria para que se le muestre el envío gratuito al cliente que está haciendo el pedido. En este ejemplo voy a seleccionar la opción «Una cantidad mínima de pedido (definida a continuación)«, esta opción es la que permite activar los gastos de envío gratis a partir de la cantidad que nosotros queramos.
    • Cantidad mínima de pedido. Aquí se define la cantidad de dinero a partir de la cual no se le van a cobrar gastos de envío al cliente. En mi caso y para este ejemplo particular la cantidad mínima que voy a poner es de 100€.
  4. Por último, debes marcar la casilla «Habilitar envío gratuito» y después guardar los cambios para que este tipo de envío se muestre en la página de carrito de compra del cliente.

Con esto ya estaría configurada y habilitada la opción de gastos de envío gratuito en WooCommerce.

Ocultar otros tipos de envío en WooCommerce cuando la opción de ENVÍO GRATUITO está disponible.

Existe un problema muy común que surge cuando trabajas con varios tipos de gastos de envío y habilitas la opción de gasto de envío gratuito. En estos casos, cuando el pedido supera la cifra mínima para evitar pagar gastos de envío, la página del carrito de compra muestra una lista con todos los tipos de envíos disponibles, ¡incluido el envío gratuito! Lo curioso es que WooCommerce obliga al cliente a seleccionar que tipo de envío quiere y claro, esto no tiene mucho sentido cuando das a elegir la opción de envío gratuito, obviamente ningún cliente quiere pagar gastos de envío. Puedes ver un ejemplo de lo que hablo en esta imagen:

Problema gastos de envío gratis en WooCommerce

 

Para evitar que esto ocurra existe una solución recomendada por WooCommerce, que oculta el resto de tipos de envío y sólo muestra el envío gratuito cuando se supera el pedido mínimo, así evitas que el cliente tenga que marcar ninguna opción. Esta solución consiste en incluir un pequeño fragmento de código en el fichero functions.php de la plantilla que estés usando en tu tienda WooCommerce. Por tanto, lo que tienes que hacer es:

  1. Desde tu panel de administración de WordPress ir «Apariencia > Editor«.
  2. A la derecha del editor, en la sección «Plantillas» haz clic en «Funciones del tema» o «functions.php«.
  3. Pega el siguiente fragmento de código al final del archivo functions.php.
    • Para WC < 2.5.x
    • Para WC 2.6 y superiores – IMPORTANTE: Copiar todo el código EXCEPTO la primera línea donde pone <?php
  4. NO HAY QUE APLICAR ESTE PASO. En el código anterior, debes sustituir donde aparece «local_delivery«, por el ID del método de envío que tú tengas activo. Para saber qué ID debes poner, tienes que ir a la página de configuración de envíos en WooCommerce y al final del todo, en la sección «Métodos de envío» copiar el ID del método que tengas activado.
    Mostrar sólo envío gratis WooCommerce
  5. Por último, en la página principal de «Envío«, asegúrate de tener marcada la opción «Mostrar métodos de envío con botones redondos» y después haz clic en «Guardar cambios«.

Cuando hayas hecho esto, vuelve a cargar la página del «Carrito» y si todo ha ido bien, verás como ya no se muestra el listado de antes, ahora sólo se muestra la opción de «Envío gratuito» siempre y cuando se haya superado el pedido mínimo. Aquí te muestro una captura de cómo debería quedar.

Mostrar envío gratuito en WooCommerce a partir pedido mínimo

En definitiva, siempre que tu margen de beneficio te lo permita, es recomendable activar la opción de gastos de envío gratis en WooCommerce a partir de un pedido mínimo. Además con este sencillo truco que te acabo de mostrar ya no tendrás el problema de la lista de métodos de envío, así que ya no tienes excusa 😉

Webinar en DIRECTO

Aprende a crear una tienda online profesional con WooCommerce

Miércoles 25 de septiembre a las 19:30 hora de Madrid

00
Months
00
Days
00
Hours
00
Minutes
00
Seconds

¡Genial! Ya casi estás

IMPORTANTE: Para asegurarte tu plaza en el webinar, sigue los siguiente pasos

PASO 1

En unos minutos recibirás un email con el asunto: [IMPORTANTE] Confirma AHORA tu plaza para el webinar

PASO 2

NOTA: Si no lo has recibido, mira en tu bandeja de SPAM por si acaso.

Abre el email y haz clic en el botón verde.

Una vez hecho eso, tu plaza quedará automáticamente reservada. ¡Así de fácil!

118 comentarios en “Configurar gastos de envío gratis en WooCommerce”

  1. Avatar

    Hola! A mi no me muestra que el envío es gratuito a partir de x dinero, a pesar de habilitar la opción. ¿Alguna idea de por qué no se muestra al finalizar la comprar? Muchas gracias y genial web!

  2. Avatar

    Hola Antonio, muchas gracias por tu post!

    Estoy intentando configurar envío gratuito en la próxima compra para los clientes que me han comprado esta pasada navidad.
    He creado un código promocional y he seguido todos los pasos pero no consigo que funcione.

    En mi tienda online, suelo cobrar gastos de envío y los cobro en función del peso del pedido. Al haber configurado el código promocional, cuando hago una prueba de compra en la web, me aparece la opción de envío gratuito pero sigue cobrandose el envío.

    No se como solucionarlo, si pudieras darme algún consejo sería genial!

    Gracias!

    1. Avatar

      Hola Marta!

      Si has configurado el cupón de descuento para que se aplique envío gratuito, necesitarás crear un método de envío gratuito y decirle que se active cuando se aplique el cupón. Si lo haces de esta forma, no deberías tener problema.

      Saludos!

  3. Avatar

    Efectivamente he seteado los envíos gratuitos. Pero requiero que en la factura se muestre el precio del envío como «bonificado» o el precio tachado. Para que mi cliente pueda ver el costo del envío y el cliente pueda ver que el envío esta bonificado. Hay manera de hacer eso?

    Muchas gracias!

  4. Avatar

    Buenas,
    Muy buen articulo y me ha ayudado mucho!
    Quería saber si es posible añadir un código en cual al cliente le doy un mínimo de pedido, a ver si me explico:

    Envió Gratuita sera disponible si el pedido sea superior a 150€ y por lo menos tres artículos en el carro. NO solo con uno en el carro. Por que tengo unos productos que suben más de 150€ y claro si eligen solo un producto les sale gratis.

  5. Avatar

    Muchas gracias por tu gran ayuda, estaba desesperado con el tema de la configuración del envío gratuito.
    Si aguna vez necesitas consultar cualquier tema relacionado con la visión, terapia visual, gafas, lentes de contacto, etc, me tienes a tu disposición.
    Gracias de nuevo.

  6. Avatar

    Hola:
    Tengo una duda. Me gustaría saber como activar esta acción de envío gratuito pero después de aplicar los descuentos. Me explico, si tengo envío gratuito a partir de 100€, pero hay una oferta 2×1, y el cliente compra dos productos de 70€, me calcula envío gratuito porque el pedido sube a 140€, aunque el pago que el cliente hace es de 70€
    Existe forma de configurar el envío gratuito sobre el coste del pedido después de realizados los descuentos?

  7. Avatar

    Buenas Antonio, lo primero darte la enhorabuena por ty blog y la gran informacuón que das.
    Utilizo WC 3.2.6 y WP 4.9.2. Tenia el problema de que aparecia siempre los gastos de envío gratuitos (su condicion es a partir de 2 articulos) y los gastos normales. El problema que tenia es que al comprar 1 producto, siempre mostraba el envio fijo y el envio gratuito, he aplicado el código de más abajo, pero lo que ocurre es que ahora solo muestra el envio gratuito, se cumpla o no la condicion. Como puedo solventarlo? No es el código correcto? En resumen necesito que siempre esté oculta la opción gratuita y solo se muestre cuando se cumpla la condición:

    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 );

  8. Avatar

    Hola Antonio

    A mi no me funciona. No se si es un tutoría muy antiguo y tengo el ultimo wordpress y woocommerce y no funciona

    Cuando hago lo que me dices se activa siempre el gratuito haya pedido mínimo o no, que es lo que me falta hacer?

    Gracias!

  9. Avatar

    Hola, Antonio
    Felicidades por tu blog.
    He visto en los comentarios que te planteaban un problema relacionado con la «recogida en tienda», pero la respuesta que les dabas no funciona actualmente. Yo quiero que cuando el cliente supere la cantidad mínima para aplicársele el envío gratis desaparezca en efecto los gastos de envío, pero permanezca como opcional la «Recogida en tienda». ¿Es necesario un código distinto para ello? Me he fijado que ahora los Métodos de envío que se crean en las zonas de envío tienen asignada una ID numérica. En el código que tú facilitabas más arriba la ID era «local_pickup». ¿Puede deberse a esto?

  10. Avatar

    Hola

    Gracias por tu post, me sirvió. Quisiera ver qué más post tienes respecto a Woocommerce. Dónde puedo ver un índice de tus artículos?

    Gracias

    1. Avatar

      Me alegra que te haya sido útil Carlos 🙂

      No hay un índice de post. Puedes usar las categorías o directamente el buscador para buscar entradas relacionadas con lo que te interese.

      Un saludo!

  11. Avatar

    Hola Antonio!

    Muchas gracias por esta ayuda, realmente funcionó en mi WordPress! Tengo una consulta: Me gustaría saber si hay alguna manera de, cuando está habilitada la opción de envío gratuito, que oculte la opción del envío con costo, pero no el resto de las opciones. Esto es porque yo ofrezco el envío a domicilio, y también que puedan pasar a recoger su pedido por el local, y con este código, al habilitarse el envío gratuito no sólo me oculta la opción del envío con costo, sino la otra opción de retiro por el local.

    Muchas gracias de antemano!
    Saludos!
    Fer.

  12. Avatar

    Buenas tardes.

    Gracias por compartir tus conocimientos! 😉

    No he visto a nadie con mi problema por aquí, así que te pregunto directamente.

    Cuando el cliente acaba de hacer su compra y se dirige a su carro de la compra aparece el subtotal más los gastos de envío, todo correcto.

    Pero a la hora de cobrar, sólo recibo el subtotal, los gastos de envío los obvia.

    ¿Tiene explicación?

    Saludos y gracias!

  13. Avatar

    Hola! muchas gracias por estos tutoriales y ayudas. Yo tengo un problema, me he leido casi todo, espero que no lo haya preguntado ya alguien. Ami me parece básico, te cuento, yo tengo vatios tipos de envio, economico, express, recogida local. Si cuando pasan de X€ de compra se activa el gratuito, yo no puedo borrar los demas, un cliente quiere recogida local, o el envio expres, pero si me interesaria borrar solo el envio economica que es el que doy gratis en este caso, o si no se puede borrar, por lo menos, que me salga seleccionado por defecto el gratis! Es posible, o si no con algun plugin? gracias!

  14. Avatar

    Hola Antonio, te sigo desde hace un tiempo me ha sido sumamente útil todo tu site para ir implementando mi primer Woocoomerce. Tengo una consulta de algo que no he logrado hacer, y es que al ir al checkout de una compra es posible detectar automáticamente si paso o no por el tope de dinero para el envio gratuito? y de ser así ofrecerselo en caso de que no lo haya hecho aún?, se logra a través de algun snippet o plugin?, mil gracias desde ya por tu respuesta. Con un abrazo!

  15. Avatar

    Hola

    Un tema aparte, quisiera saber cómo modificar las regiones de woocommerce, ya que necesito que en vez de departamentos (Lima, Amazinas, …) , se cambie por distritos (lince, miraflores….).
    Gracias de antemano

  16. Avatar

    Hola Antonio. Gracias por tu respuesta, pero no me vale, ya que lo tenía tal y como comentas. Creo que no me he explicado bien, así que te vuelvo explicar mi problema.

    El problema está en que primero comprueba si un pedido supera la «cantidad mínima de pedido para envío gratuito» y entonces me permite la opción de «Envío gratis», luego se aplica el cupón y el pedido pasa a valer menos que la «cantidad mínima de pedido para envío gratuito», pero como lo realiza en ese orden, la opción de «Envío gratis» sigue apareciendo. Si consiguiese invertir el orden en el que se realizan las comprobaciones o si hubiera algún plugin de cupones o de envíos con múltiples condicionales quizás podría solucionarlo.

    He visto que tienes un plugin de envíos de Woocomerce llamado «Super Shipping» y me preguntaba si con ese plugin podría solucionar este problema? Realmente si consigo comprobar si tiene cupon y si el pedido>=precio-de-portes-gratis+precio-del-descuento-aplicado y si se cumplen las dos condiciones que me haga el envío gratuito y en caso de que no haya cupon que solo me haga la comprobación de «cantidad mínima de pedido para envío gratuito».

    La verdad es que me lleva de cabeza este tema y no encuentro una solución que se adapte a mis necesidades, ni siquiera el soporte de Woocomerce me la da, que me sugerió una chapuza que ni iba, jeje.

    Ya me comentas Antonio. Gracias por tu tiempo.

    Saludos.

  17. Avatar

    Hola Antonio. Primero de todo te queríua agradecer este gran aporte, aunque no es exactamente lo que buscaba, me va a resultar muy útil.

    El problema que yo tengo es el siguiente. Cuando un cliente añade un producto al carrito y llega al tope marcado para gastos de envío gratis (que es de 60€), si después aplica un código promocional en el producto y el coste es inferior a los 60€, se le siguen aplicando los portes gratis. ¿Sabes a que puede ser debido o como puede solucionar este problema?

    Gracias. Saludos.

    1. Avatar

      Hola Alex,

      Asegúrate de no tener marcada la opción «Permitir en envío gratuito» en la configuración del cupón. Además, en la configuración del envío gratuito deberías haber seleccionado la opción «Una cantidad mínima de pedido» en el campo «El envío gratuito requiere…».

      Saludos!

  18. Avatar

    Antonio, muchísimas gracias por este blog tan maravilloso, en lo personal me ha resuelto muchas dudas. Te escribo desde la Ciudad de México.

    Un abrazo y de verdad es maravilloso contar con personas como tú, que comparten su conocimiento.

  19. Avatar

    Buenas tardes, a ver si me puedes ayudar…estoy configurando mi tienda online y, aunque yo sólo voy a vender a españa voy a ofertar dos modos diferentes de envío: el envío ordinario que será gratuito y el envío certificado que tendrá un sobrecoste de 3 euros…¿cómo puedo configurar esto para que cuando el cliente acceda al carro de compra pueda elegir el método de envío que prefiera?muchas gracias

    1. Avatar

      Hola Margarita,

      Eso lo puedes configurar con la opción de tasas extra de mi plugin WooCommerce Super Shipping.

      Puedes echar un vistazo a la documentación y probar la demo aquí.

      Un saludo!

  20. Avatar

    Hola Antonio,
    Fue solo un desespero momentáneo, ya lo solucioné con la copia de seguridad, gracias!
    Me podrías ayudar a quitar los botones que aparecen en envío, en el carrito?
    El problema es que en el carrito me aparecen varios botones de opciones, y el cliente puede elegir la que quiera (una que sea inferior al valor de envío real).
    Doy un ejemplo de un envío a Italia.
    Tengo fijado el “precio único de 8€ para compras inferiores a 100€”, y el “envío gratuito para compras superiores a 100€!
    Si el carrito sobrepasa los 100€, me aparecen los botones
    *Precio único: 8,00€
    *Envío gratuito
    *Envíos: 5,00€ (que es el precio de envío a España, inferiores a 50€)
    En ese caso, a pesar de quedar feo, al aparecer las 3 opciones, el cliente elegirá la correcta “envío gratuito”.
    Pero, si la compra es inferior a 100€, me aparecen 2 botones
    *Precio único: 8,00€
    *Envíos: 5,00€ (que es el precio de envío a España, inferiores a 50€)
    Y la persona, seguramente, elegirá el envío más barato, que es el referente a España, y no a Italia.
    Hay algún Plugin para quitar esos batines y aparecer solo el envío correcto?
    Muchas gracias,Renata.

    1. Avatar

      Hola Renata,

      Seguramente hayas copiado mal el código, ya que me he molestado en probar ambos y funcionaban perfectamente.

      Si has usado el 2º código, deberías de haberlo copiado todo excepto la primera línea :-/

      Ahora si no puedes acceder al panel de admin, no te queda más remedio que conectarte a tu web a través de un cliente FTP y eliminar el código que has copiado mal en el function.php

      Espero que lo soluciones pronto.

      Siento no poder hacer más 🙁

      Un saludo.

      1. Avatar

        Hola Antonio,

        Fue solo un desespero momentáneo, ya lo solucioné con la copia de seguridad, gracias!

        Me podrías ayudar a quitar los botones que aparecen en envío, en el carrito?
        El problema es que en el carrito me aparecen varios botones de opciones, y el cliente puede elegir la que quiera (una que sea inferior al valor de envío real).

        Doy un ejemplo de un envío a Italia.
        Tengo fijado el «precio único de 8€ para compras inferiores a 100€», y el «envío gratuito para compras superiores a 100€!

        Si el carrito sobrepasa los 100€, me aparecen los botones
        *Precio único: 8,00€
        *Envío gratuito
        *Envíos: 5,00€ (que es el precio de envío a España, inferiores a 50€)

        En ese caso, a pesar de quedar feo, al aparecer las 3 opciones, el cliente elegirá la correcta «envío gratuito».

        Pero, si la compra es inferior a 100€, me aparecen 2 botones
        *Precio único: 8,00€
        *Envíos: 5,00€ (que es el precio de envío a España, inferiores a 50€)

        Y la persona, seguramente, elegirá el envío más barato, que es el referente a España, y no a Italia.

        Hay algún Plugin para quitar esos batines y aparecer solo el envío correcto?

        Muchas gracias,Renata.

    2. Avatar

      Efectivamente el código exacto que hay que pegar en el functions.php de tu tema es sin esa primera línea » $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 );

  21. Avatar

    Hola Antonio,

    Mil gracias por el post, he actualizado woocommerce de la versión 2.5 a la 2.6 y todo lo que tenia configurado se me ha ido al traste jejeje…

    El problema que tengo es que en el último punto, el 5, mencionas:

    en la página principal de “Envío“, asegúrate de tener marcada la opción “Mostrar métodos de envío con botones redondos” y después haz clic en “Guardar cambios“.

    Yo estoy buscando en la pagina principal de envíos la opción “Mostrar métodos de envío con botones redondos” y no me aparece por ningún lado ¿?

    Gracias por adelantado.

  22. Avatar

    Buenas tardes Antonio,

    tengo instalado el WP 4.5.3 y el WC 2.6.2. He copiado el código en el fichero functions.php de mi tema («Bridge») pero me siguen apareciendo las dos opciones, una que es Tipo único y la otra que es Envío gratuito a pesar de que la compra es superior a lo establecido para los envíos gratuitos. En mi plugin de WC veo que los envíos gratuitos los puedo definir, dentro de la pestaña «Envíos», en de las «Zonas de Envío», como «Método de Envío», o dentro de la pestaña «Envío gratuito (heredado)». Dónde tengo que definir el envío gratuito??

    1. Avatar

      Hola Elías,

      Deberías de definirlo dentro de una zona de envío.

      Asegúrate de haber copiado el código para la versión 2.6 de WooCommerce.

      Saludos!

  23. Avatar

    Buenas tardes Antonio, a mi tampoco me funciona… me devuelve error la página y tengo que restaurar el archivo functions.php mediante FTP.

    ¿A alguien le ha funcionado el código con WooCommerce 2.6.1?

    1. Avatar

      Hola Javier,

      Si has usado el código para la versión 2.6 de WooCommerce, asegúrate de NO copiar la primera línea del código donde pone «

  24. Avatar

    Muy bueno el tutorial… Tenemos una tienda online y nos ha venido muy bien por que como bien pones no queda bien mostrar los gastos de envío cuando el envío es gratuito. Buen artículo y buena web, me suscribo

  25. Avatar

    He colocado el código tal como lo dices y no me funciona. Y también con la nueva actualización de Woocommerce no hay la opción de cambiar a botones redondos o desplegable, y si lo hay, no lo encuentro.

    1. Avatar

      // Oculta otros tipos de envío cuando el envío gratuito está disponible
      function ocultar_otros_envios( $rates, $package ) {
      if ( isset( $rates[‘free_shipping:6’] ) ) {

      // Deshabilita todos los métodos de envío activos, excepto el envío gratuito.
      $free_shipping = $rates[‘free_shipping:6’];
      $rates = array();
      $rates[‘free_shipping:6’] = $free_shipping;
      }

      return $rates;
      }

      Hola, esto me ha solucionado el problema. He cambiado ‘free_shipping’ por ‘free_shipping:6’

  26. Avatar

    Hola muy bueno el articulo, una consulta yo quiero poner en los articulos un cartel que diga envio gratis, pero lo quiero en algunos no en todos los articulos, Saludos

  27. Avatar

    Muy buenas Antonio! tengo un problema con el envío gratuito y es que este queda invalidado en el momento que se utiliza un cupón de descuento. ¿Tienes alguna noticia de esto o soy un bicho raro?. Gracias por adelantado , una vez mas es un placer utilizar tu plataforma ;).

      1. Avatar

        Gracias! por ultimo y si es posible, ¿alguien sabría cambiar el texto que aparece cuando el cupón es aplicado ?, aparece: «cupón para envío gratis» y puede dar lugar a confusiones ya que solo es un cupón de descuento. Mil gracias por adelantado. 😉

  28. Avatar

    Antonio eres un crack, te adminro mucho y me encanta tu blog que consulto muy a menudo. Antes de nada, gracias por tu trabajo.

    Mi pregunta:
    En la opción «Local Pickup» o recogida local, ¿se podría desactivar la opción de rellenar todos los campos de envío? ya que no tiene sentido que rellene estos campos porque lo recogerá en nuestra tienda o evento de triatlón.

  29. Avatar

    Hola Antonio, he aplicado el código que propusiste para mostrar solamente envío gratuito y recogida en tienda en caso de estar disponible el envío gratuito y solamente me muestra el envío gratuito, pero no la opción de recogida en tienda (y está activada en ajustes-envío-recogida local).

    add_filter( ‘woocommerce_package_rates’, ‘ocultar_otros_envios’, 10, 2 );

    // Oculta otros tipos de envío cuando el envío gratuito está disponible
    function ocultar_otros_envios( $rates, $package ) {
    if ( isset( $rates[‘free_shipping’] ) ) {

    // Deshabilita todos los métodos de envío activos, excepto el envío gratuito y recogida local.
    $free_shipping = $rates[‘free_shipping’];
    $local_pickup = $rates[‘local_pickup’];
    $rates = array();
    $rates[‘free_shipping’] = $free_shipping;
    $rates[‘local_pickup’] = $local_pickup;
    }

    return $rates;
    }

    1. Avatar

      Hola Premine,

      El código que has compartido parece que está bien, siempre y cuando tengas el método de recogido local activado debería funcionar.

      Revísalo y vuelve a probar.

      Un saludo!

  30. Avatar

    Buenos días te hago esta pregunta, como puedo hacer para que el gasto de envió único, solo se ejecute si el valor total de la compra no supere un monto mínimo.

    Digamos en pesos argentinos: compra minima $500 y si compro algo de $350 entonces ahi se incrementa con un valor por el despacho del paquete (pago del cadete, a terminal).

    Espero se entienda, gracias

  31. Avatar

    Hola. Nosotros tenemos dos tipos de cliente. Cliente detall y cliente mayor. Para el cliente detall el envio es gratis a partir de 60€ y para el cliente mayor a partir de 300€
    Se puede configurar?

    Muchas gracias!!!

  32. Avatar

    Muchas gracias por tus explicaciones Antonio, siempre me son de gran ayuda.
    Hace mucho tiempo que apliqué este tutorial a mi tienda en woocommerce; pero ahora me surge una pequqeña duda…. sabes si existe algún plugin o alguna opción para que aparezca en la cesta de la compra el importe que falta por comprar al cliente para llegar al envio gratuito? por ejmplo….si el envio gratutito es a partir de 60 euros, algo que indique…»te faltan 45,90 euros para envio gratuito»
    O algo así, no se si me explico bien :S

    Muchas gracias por todo

    Laura

  33. Avatar

    Buenas tardes:

    Nos ha sido de gran ayuda este post, bueno este y la mayoría de WOODEMIA, felicidades, pero tenemos un pequeño problema con este truco, y es que tenemos una opción de entrega en mano que aunque el pedido supere los 90 € habrá clientes locales o que vayan a venir a visitarnos que seguirán prefiriendo la entrega en mano.

    Modificamos el funtions.php tal y como indicais, y correctamente al superar los 90 € desaparecen todos los gastos de envío y solo queda el envío gratuito, pero nosotros queremos que también quede el entrega en mano que lo tenemos bajo el ID = local_pickup

    ¿Como podemos hacerlo?

    Gracias de antemano.

    1. Avatar

      Hola Juan Antonio,

      Prueba con este código 🙂

      
      add_filter( 'woocommerce_package_rates', 'ocultar_otros_envios', 10, 2 );
      
      // Oculta otros tipos de envío cuando el envío gratuito está disponible
      function ocultar_otros_envios( $rates, $package ) {
          if ( isset( $rates['free_shipping'] ) ) {
      
              // Deshabilita todos los métodos de envío activos, excepto el envío gratuito y recogida local.
        	$free_shipping          = $rates['free_shipping'];
              $local_pickup           = $rates['local_pickup'];
        	$rates                  = array();
        	$rates['free_shipping'] = $free_shipping;
              $rates['local_pickup']  = $local_pickup;
          }
          
          return $rates;
      }
      
      

      Espero que te sirva.

      Un saludo!

      1. Avatar

        Buenas noches. Artículo estupendo y muy útil. Este es mi caso concreto. Quiero hacer desaparecer la opción de pago cuando aparezca la gratuita pero conservando siempre la recogida en local.

        El problema esta en esta línea:
        if ( isset( $rates[‘free_shipping’] ) )

        Nunca se cumple la condición. Ni en el caso de tener un free_shipping. ¿Sabes por que puede ser?

        Gracias de antemano.

  34. Avatar

    Hola Antonio,

    Me suscribí recientemente a tu blog y quiero agradecerte por todos los artículos que has publicado. Gracias por compartir con todos tus suscriptores tus conocimientos y experiencia con WordPress y Woocommerce.

    Tengo una duda que espero puedas ayudarme a aclarar. En mi página web todos los envíos serán gratis con la condición de que los usuarios deberán consumir un mínimo de 500 pesos, ningún usuario podrá colocar una orden si el monto del pedido no iguala o supera los $500.

    1. Cuando entro al carrito de compras antes de confirmar el pedido, en la parte de envío sale el siguiente mensaje «no hay métodos de envío disponibles. por favor revisa tu dirección o contáctanos si necesitas ayuda.» Esto lo presenta a pesar de que me aseguré que la opción de envío gratuito está habilitada.

    2. Cuando hago click sobre Realizar e pedido el problema que tengo es que si el pedido es de $480 por ejemplo, Woocommerce presenta el mensaje que dice «Método de envío no válido.» en lugar de indicarle al cliente que el monto del pedido debe ser mayor o igual a $500.

    Quisiera que me ayudaras en cómo puedo cambiar ese mensaje «Método de envío no válido.» por un mensaje personalizado que le indique al cliente que debe alcanzar el monto mínimo requerido para poder realizar su pedido.

    Muchas gracias de antemano por tu respuesta.

    Saludos,
    Juan Antonio

  35. Avatar

    Hola, antes que nada muchas gracias por todos los tutoriales que tienes porque lo explicas todo con mucha claridad.

    Yo quería preguntarte si es posible en woocommerce excluir del envío gratuito a una categoría de productos.

    Gracias de antemano, saludos.

      1. Avatar

        Muchas gracias Antonio,

        Muy interesante el artículo, lo del tipo de producto virtual ya lo había leído pero no se ajusta a mis necesidades, por lo tanto probaré el plugin y ya te contaré que tal me funciona.

        Saludos

  36. Avatar

    Excelente aporte Antonio.
    Solo que se me ocurre que también debería estar activo la opción de recogida local ademas del envío gratis Así el cliente que vive cerca de el local comercial ahora tiempo en venir a recoger el producto.
    Como seria el código para que aparezca envío gratis y recogida local.

  37. Avatar

    Hola buenas, quería saber si es posible configurar esto?

    La tienda se encuentra en las Islas Canarias y queremos que entre islas canarias los envíos seán gratis a partir d 100 euros.

    En peninsula y baleares se les aplicará un 50% d descuento al transporte a partir d 100 euros d compra.

    He utilizado el plugin que desarrollaste de Woo Weight Shipping, pero aún así creo que lo que pretendo no va a ser posible.

    Si no lo fuera, conoces algún plugin que me ayude??

    Muchas gracias por el trabajo que haces!

    1. Avatar

      Hola Francisco,

      Para esa configuración de envíos, necesitarías usar varios plugins o en el peor de los casos, desarrollar un plugin a medida.

      Ten en cuenta que vas a trabajar con 2 métodos de envío diferentes y cada uno con sus condiciones particulares.

      Se puede hacer perfectamente, pero no es una cosa que te pueda explicar fácilmente en un comentario.

      Saludos!

  38. Avatar

    Hola que tal

    Enhorabuena por tu blog,

    Una cosa podriamos aplicar envio gratis a ciertos productos aunque no lleve al pedido minimo?? Para por ejemplo no llegar a 100 euros envio gratis con un producto que tiene margen y que vale 50 pero que se envie gratis sin coste

    Gracias!

    1. Avatar

      Hola Paco,

      Si se podría, pero necesitaría hacerlo con un plugin o usando algún código snippet.

      Es una pregunta que ya me han hecho varios lectores, así que esta semana publicaré un post explicando cómo hacerlo.

      Estate atento! 😉

      Saludos!

  39. Avatar

    Muchas gracias, me ha ido perfecto ya que no me gustaba que diera opción de elegir otras opciones de envío cuando realmente era gratuito.

    Una consulta. Necesito establecer cuatro tipos de envío.
    ESPAÑA
    Ceuta-Melilla-canarias- Baleares- Andorra
    COMUNIDAD EUROPEA
    RESTO PAISES

    Supongo que no puedo hacerlo directamente, verdad?, algún plugin recomendado?

    Saludos y muchas gracias por la ayuda que prestas en el blog.

  40. Avatar

    Buenos días, lo primero gracias por la ayuda que ofreces a través de tu site, es estupenda.

    Tengo problemas con lo que nos propones respecto a incluir un pequeño fragmento de código en el fichero functions.php. Primeramente no he encontrado este fichero en mi web por ninguna parte, uso el tema customizer y se me ha ocurrido hacer esta implementación a través del propio servidor donde ahí si he encontrado el fichero. Me lo he descargado, he hecho una copia del mismo por si luego me daba problemas dejarlo igual que como estaba y he añadido el fragmento de código que nos pasas, lo he subido al servidor y he vuelto a la web a ver si ya funcionaba, también he hecho el cambio que indicas de los botones redondos, en vez de desplegable, pero…. no me ha funcionado.

    Tienes idea que estoy haciendo mal? muchas gracias, espero tu respuesta.

    1. Avatar

      Hola María,

      Si no te muestra ningún mensaje de error y no ves ningún cambio después de pegar el código, entonces lo más probable es que se deba a la caché del navegador.

      Borra la caché del navegador y vuelve a hacer un pedido de prueba.

      Te aseguro que el código funciona con la última versión de WooCommerce 2.3.5

      Saludos!

  41. Avatar

    Estimado, hay alguna manera de que el usuario pueda seleccionar a que sucursal desea que le enviemos su pedido a partir de un menu desplegable que liste las sucursales habilitadas.

    Gracias

    1. Avatar

      Hola Federico,

      Se puede hacer de todo con WooCommerce usando extensiones o si para tu caso concreto no hay una extensión que cumpla con tus requisitos, entonces tendrás que desarrollar la funcionalidad usando la API de WooCommerce.

      Saludos!

  42. Avatar

    Gracias por tus tutoriales ¡ayudan muchísimo!
    Tratando de poner los gastos de envío gratis a partir de 100€ , al pegar el código en functions.php me lanza este error: Fatal error: Cannot redeclare ocultar_otros_envios() (previously declared in /home/platzmyp/public_html/wp-content/themes/bazar-child/functions.php:18) in /home/platzmyp/public_html/wp-content/themes/bazar/functions.php on line 34

    ¿que puede haber salido mal?

    Gracias!

      1. Avatar

        Hola Ana,

        El error que te muestra básicamente te está indicando que has pegado el código 2 veces; una primera vez en el archivo functions.php de tu plantilla Bazar y después lo has vuelto a pegar una segunda vez en tu plantilla hija Bazar Child.

        Simplemente borra el código en uno de los dos archivos functions.php y vuelve a cargar la página.

        Espero que te funcione.

        Un saludo.

  43. Avatar

    Hola

    Estoy creando la web http://www.vinocoleccion.com, el problema se me presenta en los gastos de envío, me explico.

    .- Poner coste adicional de «seguro de envío» a un grupo de botellas.
    .- Quiero añadir «envío gratuito a partir de 6 botellas o a partir de 60€ de gasto (lo que pasa es que hay botellas que pasan este precio, a las cuales no tiene que aparecer el envío gratuito)
    .- Que aparezca opción de embalaje.

    No sé si esto es posible.

    Espero que me podáis ayudar.
    Gracias.

    1. Avatar

      Hola Alberto,

      Para el seguro de envío yo usaría los tipos de envío. Puedes ver más aquí.

      La configuración de envío gratuito en WooCommerce sólo permite configurar una cantidad mínima de gasto, pero no de productos. Y tampoco te permite excluir determinadas botellas. Para estas funcionalidades yo diría que necesitas un desarrollo a medida.

      Para la opción de embalaje conozco 2 plugins, depende de lo que busques, te convendrá uno u otro:

      1. WooCommerce Gift Wrap Order (soy afiliado,¡gracias!). Permite al cliente elegir entre varias opciones de embalaje para todo el pedido en la página del carrito.

      2. WooCommerce Products Gift Wrap. Añade la opción de elegir envuelto para regalo en la página de cada producto, pero no para todo el pedido.

      Espero que te sirva.

      Saludos!

  44. Avatar

    Hola Antonio,

    Muchísimas gracias por la respuesta. Me ha funcionado a la primera! Ha sido un placer poder contar con tu ayuda.

    Mucha suerte con el blog!

    Saludos,

    Guillem

  45. Avatar

    Antes de nada muchas gracias por todos los tutoriales. Son fantásticos y estoy aprendiendo mucho! 🙂

    Una consulta, cuando dices que tengo que cambiar el “local_delivery“ en el código según el ID que tengamos… el problema es que no encuentro en el código que has puesto de ejemplo el código “local_delivery“….

    Me podrías ayudar?

    Muchas gracias y un buen trabajo!

  46. Avatar

    Hola Antonio, primero de todo felicitarte por tu blog y todos los artículos que has escrito. Son muy interesantes! Te quería plantear una duda a ver si me puedes ayudar. Necesito excluir para un tipo de producto, la recogida local, sabes como se puede hacer o si existe algún plugin para poderlo hacer? Tengo instalado el plugin «WooCommerce – APG Weight and Postcode/State/Country Shipping» para administrar los distintos tipos de envío.

    Muchas gracias por adelantado!

    1. Avatar

      Hola Guillem,

      Lo puedes hacer pegando el siguiente código snippet en el fichero functions.php de tu tema:

      
      // Oculta la opción de envío local para un determinado producto
      
      add_filter( 'woocommerce_package_rates', 'disable_local_pick_up_based_on_product', 10, 2 );
      
      function disable_local_pick_up_based_on_product( $rates, $package ){
      	global $woocommerce;
      	
      	// Array de los ID de producto para los que deseas deshabilitar la recogida local
      	$notLocalProducts = array( 239, 243 );	
      	
      	foreach ($woocommerce->cart->cart_contents as $key => $values ) {		
      
      		if( in_array( $values['product_id'], $notLocalProducts ) ){	
      
      			unset( $rates['local_pickup'] );
      			break;
      		}
      	}
      	
      	return $rates;
      }
      
      

      Eso si, antes de pegar el código, debes sustituir los números de la línea de código «$notLocalProducts = array( 239, 243 );» por los IDs de tus productos.

      Lo he probado y puedo asegurarte de que funciona.

      Espero que te sirva.

      Saludos!

      1. Avatar

        Que va hermano, no me funcionó 🙁

        Solo lo modifique para deshabilitar el envio con tarifa plana:

        add_filter( ‘woocommerce_package_rates’, ‘disable_flat_pick_up_based_on_product’, 10, 2 );

        function disable_local_pick_up_based_on_product( $rates, $package ){
        global $woocommerce;

        // Array de los ID de producto para los que deseas deshabilitar la recogida local
        $notLocalProducts = array( 8574, 8634 );

        foreach ($woocommerce->cart->cart_contents as $key => $values ) {

        if( in_array( $values[‘product_id’], $notLocalProducts ) ){

        unset( $rates[‘flat_rate’] );
        break;
        }
        }

        return $rates;
        }

  47. Avatar

    Hola,
    Facilitas un contenido superinteresante!!! Muchas gracias…
    Tengo una pregunta: me gustaría habilitar el envió gratuito sólo para algunos productos de mi tienda, sin necesidad de que su precio alcance el mínimo que he establecido… ¿existe alguna manera? ¿hay algún Plugin?
    ¿se puede hacer que aparezca una etiqueta de envió gratuito en la imagen del producto?
    Muchísimas gracias de antemano!!!

      1. Avatar

        Muchas gracias por tu ayuda!! Me ha ido bastante bien con el plugin que me has recomendado…
        También estoy usando tu plugin Woo Weight Shipping y funciona fenomenal!!!
        Gracias…

      2. Avatar

        Hola de nuevo Antonio,
        Tengo un pequeño problema con el envío gratuito; cuando me hacen un pedido para enviar a Canarias, Baleares, Ceuta o Melilla no me salen los números con el envío gratis… Se puede deshabilitar de alguna forma para estas regiones???

  48. Avatar

    Hola,

    Me parece muy interesante toda la información que proporcionas a través de este blog.

    Tengo un problema al configurar el envío gratis, a ver si me puedes ayudar. La cuestión es que si configuro envío gratis a partir de 100€ la opción de envío gratuito no me aparece hasta que el importe de la cesta es de 121€ o más. Creo que es un problema con los impuestos, pues por lo que veo calcula los 100€ de compra sin el IVA.

    Hasta ahí tampoco sería mucho problema, en vez de poner 100€ para envío gratuito pondría 82.65€ que con el IVA saldrían aproximadamente 100. El problema es que como la tienda también venderá en Canarias, los impuestos son distintos y por lo tanto la cantidad para conseguir envío gratuito no serían 100€.

    Me parece raro que sea tan complicado establecer una cantidad para tener envío gratuito que incluya los impuestos y así tener siempre envío gratuíto a partir de la misma cantidad, sean cuales sean los impuestos aplicados.

    Los precios de los productos de la tienda son sin impuestos y estos se calculan en función de la dirección de envío.

    Gracias por tu tiempo.

    1. Avatar

      Hola Jose,

      Para conseguir lo que quieres, necesitas entrar en «WooCommerce > Ajustes > Impuestos > Opciones de impuestos» y marcar la opción «Si, voy a introducir los precios con impuestos incluidos.«.

      El problema de esto es que debes volver a introducir todos los precios de productos, pero ahora con el impuesto incluido.

      Un saludo.

  49. Avatar

    Hola, primero gracias por el aporte
    Me surge una duda, no se puede poner esta opcion si dejas en modo automatico?
    Te comento esto por que poniendo activo algun envio, me sale error
    espero tu respuesta
    muchas gracias de antemano

  50. Avatar

    Hola!

    En primer lugar agradecerte el tutorial.

    Me aparece una duda que no logro solventar.

    Yo estoy configurando el envio «precio unico» para dos envios. En nombre pongo «Correos» y coste fijo 4€

    En Tarifas adicionales «SEUR | 1 | order»

    Ya que es un coste fijo y asi puede elegir el cliente entre correos y seur. Y aqui viene el problema. Metiendo el codigo y sustituyendo el codigo por «flat rate» me borra la opcion «correos» pero no la tarifa adicional.

    ¿Que debo hacer para que se oculte?

    Muchisimas gracias por adelantado 🙂

    1. Avatar

      Hola Álvaro,

      Acabo de probar el código y me funciona correctamente. Después he vuelto a probarlo sin el código y también funciona!

      Supongo que en la última actualización de WooCommerce han resuelto este problema y por eso a mi también me funciona sin el código. Segúramente si actualizas WooCommerce a la última versión se resuelva el problema.

      Recuerda vaciar siempre la caché del navegador cada vez que introduzcas un código en el archivo function.php

      Pruébalo y me cuentas.

      Un saludo.

      1. Avatar

        Hola Antonio!

        Gracias por responder tan rapido. Tengo la ultima version de woo y aun borrando el cache sigue ocurriendo despues de repetirlo.

        Quizas no me explique bien. El envio como tal desaparece, lo que no desaparece es la opcion nueva que añadi en tarifa adicional.

        ¿Se te ocurre otra forma de poner dos compañias de mensajeria diferente que no sea asi? :S

        Gracias por tu ayuda!

        1. Avatar

          Hola Álvaro,

          Efectivamente. He cambiado de plantilla y ahora si tengo el mismo problema que comentas. Pero ya tengo la solución :-).

          He probado el nuevo código y ahora si que funciona. De hecho, lo acabo de actualizar en el artículo.

          Copia y pega el nuevo código y me dices que tal va.

          Un saludo!

          1. Avatar

            Genial! ahora si.

            Muchisimas gracias y me alegro de que mi duda sirva para otras personas y para vosotros en un futuro 🙂

  51. Avatar

    Me respondo yo sólo al comentario anterior. Esto funciona si en ajustes del envío está marcada la opción «Mostrar métodos de envío con botones redondos».
    Si estuviera como un desplegable no funcionaría.

    1. Avatar

      Hola Alfonso,

      Efectivamente se me olvidó indicarlo en el artículo. Acabo de actualizarlo.

      Muchas gracias por la anotación Alfonso 😉

      Un saludo!

  52. Avatar

    Hola, he seguido las instrucciones y he incluido el código para ocultar envío local en mi functions.php de mi plantilla. En este caso uso la «Wootique».
    Por más que actualizo y pruebo, el envío local no desaparece.
    He puesto algún «echo» para probar que efectivamente estoy editando la plantilla correcta y sí que salen.
    ¿Alguna idea por favor?
    Muchas gracias!

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Responsable: Antonio Cantero, siendo la Finalidad; envío de mis publicaciones así como correos comerciales. La Legitimación; es gracias a tu consentimiento. Destinatarios: tus datos se encuentran alojados en mi plataforma de email marketing Active Campaign ubicada en EEUU y acogida al Privacy Shield. Podrás ejercer Tus Derechos de Acceso, Rectificación, Limitación o Suprimir tus datos en contacto@woodemia.com

Webinar en DIRECTO

Aprende a crear una tienda online profesional con WooCommerce

00
Months
00
Days
00
Hours
00
Minutes
00
Seconds

¡Apúntate GRATIS!

Miércoles 25 de septiembre 19:30 hora Madrid

¡Genial! Ya casi estás

En unos minutos recibirás un email con el asunto: [IMPORTANTE] Confirma AHORA tu plaza para el webinar

NOTA: Si no lo has recibido, mira en tu bandeja de SPAM por si acaso.

Abre el email y haz clic en el botón verde.

Una vez hecho eso, tu plaza quedará automáticamente registrada. ¡Así de fácil!

PASO 1

PASO 2

Evita los mismos ERRORES SEO que cometen el 95% de las tiendas online 

Déjame tu nombre y email para poder enviarte el acceso a la masterclass.

Responsable: Antonio Cantero, siendo la Finalidad; envío de mis publicaciones así como correos comerciales. La Legitimación; es gracias a tu consentimiento. Destinatarios: tus datos se encuentran alojados en mi plataforma de email marketing Active Campaign ubicada en EEUU y acogida al Privacy Shield. Podrás ejercer Tus Derechos de Acceso, Rectificación, Limitación o Suprimir tus datos en soporte@woodemia.com. Para más información consulta la política de privacidad

Ir arriba