Skip to content
pcreative Commerce

Setting up shipping

A new install comes with a zone for the shop's country, but no rate at all.

Panel → Shipping. Where you deliver, what you charge to get there and when each option is offered. What the customer sees at checkout comes from here.

Start here, or nobody can buy

With no rates, checkout says there is no way to deliver and the order cannot go through. It is not a warning you can skip: without a shipping option, nothing that ships can be bought.

A new install comes with a zone for the shop's country, but no rate at all. The panel says so on the zone itself ("nobody can buy from these places"), and the first thing to do is give it one.

Things that are not shipped do not need it: a downloadable product, a key or a gift card is bought with no shipping and no address.

The pieces

  • Zone: where you deliver. Its rates go inside it.
  • Rate: what shipping to that zone costs, and when it is offered.
  • Shipping class: a group of products that costs a different amount to send (fragile, bulky, chilled). Optional.

Zones

A zone is defined by countries, and can be narrowed down:

FieldHow to write itExample
Countriescodes separated by commases, pt
Provinces or statescountry and provincees-b
Citiescountry and cityes:Terrassa
Postcodescountry and an expressiones:^08

The postcode is a regular expression: es:^08|^17 covers Barcelona and Girona. It is written like that, and not as a list of codes, because a Spanish province is hundreds of codes that all start the same way.

An address can fall into several zones at once — its country and its city, for instance. The customer then sees the rates of all of them. That way you can have your usual rate for the whole of Spain and, on top, your own delivery just in your city.

The zone is decided by the delivery address. Until the customer types it in, there are no rates to show them.

Rates

Every rate has a type:

  • Flat rate: a price you set.
  • Local pickup: the same as a flat rate (it can be 0), but marked as pickup so the theme shows it that way. Checkout still asks for an address, because that is what decides the zone.
  • Live carrier: the price is asked of the carrier. Read what you need to know first.

And, besides the price:

  • Extra per unit: added for each unit that ships. With €5 and €1.50 per unit, two units pay €8.
  • Delivery time: a text the customer sees, such as "24-48 h". It calculates nothing; it is what you promise.
  • Active: switched off, it stops appearing at checkout, but it is not deleted.

At checkout they appear by their position, and then in alphabetical order of their name. The position is the rate's orden field in the API (/gestion/envios/tarifas), 0 by default; the panel does not show it, so rates made there come out alphabetically. If you want one first, let its name say so.

The price is in the shop's currency. A cart in another currency does not see flat rates, because they have no price in it.

When it is offered: conditions

Leave them empty and the rate always appears. With them, only when all of them are met:

ConditionWhat it looks at
Minimum and maximum amountthe sum of the products that ship
Minimum and maximum weightthe variants' weight times their units, in the store's weight unit
Minimum and maximum itemsthe units that ship

That covers almost everything people usually ask for:

  • Free over €60: a rate at 0 with a minimum amount of 60, and the normal one with a maximum amount of 59.99. Without that maximum, above 60 the customer would see both and could choose to pay.
  • Weight bands: one rate per band, each with its minimum and maximum weight.
  • Small orders by letter post only: a rate with a maximum of 2 items.

Three things worth knowing:

  • The amount does not take coupons off, nor does it include shipping: it is the sum of the prices of what ships. A "free over 60" with a 10 % coupon is still free from 60 before the coupon.
  • Weight is in your store's weight unit, the one you choose in Settings > General > Weight unit. The panel prints it next to every weight field, on the variant and on the bands here, so that both are written in the same unit. Nothing is converted: if you set the bands in kilograms and the variants in grams, no error appears — the rate simply never shows up. A product with no weight counts as zero, so if you set no weights, a weight-based rate always sees the lowest band.
  • What does not ship does not count: not in the amount, the weight or the items.

Shipping classes

They are for when some products cost more to send. You create the class, put its products in it, and on each rate you say how much is added when one of that class ships.

  • A product is in one class only. Putting it in another takes it out of the first.
  • Products with no class: on each rate you can also say how much the ones with no class add.
  • How it adds up, chosen on each rate:
    • Once for each class: if a fragile item and a bulky one ship, both extras are added.
    • Only the most expensive class: the larger of the two is added. It is what you usually want if everything goes in the same box.

The extra is added once per class, not per unit: three fragile items pay the fragile extra once. To charge per unit, there is the rate's extra per unit.

The final price is: price + extra per unit × units + class extras. For example, €5 + €1.50 × 2 units + €3 for one class: €11.

Without classes, every product pays the same shipping.

🔴 The shipping profile trap

Every rate carries a shipping profile inside it, and so does every product. The engine silently hides any rate whose profile does not match that of the products in the cart. It gives no error: the rate simply does not show.

The panel does not make you manage profiles, precisely because of this. When a rate is saved it gets the profile most of your products use, and it is corrected again when you edit it.

If a rate exists, is active, meets its conditions and still does not show at checkout, open it and save it without changing anything. That is what gives it the right profile. It happens above all with rates that were not created on this screen: those from a WooCommerce migration or from an earlier version.

Live carriers: the truth

The Live carrier type exists, and the engine knows how to ask a carrier for a price: with a 2-second timeout, and keeping the answer for 60 minutes so it does not ask the same thing on every checkout load.

But today there is no carrier registered that calculates live. The only one the shop ships with is manual shipping, and there is not yet a way for a plugin to add one. There is no Sendcloud integration either: it only receives their notifications (see configuration).

So a live-carrier rate always charges its fallback price, and if it has none, its normal price. In other words, today it works like a flat rate. If you use it, set a fallback price you can stand by.

The fallback is there for when there is a carrier: if it is slow or does not answer, checkout does not sit waiting and charges that instead.

With several sellers

If you use the marketplace, each seller can have their own rates and each parcel is quoted separately. It is explained there.

What does not go here

The cash-on-delivery surcharge is not a shipping rate: it is set under Settings → Payments, next to each payment method.