Aplicar envío gratis a ciertos productos en WooCommerce

De nuevo, y como ya ha ocurrido antes con otros artículos del blog, he decidido publicar esta entrada para resolver una duda que veo que se repite entre los lectores del blog y que surge de la necesidad de aplicar envío gratis a ciertos productos en WooCommerce.

No. No me estoy refiriendo a configurar el envío gratuito en WooCommerce, ese tema ya lo tratamos en su día en otro artículo.

En la página de ajustes de envíos de WooCommerce, sólo deja configurar el envío gratuito para que se aplique a partir de un gasto mínimo por pedido. Es decir, que el cliente debe hacer un pedido cuyo coste total sea igual o superior a ese mínimo establecido para que no se le cobren gastos de envío.

Pero ¿qué pasa si en nuestra tienda hay varios productos a los que no queremos aplicar gastos de envío independientemente del coste del pedido? Con los ajustes básicos de envío de WooCommerce no podrás hacerlo, necesitarás aplicar alguno de los dos métodos que te explico a continuación.

2 Técnicas para aplicar gastos de envío gratuitos con WooCommerce en determinados productos.

Como siempre suelo hacer, voy a explicar diferentes formas de hacerlo y tú eliges la que más te convenga. Eso no quiere decir que no se pueda conseguir usando otros métodos.

METODO 1 – Sin usar plugin

Este método es el menos «elegante» de los dos, pero sin duda es el más sencillo y rápido de aplicar. Además, tiene la gran ventaja de que no vas a necesitar instalar ningún plugin, ahorrando de nuevo recursos en tu hosting. (Ya sé que soy un poco pesado con este tema, pero cuantos menos plugins instalados tengas, mucho mejor. Sobre todo, si ya estás recibiendo un volumen de visitas considerable).

Este método consiste en marcar como virtuales los productos para los que no quieres cobrar los gastos de envío.

Simplemente entra en la página de edición de cada producto y en el apartado «Información del producto«, marca la opción «Virtual«.

No cobrar gastos envío producto WooCommerce

Al marcar un producto como virtual, lo que le estás diciendo a WooCommerce es que no se trata de un producto físico y como tal, no es necesario enviarlo físicamente. De esta forma, WooCommerce no mostrará ningún tipo de gasto de envío en el carrito ni en la página de pago.

Aunque tu producto realmente si sea físico y tenga unas dimensiones y un peso, lo que te interesa es que WooCommerce no le aplique gastos de envío. Punto.

De cara al proceso de compra, todo sigue igual. El cliente no notará nada.

La única particularidad, es que al interpretarlo WooCommerce como un producto virtual, no permitirá al cliente añadir una dirección de envío diferente a la de facturación en la página de pago. Para resolver esto, simplemente debes pegar el siguiente código al final del fichero functions.php de tu tema:

add_filter( 'woocommerce_cart_needs_shipping_address', '__return_true', 50 );

MÉTODO 2 – Usando el plugin WooCommerce Advanced Free Shipping

Este método se podría decir que es más óptimo en cuanto a la configuración, pero ya si requiere el uso de un plugin; el plugin WooCommerce Advanced Free Shipping.

Este plugin no sólo sirve para aplicar envíos gratuitos a determinados productos, sino que también te permite definir multitud de reglas para aplicar el envío gratuito basándase en otra información, como por ejemplo; la información del carrito (impuestos, subtotal, cantidad…), los datos del cliente (país, código postal, rol del usuario…) o incluso en los datos del producto (dimensiones, categoría, inventario…).

Para este caso, vamos a usar el plugin sólo para definir una regla que aplique el envío cuando ciertos productos estén en el carrito.

