Cuando se tiene una tienda online está claro que uno de los objetivos es siempre aumentar la facturación. Por ello, toda venta es siempre bienvenida. Sin embargo, en algunos casos, algunas ventas pueden suponer un engorro debido a las trabas administrativas, que generalmente no compensan el margen que producen.
Hablo de los envíos a Canarias, Ceuta y Melilla, claro está. Su régimen fiscal distinto, los desorbitados costes de envío (en caso de empresas que no tengan un gran volumen de ventas que permita una tarifa ventajosa) y los trámites aduaneros provocan que más de un comercio prefiera evitar vender a estas zonas.
Así que vamos a ver cómo resolver el asunto en WooCommerce, primero mediante código (recuerda siempre hacer copia de seguridad antes de cambiar nada) y al final vemos un plugin que te permitirá seleccionar a qué provincias (de España) vas a realizar envíos, de forma que WooCommerce no acepte las demás como dirección de envío.
Tabla de contenidos
Limitar ciertos envíos con WooCommerce
A veces no se trata de trabas burocráticas, y simplemente un comercio no puede permitirse enviar a ciertas zonas por distintos motivos: la agencia con la que tiene una buena tarifa sólo reparte en determinadas provincias, envía alimentos o productos frescos que soportan un tiempo máximo en ruta y algunas provincias quedan demasiado lejos en términos de tiempo, etcétera.
En estos casos es muy interesante poder excluir las provincias de las zonas a las que no enviamos. Esto, que no se puede configurar con WooCommerce, podemos conseguirlo fácilmente con un poco de código gracias al filtro woocommerce_states.
El código (más abajo te dejo un plugin si prefieres hacerlo así) para que no se puedan realizar pedidos a Canarias, Ceuta y Melilla, que tendrías que añadir al final del archivo functions.php (recuerda hacer antes copia de seguridad) o, más recomendable, en tu plugin de funciones personalizadas, sería el siguiente:
function ejr_limita_envios ($provincias) {
unset ($provincias ['ES'] ['TF']);
unset ($provincias ['ES'] ['GC']);
unset ($provincias ['ES'] ['CE']);
unset ($provincias ['ES'] ['ML']);
return $provincias;
}
add_filter ('woocommerce_states', 'ejr_limita_envios');
¿Qué hace este código? Simplemente «captura» la lista de provincias que WooCommerce tiene de España ([‘ES’]) y las filtra, quitando Santa Cruz de Tenerife ([‘TF’]), Las Palmas ([‘GC’]), Ceuta ([‘CE’]) y Melilla ([‘ML’]), y devuelve a WooCommerce esa lista filtrada y «recortada».
El resultado es el siguiente:
A la hora de realizar el pedido, esas cuatro provincias no aparecen en el desplegable de selección de la provincia para el envío.
¿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.
Permitir sólo pedidos desde ciertas zonas
Eso está bien si queremos, como en ese caso, excluir unas pocas provincias o alguna comunidad autónoma. Pero ¿y si sólo realizamos envíos a nuestra provincia y, quizá, las provincias limítrofes? ¿Tenemos que añadir manualmente las cuarentaytantas o cincuenta provincias que queremos excluir?
Afortunadamente no, ya que eso sería un engorro. Lo mejor es hacer justo lo contrario: decirle a WooCommerce a qué provincias queremos realizar envíos, y descartar las demás.
Para ello vamos a utilizar el mismo filtro que antes, woocommerce_states, pero en lugar de quitar de la lista de provincias españolas algunas de ellas, lo que haremos será definir de nuevo esa lista como a nosotros nos convenga.
Si, por ejemplo, sólo queremos (o podemos) realizar envíos a Murcia y las provincias limítrofes el código a incluir en el functions.php o en tu plugin de funciones sería:
function ejr_definir_provincias ($provincias) {
$provincias ['ES'] = array(
'MU' => 'Murcia',
'A' => 'Alicante',
'GR' => 'Granada',
'AL' => 'Almería',
'AB' => 'Albacete',
);
return $provincias;
}
add_filter ('woocommerce_states', 'ejr_definir_provincias');
O, si sólo enviamos a Galicia:
function ejr_definir_provincias ($provincias) {
$provincias ['ES'] = array(
'C' => 'A Coruña',
'LU' => 'Lugo',
'OR' => 'Orense',
'PO' => 'Pontevedra',
);
return $provincias;
}
add_filter ('woocommerce_states', 'ejr_definir_provincias');
Como de costumbre, recordarte que siempre, antes de realizar cualquier cambio en el código, realices una copia de seguridad.
Plugin para configurar a qué provincias se realizan envíos en WooCommerce
Como sé que el asunto puede resultar bastante engorroso, he creado un plugin que te permitirá seleccionar estas cosas cómodamente. Al activarlo tendrás una pantalla de opciones en Ajustes > Provincias de envío donde podrás seleccionar a qué provincias realizarás envíos (está disponible para España, Argentina y México).
Así WooCommerce no aceptará como dirección de envío ninguna de las provincias que no hayas seleccionado en el plugin. Problema resuelto de forma fácil y rápida. 🙂
El plugin para las provincias españolas lo puedes descargar directamente en el siguiente enlace:
Te dejo un vídeo donde puedes ver este plugin en funcionamiento. En estos enlaces puedes encontrar los plugins correspondientes a las provincias argentinas y a las provincias mexicanas.
Eduardo Julián Barrios dice
Hola Enrique, saludos desde Medellín (Colombia), muchas gracias por compartir tus conocimientos y experiencias. Con relación al post, tengo una duda que me gustaría me ayudaras a solucionar: Cuando estamos en el checkout y se selecciona Colombia, no se muestran las provincias (en nuestro caso son Departamentos) y lógicamente mucho menos las ciudades asociadas a estas provincias o departamentos. Por tanto ¿Cómo puedo agregar los departamentos y por consecuencia las ciudades asociadas a cada departamentos para poder hacer algún tipo de exclusiones en los envíos ?
Agradezco tu feedback.
Eduardo
Enrique J. Ros dice
Hola Eduardo.
Gracias ante todo por tu comentario. Yo tengo un plugin publicado que añade los departamentos de Colombia a WooCommerce (lo puedes encontrar aquí), permitiendo establecer zonas de envío por departamentos.
Sin embargo ello no permite hacer exclusiones; sólo, como te decía, establecer diferentes zonas de envío para así poder aplicar diferentes tipo (o diferentes costes) de envío por departamento.
Un saludo.
xyra dice
uy y Andorra aparece? tendría que eliminarlo ?
Enrique J. Ros dice
Hola Xyra. No, Andorra es tratado como cualquier otro país, por lo que para que aparezca tendrás que habilitarlo en la opción WooCommerce > Ajustes > General > Localizaciones de venta.
Un saludo.
Dani dice
Hola!
Gracias por el artículo.
Hay posibilidad de seleccionar algunos productos para que solo esos sean los que no se envían a determinadas regiones?
Gracias
Enrique J. Ros dice
Hola Dani. Poderse, se puede, claro. Por código todo es posible, aunque no conozco ningún plugin que haga eso específicamente. Busca entre los plugins de opciones de envío avanzadas (premium) y quizá encuentres uno con esa característica.
Un saludo.
raquel dice
Hola Enrique.
Acabo de ver el vídeo explicativo del plugin, y veo que no aparecen las provincias de Baleares. Yo necesito eliminarlas también del proceso de compra. Se puede hacer si no aparecen en el plugin?
Enrique J. Ros dice
Hola Raquel
Sí aparecen 🙂 O mejor dicho sí aparece. Baleares es sólo una provincia (son varias islas, pero forman una sola provincia), y fíjate que sí está, así que sí, puedes excluir los envíos a Baleares 🙂
Un saludo.
raquel dice
Uy qué despiste… disculpa.
Muchas gracias!
Olga dice
Hola! He comprado el plugin. Sólo quería darte las gracias. Realmente merece la pena los 4€ que vale. Me has ahorrado un montón de tiempo 🙂
También aprovecho para agradecerte todos los tutoriales y que estén tan actualizados.
Saludos! Seguiré siguiéndote!
Olga
Enrique J. Ros dice
Hola Olga
Muchas gracias a ti 🙂 Sí, intento ponerles un precio prácticamente simbólico, para compensar un poco el tiempo que invierto en programarlos (voy añadiendo nuevos todas las semanas), pero la idea es ésa, solucionar un problema de forma rápida y evitar quebraderos de cabeza 🙂
Muchas gracias por tu comentario. Un saludo.
Jose dice
Hola Enrique: tengo una duda y es la siguiente, si tengo dos zonas de envio y son dos paises diferentes, como puedo hacer para que en el momento del checkout no aparezca los dos países como opción de envio, sino sólo el país donde se está haciendo la venta. Esto para prevenir que la compra se haga en un país pero el envío se quiera hacer desde el otro.
Un abrazo
Enrique J. Ros dice
Hola Jose
Gracias por tu comentario. No conozco ningún plugin que haga eso y, la verdad, nunca se me ha presentado la necesidad. Podría hacerse mediante programación, combinando la geolocalización con JavaScript, pero no es algo sencillo.
Un saludo.
Manuel dice
Hola Enrique, muchas gracias por tu post, muy completo!
Una duda, ¿y restringir el envío de ciertos productos a ciertas zonas? ¿es posible hacerlo en Woocommerce?
Gracias y un saludo!
Enrique Ros dice
Hola Manuel
Sí, puedes hacerlo con el plugin oficial WooCommerce Conditional Shipping and Payments.
Un saludo
Kenny dice
Hola Enrique excelente tu articulo. Una consulta quisiera configurar un tipo de pago para ciertas zonas de envío. Por ejemplo si el pedido es dentro de mi ciudad ofrecer la opcion de pago contraentrega (al recibir el producto), pero si seleccionan el pedido para otras ciudades entonces desactivar este tipo de pago. Es posible hacer esto? Muchas gracias de antemano.
Enrique Ros dice
Hola Kenny
Se pueden establecer pasarelas de pago de forma condicional en función del país (con este plugin) o incluso del estado/provincia/departamento (también con este), pero no de la ciudad o población porque ése es un campo sencillo de texto y no es posible prever alternativas.
Se podría implementar algo con JavaScript que oculte la opción entre los métodos de pago y que sólo la muestre si el comprador escribe en ese campo el nombre de la ciudad, pero por supuesto no hay ningún plugin que lo haga.
Un saludo.
Eusebio dice
Me ha servido de mucho esta guía porque en el caso de mi tienda solo quiero vender a la península. Pero quiero ir un paso más allá y en un apartado concreto de productos (categoría outlet) sólo quiero vender a Toledo y Madrid por ser las zonas limítrofes. Esto es por las características del producto outlet que no compensa enviarlo a otras poblaciones. No se si hay algún plugin que me ayude con esta cuestión.
Enrique Ros dice
Hola Eusebio
Poderse se puede, aunque no conozco ningún plugin que haga algo así. Puede hacerse mediante programación.
Un saludo.
Jose Bermudez dice
Hola Enrique, en Colombia las empresas de mensajería nos cobran tarifas muy diferentes por cada ciudad, como puedo poner un precio de envío diferente para cada ciudad?.
Hasta donde veo en tus totorales explicas como aplicar un precio diferente a cada departamento pero no encuentro como hacerlo para cada ciudad.
Enrique J. Ros dice
Hola Jose
Eso puedes hacerlo con este plugin, que te permitirá añadir las ciudades como divisiones territoriales para luego poder crear zonas de envío con ellas.
Un saludo.
rodrigo unda dice
Hola Enrique:
tus aticulos son siempre muy utiles, claros y concisos.
en mi caso he definido la tienda y lo que nos sucede es que para ventas al extranjero, debemos consultar con la empresa de envios, la tarifa cada vez, pues los precios son muy fluctuantes.
Es por eso que cliente decidió evaluar caso a caso el precio del envio.
Por lo que al seleccionar «extranjero» queremos que salga un mensaje que diga eso, que lo conatctermos con el precio final.
Pero no veo la forma de poder hacer este mensaje.
Quizas tu tengas alguna idea al respecto.
un abrazo desde Chile.
Enrique J. Ros dice
Hola Rodrigo
WooCommerce ya muestra un mensaje cuando no hay métodos de envío creados para la zona seleccionada. Puedes usar este mismo mensaje, editándolo con Loco Translate.
Un saludo.
Beatriz dice
Hola Enrique,
Se podría hacer que Canarias y Melilla no dejara hacer la compra final y saliera un aviso de ponerse en contacto? algo así como un pop up o aviso y no dejar hacer la compra del carrito.
Saludos
Enrique J. Ros dice
Hola Beatriz
Poderse se puede, de hecho basta con un JavaScript que deshabilite el botón de Finalizar compra y muestre el mensaje al seleccionar las provincias en cuestión, sin embargo no conozco ningún plugin que haga algo similar, habría que programarlo a medida.
Un saludo.
Pier Finazzi dice
Hola Enrique, tengo dos tipos de envio en mi tienda 24H y 72H, con tu plugin ¿puedo restringir Canarias, Ceuta y Melilla solo para el envio de 24H?
Actualmente estoy usando el codigo pero eso restringe el envio a esas provincias para todos los envios.
Gracias un saludo!
Enrique J. Ros dice
Hola Pier
No necesitas ningún plugin para eso, basta con que en la zona de envío añadas solamente los métodos de envío que tengas disponibles para esa zona, en este caso el de 72 horas.
Un saludo.
luis dice
Hola Enrique! he introducido
function ejr_limita_envios ($provincias) {
unset ($provincias [‘ES’] [‘TF’]);
unset ($provincias [‘ES’] [‘GC’]);
unset ($provincias [‘ES’] [‘CE’]);
unset ($provincias [‘ES’] [‘ML’]);
return $provincias;
}
add_filter (‘woocommerce_states’, ‘ejr_limita_envios’);
en mi plugin personalizado, pero sigue apareciendo. Quiero hacerlo a través del código y así me evito de meter otro plugin. Gracias
Alberto Hernández Quirós dice
Eres más grande que América Enrique.
Cant dice
Buenos días,
Gracias por el aporte, pero tengo una pequeña duda. Una tienda puede restringir el envío a ciertas provincias o como en mi caso solo a una provincia, Navarra, pero eso no quiere decir que el cliente no pueda facturar en otra provincia, es más, no creo que sea conveniente hacerlo ya que es probable que pierdas ventas simplemente por no permitir facturar a cualquier provincia de España. Un ejemplo claro puede ser una empresa con sede central en Madrid (necesita factura para Madrid) que realiza un pedido de comida a domicilio para su sede de Navarra.
¿Sabrías si existe alguna forma de crear esta restricción de provincias para el envío pero sin afectar a la dirección de facturación?
Un saludo y gracias de antemano.
Enrique J. Ros dice
Hola Cant
WooCommerce utiliza los mismos datos en ambos campos, la única forma de hacerlo sería creando un JavaScript a medida que los quite sólo del campo de envío.
Un saludo
Jose Mari dice
Buenos días, Enrique:
Tengo unos productos en mi woocommerce que se envían solo a una provincia y otros a cualquiera. He puesto en cada artículo que no se envía fuera de dicha provincia, pero recibo pedidos de otros sitios. Como puedo restringir el envío selectivo por articulo
Muchas gracias
Enrique J. Ros dice
Hola Jose Mari
Para ello necesitas un plugin de envíos condicionales. El más recomendable es el oficial de WooCommerce,
WooCommerce Conditional Shipping and Payments.
Un saludo.
Gerard dice
Hola Enrique siguiendo tu tutorial por código CSS estoy intentado hacer la exclusión de provincias a través del plugins SIMPLE CUSTOM CSS pero no me cargan los cambios y los plugins no me aparecen en la búsqueda de plugins
Enrique J. Ros dice
Hola Gerard
No es posible excluir provincias mediante CSS.
Un saludo
Jordi dice
Hola Enrique,
El plugin es muy interesante pero al activar/desactivar provincias afecta a 1. Dirección de facturación, 2. Dirección de envío 3. Registro de wordpress.
Hay forma de evitarlo? Sobre todo que no afecte al registro de wordpress.
Gracias
Enrique J. Ros dice
Hola Jordi
No, no es posible ya que la dirección de envío por defecto de WooCommerce es la de facturación. Si se puede establecer una dirección de facturación a una provincia, se puede usar como dirección de envío.
Un saludo
Paco dice
Muchas gracias por el artículo!
Te sigo desde hace tiempo… gran trabajo Enrique, gracias!