WooCommerce no sabe cobrar el envío por el peso del carrito sin un plugin. Su método Tarifa plana solo conoce el número de artículos ([qty]), un porcentaje del carrito ([fee]) y un coste extra por clase de envío, así que para «de 0 a 5 kg cuesta 6, de 5 a 20 kg cuesta 12» necesitas un plugin de tarifas por tablas. Cuando las clases de envío o los códigos postales «no funcionan», la causa casi siempre está en los ajustes: el orden de las zonas, el tipo de cálculo, un producto sin clase o un precio escrito con el separador equivocado.
Por qué pasa
- La tarifa plana no tiene campo de peso. Puedes escribir una fórmula como
10 + ( 2 * [qty] ), pero no hay ningún marcador para el peso del carrito. El peso de cada producto se guarda, pero ningún método de serie lo usa para cobrar el envío. - El cliente cae en otra zona. WooCommerce revisa las zonas de arriba abajo y usa la primera que coincide. En un hilo de soporte de 2026 en WordPress.org, la zona «Europa» estaba por encima de la zona «Reino Unido», y los clientes británicos nunca llegaban a sus precios. Lo mismo pasa con una zona «España» colocada encima de «Canarias», o «México» encima de una zona de códigos postales de la capital.
- El tipo de cálculo. Con Por pedido, la tarifa plana cobra solo la clase más cara del carrito. Con Por clase, suma todas. Muchas consultas de «no me cobra las clases» vienen de este ajuste.
- Productos sin clase o clases sin precio. Un producto sin clase usa el coste de los productos sin clase de envío. En el mismo hilo, casi todos los productos tenían clases sin precio en la zona internacional, y los pedidos al extranjero pagaban solo el coste base.
- Variaciones. Cada variación puede tener su propia clase de envío. Si pones la clase solo en el producto principal y una variación tiene otra, esa variación se cobra distinto.
- Precios con comas o puntos. En un hilo de WordPress.org con 15 respuestas, los precios por clase funcionaban en una zona y no en otras tres. En las zonas que fallaban los precios llevaban comas y puntos; al escribirlos como números sin más, se arregló.
- Productos sin peso. En una tabla por peso, un producto con el peso vacío cuenta como 0 kg y cae en la fila más barata.
- Tarifas guardadas. WooCommerce guarda las tarifas de envío en la sesión del cliente. Después de cambiar un ajuste, un carrito antiguo puede seguir mostrando el precio viejo.
Cómo comprobarlo
- Mira la lista de zonas. Ve a WooCommerce > Ajustes > Envío > Zonas de envío. Las zonas se leen de arriba abajo. Una zona que contiene a otra (un país que contiene una provincia o un estado) tiene que ir debajo.
- Revisa los códigos postales. Abre la zona y mira la opción de limitar a códigos postales concretos. Un código por línea; los rangos se escriben
28001...28999y los comodines28*. No se admiten comodines dentro de un rango (28*...29*). - Activa el modo de depuración. En WooCommerce > Ajustes > Envío > Ajustes de envío, marca el modo de depuración y guarda. Añade un producto al carrito y abre la página de Carrito clásica con una dirección de prueba: un aviso te dice qué zona se aplicó. Solo sale en el carrito clásico, no en los bloques de Carrito o de Finalizar compra. Desactívalo al terminar, porque también lo ven los clientes.
- Abre cada tarifa plana. Revisa el Coste, el coste de cada clase que usan tus productos, el de los productos sin clase y el Tipo de cálculo.
- Revisa los productos. En Productos > Todos los productos, abre uno que salga con el precio mal. Mira Peso y Clase de envío en la pestaña Envío y, en los productos variables, en cada variación.
Cómo arreglarlo
Si las clases o los códigos postales dan un precio equivocado:
- Pon primero las zonas más pequeñas. Arrastra las zonas en la lista para que una ciudad o un rango de códigos postales quede encima de su provincia o estado, y un país encima de su continente.
- En cada zona, abre la tarifa plana y pon un coste a todas las clases que usan tus productos. Una clase que dejes sin precio no se cobra en esa zona.
- Escribe los precios como números, con el mismo separador decimal que usa tu tienda (WooCommerce > Ajustes > Generales) y sin separador de miles:
1500, no1.500. Si una zona sigue fallando, haz lo que resolvió el hilo de 15 respuestas: bórrala, créala de nuevo y vuelve a escribir los precios. - Elige el Tipo de cálculo: Por clase si hay que cobrar cada clase, Por pedido si solo quieres cobrar la más cara.
- Dale una clase a cada producto. Con la edición en lote (Productos > Todos los productos, marca los productos, Acciones en lote > Editar) puedes cambiar la Clase de envío de muchos a la vez. Revisa las variaciones una por una.
- Vacía el carrito o usa una ventana privada y vuelve a probar.
Si necesitas precios por peso:
WooCommerce solo permite imitarlo: crea clases como «Hasta 2 kg» o «De 2 a 10 kg», pon cada producto en una y dale un coste a cada clase. Así cada artículo se cobra según su propio peso, no según el total del carrito: tres artículos de 1 kg cuestan tres veces el precio de «Hasta 2 kg». Para rangos de peso de verdad hace falta un plugin:
- Flexible Shipping (de Octolize) es gratis en WordPress.org y permite reglas por peso y por importe del carrito. Las reglas por clase de envío o por número de artículos están en su versión PRO, de pago.
- Table Rate Shipping es la extensión oficial de pago de WooCommerce, con reglas por peso, artículos, artículos por clase y precio.
- Con cualquiera: crea una fila por rango de peso, deja una última fila «sin límite» para los pedidos más pesados y rellena antes el peso de todos los productos.
Cómo evitar que vuelva a pasar
El envío se vuelve a romper cuando añades una zona, una clase o un producto y te olvidas de un sitio. Nuestro plugin ShipCraft añade un método de envío por tablas a tus zonas: filas con rangos de peso, artículos, subtotal, volumen o lado más largo, y listas de clases de envío, categorías, tipos de cliente y códigos postales (28*, 1000...1999). Cada fila puede cobrar un coste fijo, por artículo, por kilo, un porcentaje o «1,00 cada 5 kg por encima de 20», y una fila puede ser «no disponible» (por ejemplo, más de 30 kg). Lo que evita estos errores es el simulador: armas un carrito de prueba con país, código postal y productos, y te enseña el precio de cada tarifa, marca las filas que usó y explica cada paso, también con los cambios sin guardar. Funciona con el pago de bloques y el clásico y con HPOS, pide WooCommerce 8.9 o superior y cuesta 35 USD al año para un sitio o 69 USD de por vida. Puedes probarlo en la demo. Si solo necesitas rangos de peso, quizá te baste Flexible Shipping, que es gratis.
Preguntas frecuentes
¿WooCommerce puede calcular el envío por peso sin plugin? No. La tarifa plana usa artículos, un porcentaje y clases de envío. Puedes usar las clases como tramos de peso, pero el precio es por artículo, no por el peso del carrito.
¿Por qué no se cobran los costes de mis clases de envío? Casi siempre el cliente cae en otra zona, la clase no tiene precio en esa zona o el Tipo de cálculo está en Por pedido, que solo cobra la clase más cara.
¿Por qué a un cliente le sale la zona equivocada? WooCommerce usa la primera zona que coincide, de arriba abajo. Sube la zona más concreta por encima de la más amplia.
¿Cómo cobro distinto por código postal?
Crea una zona y limítala a códigos postales concretos: códigos sueltos, rangos (28001...28999) o comodines (28*). Ponla encima de la zona del país.
¿Qué pasa con los productos sin peso? Cuentan como 0 kg, así que una tabla por peso los mete en la fila más baja. Rellena el peso de todos los productos antes de pasar a tarifas por peso.


