Para establecer los impuestos y poder ofrecer una estimación de los gastos de envío antes de que el cliente finalice la compra, WooCommerce hace uso de la geolocalización para conocer la ubicación del cliente.
Esta funcionalidad está habilitada por defecto, y puede generar algunas consecuencias imprevistas (lo sé bien por el número de consultas que me llegan) si cambias la opción sin saber bien lo que ello implica. Así que vamos a repasar cómo funciona la geolocalización de WooCommerce y algunas cosas a tener en cuenta con esta funcionalidad.
Tabla de contenidos
El sistema de geolocalización de WooCommerce
El cálculo de impuestos y los gastos de envío en el carrito son las dos aplicaciones fundamentales del sistema de geolocalización de WooCommerce. Si en un futuro (por fin) incluyen el soporte multidivisa en el core del plugin, también hará uso de esta funcionalidad.
No hace falta que diga en qué consiste: básicamente WooCommerce detecta desde dónde se está conectando el cliente para ofrecerle una estimación de los gastos de envío en el carrito y para decidir qué impuestos aplicar a la hora de mostrarle los precios.
Para ello hace uso del servicio gratuito de MaxMind; para los más curiosos o los perfiles más técnicos, decir que está definido en la clase WC_Geolocation.
Esta opción está habilitada por defecto (es decir, según instalas WooCommerce ya estás disfrutando de esta funcionalidad) pero puede deshabilitarse a través de los ajustes, en WooCommerce > Ajustes > General > Ubicación del cliente por defecto.
Esa opción te da las siguientes posibilidades:
- Sin ubicación por defecto
- Dirección principal del negocio
- Geolocalizar (es la selección por defecto)
- Geolocalizar (con soporte caché)
Cualquiera de las dos primeras opciones deshabilita la funcionalidad por completo, pero aún hay una última opción: la de geolocalizar con soporte caché.
La opción de geolocalización y las URL terminadas en ?v=xxxxxxxx
Supongo que es por el efecto que la palabra «caché» produce en algunos (hay quien lee «caché» y entiende «mi web irá mucho más rápido»; yo leo «caché» y entiendo «problemas») que hay quien no puede resistirse a probar a ver qué tal funciona el sistema de geolocalización con caché.
Y probar cosas está bien, aunque me temo que quienes hayan probado esto buscando rapidez se habrán llevado un buen chasco porque (sin haber hecho mediciones) la diferencia en la velocidad de carga es mínima; imperceptible diría yo. Hay muchas cosas que mejorar antes que eso.
El problema viene después. Resulta que, para habilitar el soporte caché, WooCommerce añade a la URL una variable GET, que le permite cachear los datos para diferentes localizaciones. Y claro, eso queda visible en todas y cada una de las URLs de tu web. Es decir, lo que antes era tuweb.com/tienda/ ahora pasa a ser algo como tuweb.com/tienda/?v=0af227a55hn6.
Pero claro, en principio estas cosas se tocan cuando se está configurando la web, es decir, se hacen muchos cambios en poco tiempo, y además no es evidente a priori que exista una relación entre esa variable y el sistema cacheado de geolocalización de WooCommerce.
¿El resultado? Decenas de consultas (yo recibo unas cuantas por email, pero las hay a montones en foros, grupos de Facebook, etc) preguntando algo como ¿por qué en todas las URL de mi web sale al final ?v=XXXXXXX?.
Bueno, pues si te pasa, ya sabes la causa: vuelve a dejar esa opción en Geolocalizar (a secas, sin soporte de caché ni nada), y todos contentos. 🙂
Los archivos GeoIP
Al margen de eso, cuando activas la geolocalización con soporte de caché WooCommerce descarga a tu servidor (concretamente en wp-content/uploads/) dos bases de datos, GeoLite, que relacionan IPs y lugares, una para las IPv4 y otra para las IPv6: los archivos GeoIP.dat y GeoIPv6.dat.
Estos archivos puedes encontrarlos comprimidos en formato GZIP en el servicio de MaxMind y descargarlos libremente desde aquí.
Para detectar la IP, WooCommerce utiliza varios servicios como icanhazip.com, ipify.org, ipecho.net y algunos otros.
¿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.
Usar el sistema de geolocalización de WooCommerce en nuestro provecho
Gracias a las funciones que WooCommerce implementa a través de la clase WC_Geolocation podemos hacer uso de esta funcionalidad de forma relativamente fácil: basta utilizar el método que WooCommerce ha implementado para poder geolocalizar la ubicación de un cliente:
$localizacion = WC_Geolocation::geolocate_ip();
Con ese sencillo método ya tenemos al cliente localizado, ya que nos devuelve un array con dos elementos: country, que contiene el país desde el que accede, y state, que para un cliente que accede desde Estados Unidos contendrá el estado desde el que se conecta, pero si está en cualquier otro país lo más probable es que el elemento esté vacío.
Así, siguiendo el ejemplo, $localizacion[‘country’] contendrá el código ISO 3166-1 alfa-2 del país de nuestro cliente (ES para España, MX para México, CO para Colombia, etc), lo que añadiéndole un condicional nos permite programar algunas cosas chulas en nuestra tienda, y es en lo que se basan todos o casi todos los plugins multidivisa que existen para WooCommerce.
Probando el sistema de geolocalización de WooCommerce
Cuando vendemos internacionalmente, siempre conviene comprobar que los impuestos, las divisas o los gastos de envío se están mostrando correctamente, o acabaremos teniendo inevitablemente problemas con los pedidos (que es lo que suele ocurrir cuando no comprobamos las cosas y las damos por supuestas).
Hay varios servicios que nos permiten hacer cosas así. Mi preferido es, con diferencia, SecurityKISS Tunnel, que me permite conectarme a internet eligiendo el nodo de acceso entre varios situados en Alemania, Francia, Reino Unido y Estados Unidos.
Esto me permite navegar como si accediera desde cualquiera de esos países, pero si llegar tan lejos hay otras opciones:
- GeoScreenshot, que te permite realizar una captura de la web según la ve un visitante del país que elijas
- GeoPeeker, que muestra diferentes renders del sitio obtenidas desde distintas ubicaciones
- LocaBrowser, que también realiza una captura de la web, pero permitiéndote elegir, además de la ubicación, el navegador y el tipo de dispositivo
Vicenç dice
Interesantísimo Enrique. No sabía nada de esto.
Gracias por la enseñanza.
Saludos.
Enrique J. Ros dice
A ti por tu comentario, Vicenç 🙂
Un saludo
Isaac dice
Muchas gracias por el post Enrique!
Te aseguro que aún hay mucha gente buscando en la web este molesto caso de /v??????
Recuerdo que me ayudaste a dar con esto y ahora que leo esto me causa risa y me digo «que pendejo tan solo era esto» y claro está que vas tocando y tocando sin darte cuenta. Espero que encuentren este post tan interesante todas esas personas necesitadas de este problema.
Muchas gracias por todo Enrique! Isaac
Enrique J. Ros dice
Me alegra haberte sido de ayuda en su momento 🙂
Un saludo
Carana dice
Mil Gracias Enrique solucionaste mi problema.
José Javier Caro dice
Buenos días Enrique,
Muy buen aporte, muchas gracias por todo lo que compartes, siempre me ayuda muchísimo.
Te quería hacer una consulta, a ver si está relacionado. Vendo a Europa, no tengo todos los paises activos, en ocasiones me han escrito diciendo de que no pueden añadir un producto al carrito, mi consulta es ¿puedes ser por que ese pais no está añadido a la lista de paises donde vendo?
Actualmente tengo la ubicación por defecto como ·»dirección principal del negocio» ¿es correcto?
Muchas gracias por todo,
Un abrazo
Enrique J. Ros dice
Hola José Javier
Imposible sin hacer pruebas saber si la causa es ésa o cualquier otra. Sí es correcto que establezcas la dirección del negocio como ubicación por defecto. Eso dice a WooCommerce que, si por algún motivo no puede geolocalizar al cliente, considere que se encuentra en la dirección establecida para la tienda.
Un saludo.
Santiago Valencia Guzmán dice
Hola Buenos días escribo para saber como puedo implemntar una geolocalizacion en mi checkout de woocommerce de compras es decir que cuando pongan la dirección inmediatamente me aparesa la ubicacion en un google maps. Muchas gracias espero tu pronta ayuda
Fernando dice
Gracias por el artículo, llevo dando vueltas a esto hace tiempo, porque estoy buscando la forma de que se muestren los precios con el impuesto según la zona. En mi caso, voy a vender a España (con IVA), y a Canarias, Ceuta, Melilla, Portugal, Colombia y Chile (sin IVA), y me gustaría que el usuario que todavía no se ha registrado vea los precios con el impuesto correspondiente. La geolocalización por IP es muy interesante, aunque a veces no es fiable. Además, puedo estar de viaje en otro lugar pero querer ver los precios de acuerdo con mi ubicación habitual.
¿Crees que sería posible poner un desplegable para que el usuario pueda seleccionar la zona desde donde quiere comprar?
Gracias
Enrique J. Ros dice
Hola Fernando
El carrito tiene disponible para eso la calculadora de envíos.
Un saludo
Cristobal dice
Entiendo que el usar la opcion de geolocalización (sin la opción de soporte con caché) es incompatible con usar cualquier tipo de plugin de caché como W3 Total Cache, ¿O hay alguna configuración en este para usar ambos sin penalizar la velocidad?
Enrique J. Ros dice
Hola Cristobal
No es incompatible, son cosas independientes.
Un saludo
pablo dice
hola,la geolocalización funciona en santiago de chile con sus comunas como providencia , ñuñoa , las condes ?
Enrique J. Ros dice
Hola Pablo
La geolocalización es a nivel de país.
Un saludo
leonardo dice
Estimado Enrique,
Muchas gracias por tu explicación, tengo una duda, en la versión 4.1.0 de woocommerce, no aparece el desplegable de Geolocalización, y mi cliente, quiere que lo desactive por defecto. Hay alguna forma en que se pueda hacer con alguna función de php?
Enrique J. Ros dice
Hola Leonardo
WooCommerce 4.x sí sigue incluyendo esa opción
Un saludo
Luis dice
Hola Enrique, muchas gracias por el articulo, me ha parecido muy interesante y explicativo, tanto éste como el de «WooCommerce y la geolocalización de MaxMind».
Pero aun me queda la siguiente duda, Si mi tienda esta orientada a vender solo a nivel nacional (México) y el costo de envío NO cambia en función de la ubicación, es recomendable deshabilitar esta opción?
muchas gracias por tomarte el tiempo de contestar aún las preguntas sobre tu articulo
Enrique J. Ros dice
Hola Luis
Sí, puesto que no la necesitas. Tendrías que establecer la ubicación por defecto del cliente como la misma de la tienda.
Un saludo
xavier dice
ya active la clave, y la parte en la pagina por favor como veo el resultado, donde puedo ver el archivo o como es para ver el geo localizador del cliente la direccion ?
Enrique J. Ros dice
Hola Xavier
WooCommerce utiliza la geolocalización para asignar automáticamente una zona de envío al cliente. Si quieres verificar o hacer pruebas puedes activar el depurador, en WooCommerce > Estado > Herramientas.
Un saludo
Jose dice
Hola Enrique
Esta opción de geo-localización solo sirve para ubicar a nivel de países por lo que comentas. Como puedo geolocalizar de manera especifica a la persona que me esta haciendo la compra en WooCommerce para obtener su dirección exacta (como la que se obtiene en Uber o whatsapp) y poder realizar la entrega a una dirección especifica?
Agradezco de antemano tu respuesta.
Patricio dice
Hola Enrique, espero que estés muy bien. Te agradezco mucho toda esta información.
Te haga esta pregunta, cuando el usuario ingrese al marketplace me gustaría que solo vieran los productos que están disponibles en su área, sería lo mismo que pasa cuando hacemos clic en «Ubicación» en el filtro de geolocalización pero quiero que esto sea automático. ¿podrías decirme si con el módulo de geolocalización puedo hacerlo y cómo podria hacerlo con este mismo complemento o con otro?
desde ya muchas gracias
Patricio
Enrique J. Ros dice
Hola Patricio
Eso es algo específico del marketplace y depende del plugin que uses para ello. Consulta directamente al soporte del plugin multivendor que estés usando, son los que mejor te pueden ayudar.
Un saludo
Luis Eliseo Castellano Azócar dice
Buenas noches. Es posible obtener los datos de la geolocalización desde donde se hace el pedido en la información del mismo en el Back Office?
Christian Urbina dice
Hola Enrique, sinceramente yo no necesito esta funcionalidad, porque en mi woo están fijados los precios de envíos en el modulo «Envío» y mis productos se comercializan en Chile y la tasa de impuestos es única para todo el país.
Sin embargo necesito integrar INSTASHOP y en este modulo de Integración de Woo no me deja hacer otra, porque solo aparece MaxMIND. Activé MaxMIND para ver si desaparece de ahí y me deja activar lo de INSTASHOP.
Puedes indicarme como puedo lograrlo?
Te agradezco mucho.
Cesar dice
Muy bueno, no sabia. Pregunta
Puedo usar eso para ocultar una pasarela de pagos dependiendo del pais?
Algo como:
$location = WC_Geolocation::geolocate_ip();
function mostrarPasarelaPorPais($location){
if ($location == «Argentina»){
ocultapasarela
}
}
Soy nuevo en esto de woocommcer si me das una mano agradezco.
Enrique J. Ros dice
Buenos días César
Sí, por supuesto que también se puede usar así
Un saludo
Rafael dice
Hola Enrique, super interesante y util. Gracias.
Mi pregunta es si es posible en el checkout, forzar el pais geolocaglizado y asi evitar que se asocie el pais en función de las direcciones de nvio o facturación?.
Sería posible?
Gracias, Rafael
Rafael dice
Disculpa, repito consulta por un error en mi email.
Hola Enrique, super interesante y util. Gracias.
Mi pregunta es si es posible en el checkout, forzar el pais geolocaglizado y asi evitar que se asocie el pais en función de las direcciones de nvio o facturación?.
Sería posible?
Gracias, Rafael