A continuación, te explico paso a paso cómo hacerlo:

  1. Una vez instalado y activado el plugin (lo puedes descargar desde el repositorio oficial de plugins de WordPress), debes ir a su panel de configuración entrando en «WooCommerce > Ajustes > Envío > Envío Gratis Avanzado».
  2. Añade una nueva regla de envío haciendo clic en «Añadir método de envío gratis«.
  3. Ahora viene la parte más importante, definir las condiciones para que se aplique el envío gratuito.
    Hay que definir una condición por cada producto. Para ello, en el primer campo selecciona la opción «Contiene producto«, en el segundo campo selecciona «Igual a» y en el tercer y último campo, elige el producto que te interese dentro del listado. A continuación, te muestro una captura de ejemplo:
    Configurar envío gratis para algunos productos WooCommerce
  4. Escribe un título descriptivo para la regla de envío que acabas de crear -por ejemplo, «Envío gratuito para determinados productos»- y haz clic en «Publicar«.
  5. Por último, vuelve a la página de configuración de «Envío Gratis Avanzado» y marca las opciones «Habilitar/Deshabilitar» y «Ocultar otros envíos«. No olvides guardar los cambios, de lo contrario no se aplicará el envío gratuito.

En el caso de que decidas usar el plugin WooCommerce Advanced Free Shipping, para evitar que se aplique envío gratis a todo el carrito cuando haya productos que si tengan gastos de envío, deberás pegar el siguiente código en el fichero functions.php de tu tema.

Una vez pegado el código anterior, entra de nuevo en la página de configuración de tu regla de envío gratuito avanzado. Y ahora en cada condición, en lugar de escoger la opción «Contiene producto«, debes escoger una nueva opción disponible llamada «Only product in cart«.

Ambos métodos funcionan perfectamente, la única diferencia es que con este segundo método, cuando se añade el producto al carrito, en los detalles del pedido (justo debajo del subtotal) se muestra el texto «Envío gratis» y con el primer método, no se muestra ningún texto referente al envío.

Envío gratuito WooCommerce para determinados productos

Obviamente, si un cliente añade al carrito otros producto por los que si cobras gastos de envío, esos gastos se sumarán al coste total del pedido.

Mi recomendación es que si vas a aplicar los gastos de envío gratuitos en WooCommerce siempre a los mismos productos, utilices el primer método. En cambio, si cada cierto tiempo vas a añadir nuevos productos a tu lista de productos sin gastos de envío, entonces usa el método 2, ya que la gestión será mucho más sencilla.

NOTA: La solución que expongo en esta entrada sólo servirá para pedidos de un mismo producto. Es decir, si en el mismo pedido se incluyen productos con gastos de envío y productos con envío gratuito, entonces esta solución no es válida porque se aplicará envío gratis a todo el carrito. Este problema se soluciona con el código snippet anterior.

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!

