To limit WooCommerce delivery to a radius, you geocode the customer's address, measure its distance from the store and only offer delivery when it falls inside your limit, with collection as the fallback. WooCommerce shipping zones cannot do this on their own because they match on postcodes, not miles. For Whitfield Service Station in Dover I wrote a small plugin that does exactly this with the Google Maps API and a 10 mile limit.
Why can't WooCommerce shipping zones handle a delivery radius?
Shipping zones were designed for parcels. A zone matches on country, region and postcode, then offers the shipping methods you attach to it. That works for "free UK delivery over £50", which is how a UK grocery marketplace I built in 2025 shipped.
Hot food is different. A takeaway delivers by distance from the kitchen, and a postcode area can be long and thin, partly inside your range and partly far outside it. You can approximate a radius with a long list of postcodes, but someone has to maintain that list, and it is still wrong at the edges.
What did the Whitfield delivery rules need to do?
Whitfield runs a Budgens store, a Fireaway pizza outlet and a doner and gyros kitchen on one forecourt, all selling through one WooCommerce checkout. The owner's rules, written down before any code:
- Deliver only within 10 miles of the forecourt.
- Charge a fee that reflects distance.
- Outside the radius, do not refuse the order. Offer pickup or dine-in instead.
- Stop all ordering when the store is closed.
- No cash on delivery.
How does a delivery radius plugin work?
My Delivery Restriction Checker plugin hooks into the checkout. When the customer enters an address, it is geocoded with the Google Maps API, which turns the text into coordinates. The plugin measures the distance from the store, hides the delivery method beyond 10 miles and adds the delivery fee for addresses inside it. Customers outside the radius still see pickup and dine-in, so they are not turned away.
The store owner can also close the shop or set opening hours from the admin, and an opening-hours popup on the front end tells customers when ordering is available. Nobody can order after the kitchen closes.
Should you use a plugin from the directory or write your own?
| Option | Good for | Limits |
|---|---|---|
| Postcode lists in shipping zones | A town with a few clear postcode areas | Wrong at the edges, and someone has to maintain the list |
| A distance-based shipping plugin | Standard radius and per-mile fees | Harder to bend when your rules have exceptions |
| A small custom plugin | Specific rules, fallbacks and fee changes you expect to make | You need a developer to maintain it |
On Whitfield the custom route was deliberate. The geocoding, radius and fee rules were specific enough that a bespoke plugin was smaller and easier to change than a general product. That proved itself when the owner switched from a distance-based fee to a flat fee: a small edit rather than a hunt through someone else's settings screen. My reasoning on this trade-off in general is in when should you build a custom WordPress plugin.
What decisions should you make before building a delivery radius?
Write these down in plain words. A developer can build any of them, but changing them after launch costs more than deciding up front.
- 1
Pick the centre point
The kitchen or store address. With several outlets, decide whether each has its own radius.
- 2
Set the limit
Whitfield uses 10 miles. Decide whether you mean straight-line or driving distance.
- 3
Decide the fee model
Flat, distance-based or free above a basket value. Expect to change it once you see real orders.
- 4
Choose the fallback
Collection, dine-in or a message with a phone number. Never a dead end.
- 5
Set the hours
Opening hours, closing for holidays and a way for staff to pause ordering on a busy night.
- 6
Test with real addresses
Addresses just inside and just outside the limit, plus addresses with typos.
What else does a local delivery store need?
The radius is one piece. On Whitfield, these made the system usable day to day:
- Order printing. Orders print automatically to an Epson receipt printer through PrintNode, so the kitchen never watches a screen. I wrote that up in how to print WooCommerce orders automatically in the kitchen.
- Express payments. A multi-step Fluid Checkout with Stripe, Apple Pay and Google Pay.
- Add-ons. WooCommerce Product Add-Ons for toppings and variations.
- Age checks. An 18+ confirmation for alcohol and vapes.
- A menu staff can edit. A CSV import template with tutorial videos.
Plan for the rules to change
Whitfield's fee changed after launch and cash on delivery was switched off. Keep delivery rules in one place in code or settings, so a change is an edit, not a rebuild.
The full list of what a store needs before launch is in my WooCommerce store build checklist. I build delivery and ordering stores as part of my WooCommerce stores and online ordering service. Send me your delivery rules in plain words and I will reply with a plan.



