A través de WooCommerce puedes definir diferentes costos por Zona de Envío, sin embargo en algunos casos puede ser que quieras mostrar algún mensaje con información adicional cuando el usuario selecciona una Zona de Envío particular.
Resultado Final
Al final lo que queremos lograr es mostrar un mensaje cuando se seleccione una determinada zona de envío, similar a lo que se muestra en la siguiente imagen.

Generalidades
En nuestro ejemplo tenemos creadas dos zonas, España y Países Nórdicos, más una por defecto para el resto de localizaciones, para la zona de Países Nórdicos queremos agregar un mensaje para indicar que el envío puede tardar hasta 48h.

Mensaje de acuerdo a la zona de envío seleccionada
Puedes insertar el siguiente código en el archivo functions.php de tu child-theme.
En el código anterior:
- Utilizamos los hooks de WooCommerce: woocommerce_cart_totals_after_shipping y woocommerce_review_order_after_shipping
- Estos hooks hacen referencia a la función mostrar_mensaje_zona_envio
- En la variable targeted_zones_names agregamos todos los nombres de la zonas en las cuales queremos mostrar un mensaje, en nuestro ejemplo sólo será la zona ‘Países Nórdicos’
- Con las siguientes líneas de código obtenemos el nombre de la zona seleccionada por el cliente y la guardamos en la variable current_zone_name
- En la variable $message definimos el mensaje que se mostrará
- Finalmente validamos si la zona actual es la zona en la que queremos que se muestre el mensaje, mostraremos código HTML con el mensaje
Conclusión
Como has podido ver, puedes agregar un mensaje que se muestre sólo para una zona de envío determinada en WooCommerce, puedes hacer esto de manera simple y sin usar plugins adicionales.
Se podría hacer lo mismo con un plugin que crea una tabla de envios por peso?? y que según el peso ampliase la descripccion? es decir por cada condicion dentro de la misma zona?
Hola, si usas los hooks adecuados si que podría realizarse, pero el código sería otro ya que en este código sólo se compara zonas.
¡Te felicito ! Excelente trabajo, muy buena tu aportación.
Muchas gracias.
Hola buenas, que es lo que habría que cambiar del código para que un mensaje como ese, saliera en zonas que no están configuradas?
Un saludo.
Hola, supongo que te refieres a la negación de la comparación, en este caso usa !in_array en el código, es decir agregar el signo “!”
He probado eso, pero no me funciona, porque me sale el mensaje tanto en zonas configuradas como en las no configuradas. Puede ser que afecte algun plugin instalado?
He probado a ponerle un precio fijo al envío y el mensaje solo me sale cuando la zona de envío no está configurada (que es lo que quiero), sin embargo, al usar este plugin y configurar el envío según el subtotal del carrito, eso hace que el mensaje salga siempre.
Hola Jhon, gracias por los artículos están muy buenos y han servido muy bien para no instalar plugin innecesarios.
Quisiera saber si es posible que salga un mensaje cuando seleccionan “recogida local”.
Muchas gracias!!!
En tu caso es un método de envío, no una zona, espero hacer un artículo proximamente sobre esto.
Hola Omar, he creado un artículo para mostrar un mensaje cuando se selecciona el método de envío de recogida en local o cualquier otro método de envío: https://decodecms.com/mostrar-mensaje-al-seleccionar-envio-recogida-en-local-en-woocommerce/
Hola, funciona de maravilla, solo una consulta, ¿como se puede hacer para que salgan distintos mensajes según la zona de envío?. Gracias
Hola, tendrías que adicionalmente comprobar el valor del arrray targeted_zones_names[] dentro del if, puedes usar un switch https://www.php.net/manual/es/control-structures.switch.php
Hola Jhon, y este mensaje se podría agregar para que salga en el correo de pedido que le llega al cliente ???
Sería genial!!!
saludos.
Hola, de momento no he revisado el Hook para esto, pero tomo nota para evaluar complementar o hacer otro artículo sobre eso.
Hola una pregunta, si lo quiero agregar a la página de finalizar compra que cambiaría?
Hola, el código incluye dos Hooks, uno de ellos es para la página de finalizar compra, revisa el video, casi al final se explica esto. Saludos.
Hola
Felicidades por el articulo y el código
Una consulta
Si quiero poner diferentes mensajes según las diferentes zonas, como debería hacerlo
Ejemplo:
Zona Península un mensaje como: “Su envío puede tardar entre 3 y 5 días”
Zona Canarias un mensaje como “Su envío puede tardar entre 5 y 7 días”
Zona Baleares un mensaje como “Su envío puede tardar entre 48h y 72h”
Me puedes orientar con el código?
Es combinable con la opción de método de envío recogida en local
Entre las opciones tengo Recogida Local y aquí necesitaría poner un horario
Gracias y disculpas
Hola, para lo primero que comentas simplemente sería agregar condicionales, revisa: https://decodecms.com/mostrar-mensaje-segun-zona-de-envio-en-woocommerce/#comment-4416
Para lo segundo que comentas, podrías igualmente tener condiciones de acuerdo al método de envío, revisa: https://decodecms.com/mostrar-mensaje-al-seleccionar-envio-recogida-en-local-en-woocommerce/
Saludos.
Hola Jhon
Gracias por tu respuesta
En el primer punto sólo he puesto una zona siguiendo tu tutorial
Lo de agregar condicionales , ya he revisado el articulo y no he visto nada, se me escapa de mis conocimienos , el añadir condicionales, así que las otras dos zonas no las puedo poner.
El segundo punto ya lo he realizado con exito en Recogida Local.
Gracias
Saludos
Hola! Esto es un aporte muy atractivo y funcional. Me gustaría saber por favor cómo se puede mostrar este mismo mensaje en la cabecera de wordpress. Graicas un saludo.
Hola, tendrías que probar usar otros hook, revisa: https://www.businessbloomer.com/woocommerce-visual-hook-guide-checkout-page/
Hola Jhon,
Genial como siempre!! Me gustaría sacar un mensaje que recuerde al cliente “Quedan ‘. 19,90 – (cantidad total del carrito) .’ € para que el envío sea gratis'” suponiendo que el envío mínimo sea 19,90€ en este caso por ejemplo.
Sé que hay plugins para esto pero el código creo que es sencillo y nos podríamos ahorrar un plugin. Que sea sencillo no significa que sepa hacerlo jeje, no sé en qué hook ponerlo ni PHP casi, aunque sí me orientas un poco me lanzo a hacerlo 😉
Gracias
Hola, en este caso implicaría más código, evaluaré hacer un artículo sobre esto. Saludos.
Hola, muchas gracias por tus artículos me han servido un mucho, solo me gustaría saber como puedo insertar un enlace en ese mensaje ejemplo.
Antes de comprar revisa si tenemos cobertura de despacho aquí. (y que vincule a una pagina x)
Hola, en la variable $message puedes poner cualquier texto con HTML, en el caso de un enlace revisa la etiqueta HTML anchor: https://www.w3schools.com/tags/tag_a.asp
Saludos.
muchas gracias
muchas gracias
Hola!
Justo es lo que necesito pero en mi caso lo que necesito es mostrar un mensaje para cuando alguien hace un pedido y se encuentra fuera de las zonas que tenemos configuradas. Como podría hacerlo?
Hola! eh colcoado el codigo como explicas en el video, y no me funciona. :C
Hola. Esto esta super bien… La duda que tengo como añadir este texto a los email enviados, cuando selecciono “Envio Completado”. Es posible?¿
Gracias.
Hola, tendrías que revisar los hooks de emails para WooCommerce, espero hacer un artículo sobre esto próximamente. Ref: https://avada.io/woocommerce/docs/customize-emails-using-hooks.html
Hola, hay forma en woocommerce de elegir primero la zona de envio, y en base a esa zona que aparezcan los productos que se pueden enviar a dicha zona?
Hola, en ese caso posiblemente tengas que evaluar un plugin ya que implica mucho más código, revisa por ejemplo: https://logichop.com/blog/show-woocommerce-products-based-on-geolocation/
Hola, tendras algun codigo para que muestre u oculte un metodo de envio por hora y fecha en específico.
Ejemplo: Que lo muestre de 9am a 5pm de Lunes a Sabados.
Metodo de envio : Express 90
Hola Reinaldo
Eso que comentas me parece interesante, lo evaluaré para un futuro artículo.
Saludos.