Enrique J. Ros

Desarrollo web WordPress

  • Inicio
  • Plugins
    • Suscripción
    • Plugin Redsys
    • Extensiones WooCommerce
    • Plugins WordPress
    • Pack de plugins
  • Suscriptores
    • Mi cuenta
  • Blog
  • Quién soy
  • Contacta

20/04/2016 por Enrique J. Ros 38 comentarios

Excluir envíos a Canarias, Ceuta y Melilla con WooCommerce

Publicado en: Tutoriales WooCommerce, Vídeos

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
  • Permitir sólo pedidos desde ciertas zonas
  • Plugin para configurar a qué provincias se realizan envíos en WooCommerce

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:

Excluir envíos a Canarias, Ceuta y Melilla

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.

Quiero saber más

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

Plugin para elegir provincias de envío

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:

Plugin para seleccionar en WooCommerce a qué provincias se realizan envíos (España) Plugin para seleccionar en WooCommerce a qué provincias se realizan envíos (España)

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.

Acerca de Enrique J. Ros

Soy desarrollador web freelance especializado en WordPress y WooCommerce, partner developer en WooCommerce.com, con más de veinte años de experiencia en la realización y desarrollo de sitios web y de comercio electrónico. Actualmente dedico la mayor parte de mi tiempo a la programación de plugins, tanto comerciales como hechos a medida. [Más sobre mí] [Contacta conmigo]

¿Te ha parecido útil este contenido?

Apúntate a la newsletter y recibe semanalmente un resumen de los tutoriales publicados. Además, recibirás en tu email los ebooks Mejorando WooCommerce y Copias de seguridad en WordPress.

[caja_wysija]

Comentarios

  1. Eduardo Julián Barrios dice

    12/09/2016 a las 20:46

    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

    Responder
    • Enrique J. Ros dice

      12/09/2016 a las 23:06

      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.

      Responder
  2. xyra dice

    19/12/2016 a las 21:18

    uy y Andorra aparece? tendría que eliminarlo ?

    Responder
    • Enrique J. Ros dice

      19/12/2016 a las 21:24

      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.

      Responder
  3. Dani dice

    28/12/2016 a las 15:46

    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

    Responder
    • Enrique J. Ros dice

      28/12/2016 a las 19:12

      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.

      Responder
  4. raquel dice

    01/02/2017 a las 10:09

    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?

    Responder
    • Enrique J. Ros dice

      01/02/2017 a las 10:55

      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.

      Responder
      • raquel dice

        01/02/2017 a las 11:01

        Uy qué despiste… disculpa.
        Muchas gracias!

        Responder
  5. Olga dice

    18/02/2017 a las 13:08

    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

    Responder
    • Enrique J. Ros dice

      18/02/2017 a las 13:22

      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.

      Responder
  6. Jose dice

    12/03/2017 a las 19:33

    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

    Responder
    • Enrique J. Ros dice

      13/03/2017 a las 08:55

      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.

      Responder
  7. Manuel dice

    14/07/2017 a las 09:39

    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!

    Responder
    • Enrique Ros dice

      18/07/2017 a las 19:49

      Hola Manuel
      Sí, puedes hacerlo con el plugin oficial WooCommerce Conditional Shipping and Payments.
      Un saludo

      Responder
  8. Kenny dice

    04/08/2017 a las 01:48

    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.

    Responder
    • Enrique Ros dice

      04/08/2017 a las 08:32

      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.

      Responder
  9. Eusebio dice

    01/09/2017 a las 10:13

    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.

    Responder
    • Enrique Ros dice

      04/09/2017 a las 08:57

      Hola Eusebio
      Poderse se puede, aunque no conozco ningún plugin que haga algo así. Puede hacerse mediante programación.
      Un saludo.

      Responder
  10. Jose Bermudez dice

    29/09/2017 a las 22:04

    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.

    Responder
    • Enrique J. Ros dice

      30/09/2017 a las 15:11

      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.

      Responder
  11. rodrigo unda dice

    13/02/2018 a las 14:41

    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.

    Responder
    • Enrique J. Ros dice

      14/02/2018 a las 10:44

      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.

      Responder
  12. Beatriz dice

    23/02/2018 a las 11:16

    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

    Responder
    • Enrique J. Ros dice

      26/02/2018 a las 10:26

      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.

      Responder
  13. Pier Finazzi dice

    07/04/2018 a las 10:02

    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!

    Responder
    • Enrique J. Ros dice

      09/04/2018 a las 10:27

      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.

      Responder
  14. luis dice

    17/04/2018 a las 18:20

    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

    Responder
  15. Alberto Hernández Quirós dice

    30/11/2018 a las 11:13

    Eres más grande que América Enrique.

    Responder
  16. Cant dice

    04/04/2019 a las 10:41

    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.

    Responder
    • Enrique J. Ros dice

      05/04/2019 a las 09:23

      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

      Responder
  17. Jose Mari dice

    20/09/2019 a las 13:02

    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

    Responder
    • Enrique J. Ros dice

      24/09/2019 a las 09:13

      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.

      Responder
  18. Gerard dice

    10/12/2019 a las 17:39

    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

    Responder
    • Enrique J. Ros dice

      11/12/2019 a las 12:35

      Hola Gerard
      No es posible excluir provincias mediante CSS.
      Un saludo

      Responder
  19. Jordi dice

    11/08/2021 a las 15:14

    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

    Responder
    • Enrique J. Ros dice

      12/08/2021 a las 09:40

      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

      Responder
  20. Paco dice

    17/04/2023 a las 16:05

    Muchas gracias por el artículo!
    Te sigo desde hace tiempo… gran trabajo Enrique, gracias!

    Responder

Deja una respuesta Cancelar la respuesta

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

Social

WordPress.org YouTube Twitter LinkedIn Feedly

Servicios

Mantenimiento web y soporte WordPress
Optimización SEO para WordPress
Resolución de emergencias
Consultoría WordPress

Desarrollo de sitios web para móviles

Logo WordPress WordPress Plugin Developer Logo WooCommerce
  • Inicio
  • Plugins
  • Suscriptores
  • Blog
  • Quién soy
  • Contacta

Copyright ©2016 - 2026Enrique J. Ros • Diseño y desarrollo web WordPress

Política de privacidad · Política de cookies · Aviso legal · Licencia de los plugins

Esta web utiliza cookies propias y de terceros para mejorar la experiencia de usuario. Tienes más información en mi política de cookies.
Aceptar Ajustes Rechazar
Política de cookies

Resumen de privacidad

Este sitio usa cookies para mejorar tu experiencia mientras navegas por la web. Las cookies categorizadas como necesarias se almacenan en tu navegador ya que son esenciales para el funcionamiento correcto del sitio. Uso también cookies de terceros para ayudarme a entender cómo los usuarios utilizáis esta web. Estas cookies se almacenarán en tu navegador sólo con tu consentimiento. También tienes la opción de rechazar todas cookies, aunque eso puede afectar a tu experiencia de navegación.
Necesarias
Siempre activado
Son las cookies absolutamente esenciales para el correcto funcionamiento del sitio web. Esta categoría sólo incluye cookies que aseguran las funcionalidades básicas y de seguridad del sitio. Estas cookies no almacenan ningún tipo de información personal o referente al usuario.
No necesarias
Son las cookies que no son esenciales para el funcionamiento correcto del sitio web y se utilizan para recabar datos analíticos y de uso del sitio por parte de los usuarios.
GUARDAR Y ACEPTAR