WooCommerce postcode delivery checker
How to list the postcodes or ZIP codes you deliver to, let shoppers check theirs before they shop, and stop orders for the rest at checkout.
Why check by postcode
A postcode list is the simplest delivery area there is: you already know which ZIP codes your vans cover. It needs no map and no address lookup, so it works on the free plugin with no account. Shoppers type their postcode into a small box on any page and get a clear answer before they fill a cart, instead of finding out at checkout.
Set up a postcode zone
- Open WooCommerce > ReachZone in your WordPress admin and press Add postcode zone.
- Enter your postcodes, one per line or separated by commas. You can mix the formats below.
- Give the zone a name, a delivery time (for example “same day”) and, if you like, a fee and a minimum order.
- Save. Add more postcode zones for areas with a different fee or delivery time.
Formats you can enter
| Entry | Matches |
|---|---|
60601 | Exactly that code. A US ZIP+4 such as 60601-1234 counts as 60601. |
606* | Every postcode that starts with 606. |
60601-60610 | Every number from 60601 to 60610. Both ends need the same number of digits (works for 4-digit Australian postcodes too, such as 2000-2050). |
SW1A | A UK outward code: SW1A 1AA, SW1A 2AB and every other full postcode in that district. |
M5V | A Canadian forward sortation area: M5V 3L9 and the rest of M5V. |
SW1A 1AA | One full UK or Canadian postcode. |
Spaces, dashes and upper or lower case don’t matter: “sw1a 1aa” and “SW1A1AA” are the same. For UK districts, use the outward code rather than a star: M1 covers M1 1AA but not M11, while M1* covers both.
Add the checker to your shop
Add the Delivery checker block to any page, or put the shortcode [reachzone_checker] in it. Good places are the home page, the shop page and a “Delivery” page linked from the menu. The checker loads no map, and a postcode check runs entirely in your shop: nothing is sent outside.
What shoppers see
- A postcode in one of your zones: “We deliver here: same day, $4.99 delivery fee” (or “free delivery” when the zone has no fee).
- A postcode in none of them: “Sorry, this address is outside our delivery area.”
- A Use my current location button is there too. Sharing a location is optional, the browser asks first, and the position is only used for the check.
You can reword both answers under “Checkout behaviour and messages”. {eta} and {fee} are filled in for you.
If you also have radius, drawn or drive-time zones, a postcode alone can’t place the shopper on the map. Then a postcode that isn’t on any of your lists gets “Please enter your postcode or use your current location” instead of a no, because the shopper might still be inside a circle or a drawn area.
At checkout
The checker is a convenience; checkout applies the same rules whether or not the shopper used it. The shipping postcode is checked against your zones, and the matching zone filters the shipping methods, adds its fee and enforces its minimum order. If all your zones are postcode zones, a postcode outside every list can’t place a delivery order, in the classic checkout and the block checkout. If you also have map zones and the address can’t be placed on the map, checkout by default asks the shopper to use the checker first; you can choose to allow those orders instead. Pickup stays open either way. See block checkout outside your area for the details.
When a postcode is on two lists, the zone with the lowest priority number wins. With equal priority, the postcode zone beats a radius or drawn zone, because it is the more specific one.
Free plan or paid?
Postcode zones, the checker block and shortcode and all the checkout rules are in the free plugin, with no account and no limit on zones. The paid plans add street-address lookup, so shoppers can type a full address and be matched against radius, drawn and drive-time zones; see pricing.