33 comentarios en “Aplicar envío gratis a ciertos productos en WooCommerce”

  1. Avatar

    Tengo activado el envío gratuito de forma correcta, pero al ir al pago me desaparece el método de envío contrareembolso con comisión, ya que el pedido aparece como envío gratis por superar el importe fijado.

    Como podemos hacer para que aunque el envío sea gratis si eligen envío contrareembolso se les aplique el recargo de 3,5€?

    Gracias, y un saludo

  2. Avatar

    Hola, tengo un producto concreto que no quiero que disponga de recogida en tienda-envío gratuito. Por tanto, lo que necesito es que sólo en ese producto se muestre el coste de envío a domicilio normal, y en el resto que siga tal cual lo tengo configurado.
    ¿Es posible? ¿Me podrías indicar cómo?

    Un saludo

  3. Avatar

    Hola Antonio.

    Gracias por el post.

    Te cuento que he aplicado el método 2 con el plugin con el código añadido en functions.php

    Hasta hace unas semanas funcionaba todo bien, pero ahora se me ha desconfigurado solo y no hay merara de volverlo a poner como estaba.

    Todo funciona bien excepto en el último paso, cuando elijo la opción «only product in cart» no me deja asociarla a un producto determinado. Me sale una círculo como si estuviera buscando el producto y se queda «pensando» eternamente.

    Creo que este error puede estar asociado a la última actualización o bien del plugin o bien de woocommerce y puede estar afectando a más usuarios.

    Hay alguna solución? Quizá una modificación en el código?

    Gracias de antemano.

  4. Avatar

    Tratando de hacerlo como en la primera opción al poner el código al final del fichero functions.php me aparece esto:

    Parse error: syntax error, unexpected end of file in /homepages/11/d612505656/htdocs/clickandbuilds/Almanatur/wp-content/themes/Activello-master/functions.php on line 269

    y la web ya no me funciona. Agradecería ayuda, no tengo ni idea de como solucionarlo.

    1. Avatar

      Hola Zazu,

      El mensaje de error que muestras indica que has añadido el snippet en un lugar del archivo functions.php que no es el correcto y por eso te genera el error.

      La forma más fácil de corregirlo es entrar a la carpeta de tu tema a través de FTP, abrir el archivo functions.php con un editor de código y eliminar el trozo de código que has añadido para dejar el archivo como estaba al principio. Por último, solo tienes que subir los cambios y listo.

      Otra opción es reemplazar el archivo functions.php completo por una versión anterior al día que añadiste el snippet.

      Aquí tienes un ejemplo de cómo hacerlo https://www.youtube.com/watch?v=P4yHt97Cf5I

      Insisto. El snippet funciona correctamente, pero si no se tienen conocimientos sobre el archivo functions.php, mejor delegar esa tarea en alguien experto, precisamente para evitar este tipo de situaciones desagradables.

      Espero que lo resuelvas pronto.

      Saludos!

  5. Avatar

    Muchas gracias, por tus posts.

    Me he decidido por el método del plugin, pero tiene un problema: Si añades 2 productos de envio gratis, se aplica coste al envio, ya que no cumple la norma «only product in cart».

  6. Avatar

    ¡¡Feliz año!!
    gracias por el post, me ha ayudado
    sin embargo, tengo un problema que no consigo resolver:
    – si en el carrito sólo añado productos simples – virtuales, no hay costes de envío. OK
    – si en el carrito sólo añado un producto variable para el que tengo configurada la regla que has indicado (he añadido a mi archivo funtions el código que has puesto), no me aplica costes de envío. OK
    – sin embargo si en el carrito añado productos simples – virtuales y el variable que tengo con la regla, si me aplica los costes de envío
    es decir, si no los tengo juntos en el carrito todo va bien, pero si mezclo productos (virtuales + variables con regla) me aplica el envío cuando no debería aplicarlo
    ¿podéis ayudarme?
    gracias

  7. Avatar

    Genial este pluging!

    A mi me pasa justo lo contrario a lo que propones con el snippet.
    He configurado para que todo en una categoría especifica sea envío gratis a España, pero en cuanto se le añade al carrito otro producto de otra categoría diferente desaparece el envío gratis.

    Quisiera que si se usa por ejemplo la categoría con envío gratis «X» y a la cesta se le suma otro producto de la categoría «Y» siga siendo gratis pues ya lleva «X»

      1. Avatar

        Hola Lidia!

        Creo que no puedes conseguir esa configuración con el plugin del que hablo en este post.

        Sin embargo, si que puedes hacer eso con mi plugin WooCommerce Super Shipping.

        Solo tendrías que usar las clases de envío para agrupar los productos de la categoría que quieras que tenga envío gratis y después darle una prioridad mayor que al resto de productos. De esta forma te aseguras que si en el carrito hay productos de la categoría gratis y de otras categorías, SIEMPRE se muestre la opción de envío gratis 😉

        Puedes probar la demo del plugin desde aquí

        Saludos!

  8. Avatar

    Hola Antonio,

    Es posible configurar el envío gratuito para los clientes nuevos ? solo por la primer compra?
    PROMO: ENVÍOS GRATIS EN TU PRIMER COMPRA DE 2 LB DE CAFÉ

    Gracias! excelente blog

  9. Avatar

    Buenos días Antonio,

    Mi problemilla es que tengo estipulado el envío gratis a partir de 60€ pero al existir productos virtuales (sin envío) y producto físicos (con envío) me los suma para llegar a esos 60€.
    Lo que no sé si se puede es decirle que para esos 60€ sólo tenga en cuenta los productos que son físicos.

    Un saludo y gracias por el blog, ayudas a mucha mucha gente con el.

    1. Avatar

      Hola Carlos,

      No estoy seguro, pero quizás se pueda hacer creando una regla específica para productos virtuales con el plugin del que hablo en el artículo.

      Échale un vistazo y me cuentas.

      Saludos!

  10. Avatar

    Una pregunta tonta,
    no encuentro la forma de decirle a woocommerce : si la compra es + de XX eur los gastos de envio gratis.
    ¿Donde se configuran estas reglas?

  11. Avatar

    Hola Antonio muchas gracias por tu post funciona perfectamente, lo único es que con la opción 1 sin pluging al final deshabilita la opción de pago en destino, (logico si es descargable) ¿conoces alguna forma para que sea descargable pero con la opción de pago en destino?. Muchas gracias por tu trabajo.

  12. Avatar

    GRacias por el artículo. Este blog (como ya he comentado anteriormente me sirve para mucho).

    A mi me surge lo siguiente:

    Tengo un producto que vale 22 € que tiene los gastos de envío incluidos en el precio. ¿sería posible que si alguien comprase este producto, el resto de pedido le saliera gratis?

    Un saludo

    1. Avatar

      Claro que si Juan.

      Lo puedes hacer con el 2º método que explico, creando una regla del tipo cuando el carrito «Contiene producto» igual a tu producto de 22€. De esta forma ya se aplica el gasto de envío gratis a todo el pedido.

      Un saludo!

  13. Avatar

    Antonio tengo una duda. Tengo articulos en mi tienda que el precio sobrepasa ya de por si loa gastos de envio que lo tengo limitado a 150 euros. Y ahí va la pregunta:

    Hay alguna forma para que en la pagina de productos muestre sobre de la foto una leyenda de ENVIO GRATIS. Como cuando se le aplica la opcion de nuevo que sale una etiqueta sobre la foto que dice artículo nuevo.

    He hecho una chapucilla y consiste en traducir la etiqueta new! Por ENVIO GRATIS.

    Si marco el articulo como nuevo me sale. Pero anulo la opción de articulo nuevo.

    Hay alguna forma de hacerlo??

    Gracias por tus aportes que son geniales.

  14. Avatar

    En el momento me gustaria una opcion que me permita colocar dos presios de envios uno al cual se refiera a envio normal o basico el cual tendra un pago fijo y otro que seria el nevio rapido o dia siguiente el cual tendra otro valor, al igual tambien que me permitiera seleccionar si quiero que ese envio m ellegue por cobrar. Gracias.

  15. Avatar

    Buenas tardes Antonio, llevo siguiendo tu blog hace unos meses y la verdad es que me ha servido de mucho. Muchisimas gracias por tu ayuda ^^

    MIra te voy a comentar algo que no consigo solucionar por mas que leo y seguro que es muy sencillo.

    Me estoy volviendo loco con la configuracion de los envios, pues no consigo que me muestre lo que quiero. Tan simple como poner un precio unico, segun peninsula, ceuta y melilla, etc por ejemplo hasta 5 kilos y si pasa de eso x€ por kilo, por ejemplo. Y que cuando se haga una compra, segun el codigo postal, te muestre un precio u otro pero no aparezcan el resto de opciones, nos e si me explico.

    Es que estoy haciendo compras simuladas y no acierta ningun gasto de envio y eso puede ser un problema. Que solo muestre el precio que yo le ponga, has un peso concreto y ya esta.

    Un saludo y de nuevo muchas gracias.

    1. Avatar

      Hola Jordi,

      Llevas razón.

      El plugin aplica envío gratuito a todo el carrito en el caso de que alguno de los productos tengan configurado envío gratis.

      En este caso, la solución que expongo en el artículo sólo serviría para pedidos de un mismo producto. Es decir, si en el mismo pedido se incluyen productos con gastos de envío y productos con envío gratuito, entonces esta solución no es válida.

      Tendré que buscar otras soluciones.

      Gracias por avisar.

      Saludos!

      1. Avatar

        ¡Buenas Antonio, Jordi!

        ¿Han encontrado una solución? Me gustaría usar el plugin evitar los productos en oferta y otros seleccionados, no puedan ser aplicable en envío gratuito.

        ¿Saben cómo hacerlo?

  16. Avatar

    Hola,

    yo he querido utilizar la opción de «clase de envío», para no añadir uno por uno los productos y no funciona. Bueno, a medias. Si uno de los productos tiene esa clase de envío, da igual el resto de productos, el envío es gratuito. Alguna idea?

  17. Avatar
    WordpressUpToDate

    Un gran artículo, si señor! El envío es siempre una fase complicada para la gente más novata. Pero con esto resuelves bien el tema.

    Un saludo,

    Kai

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