A WooCommerce shipping zone for India is the one region a shipping address matches. Checkout shows only the methods on that zone. Add it under WooCommerce, then Settings, then Shipping, using India, one state, or a PIN list. The smallest zone has to sit above a nationwide zone.
What one zone shows at checkout
WooCommerce reads the shipping address, walks the zone list from the top, and stops at the first zone that covers it. That customer never sees methods from a later zone. A buyer in one city and a buyer in another state pay different rates only when they match different zones.
- Zone: the place, such as a PIN list, a state, India, or everywhere else.
- Method: what that zone offers, such as flat rate, free shipping, or local pickup.
- Class: a label on the product, such as heavy, that can change the flat rate. A class is not a zone.
The store address under WooCommerce, then Settings, then General is the default for tax and for a cart that has no address yet. It does not choose the customer's zone. The zone list does that.
Which India zones to add, and in what order
Start with as few zones as the courier bill needs. A shop that charges one rate for every Indian PIN needs a single India zone. Split a zone only when the courier price for that area is actually different.
Put a narrow zone above a wide one. An India zone above a state zone means the state zone never runs, because India already matched. Drag the handle on the left of the row, then save.
| Zone, top to bottom | Region you select | What checkout should show |
|---|---|---|
| Local PINs | Postcodes such as 560* | Local pickup, plus a short flat rate if you offer one |
| Home state | One Indian state | That state's flat rate, and free shipping only if you set a minimum |
| Rest of India | India, placed below the narrower zones | The nationwide rate |
| Rest of the world | The default catch-all | No method, when you do not export |
If you do not ship outside India, leave Rest of the world with no method. A foreign address then sees that shipping is unavailable. Do not put a flat rate on that zone unless you mean to export at that price.
Remote states and island PINs often cost the courier more. Add them as their own zone, above the nationwide zone, only after a real courier invoice shows the gap. Twenty-eight state zones on day one are harder to test than they are to click.
How to add a state zone or a PIN zone
Do this where a test order will not buy a real label. Use one product that is in stock, physical, and not marked virtual or downloadable.
- Open WooCommerce, then Settings, then General. Set the store country to India, and set Shipping location(s) so you can ship to India. Save.
- Open WooCommerce, then Settings, then Shipping, then Shipping zones. Click Add zone.
- Name the zone for the area, such as Bengaluru PINs or Maharashtra. Select the state under India, or tick Limit to specific zip/postcodes.
- Enter one PIN per line. A prefix such as 560* matches PINs that start with 560. A range such as 400001...400100 matches those numbers. A star inside a range is not accepted.
- Click Add shipping method. Choose Flat rate, Free shipping, or Local pickup, and enter the price you will charge. Save changes.
- Drag the new zone above any zone that already covers that state or the whole of India. Save again.
- On the cart, calculate shipping for a PIN inside the zone and for a PIN outside it. It worked when the method and the amount change, and the other zone's method is not offered.
The same steps build the rest of the list. Add the India zone after the PIN and state zones, and keep it under them. A prefix matches the start of a PIN. It does not match a PIN that merely contains those digits.
Flat rate, free shipping, and local pickup
Flat rate is a price you type. It does not ask a courier for a quote. Enter the cost in the currency the store already uses. When that currency is INR, checkout shows INR. WebJi® does not set this number, and it is not a hosting fee.
Free shipping is another method on the same zone. Require a minimum order amount, a free-shipping coupon, or both. Keep the flat rate so a cart under the minimum still has a method. Hide the flat rate when free shipping applies only if that is what you want. Leave a faster method visible if you still sell it.
Local pickup belongs on the zone where someone can collect the order. On classic checkout, add the Local pickup method to that zone. If the page uses the Checkout block, also add the pickup location under WooCommerce, then Settings, then Shipping. It worked when that address offers pickup and another state does not.
When the rate should follow weight
Core flat rate does not read parcel weight. A light pouch and a heavy carton cost the same until a shipping class or a plugin changes the price.
Create classes under WooCommerce, then Settings, then Shipping, then Classes, and assign the class on the product. Inside flat rate, give each class a cost. Per order charges the dearest class in the cart, which fits one parcel. Per class adds every class together, which overcharges a mixed cart that still ships as one box.
Use a table-rate or courier method when the price must step by weight, such as one band up to 500 g and another above it. That rule does not fit the core cost field. Keep the zone list. The extra method sits inside the zone. It does not replace the zone.
Cash on delivery is not a shipping zone
Cash on delivery is a payment method, not a zone. Open WooCommerce, then Settings, then Payments, then Cash on delivery, and enable it. Use Enable for shipping methods so COD appears only on methods you accept, such as the nationwide flat rate, and not on local pickup.
The core COD screen has no rupee surcharge. If you need an extra fee, add it with a payment-fee extension and show the fee before the order is placed. Do not fake the fee by adding another zone. Prepaid cards and UPI are a different gateway, such as Razorpay for WooCommerce.
When a courier plugin belongs in the setup
Shipping zones already decide what the customer pays. A plugin such as Shiprocket or Delhivery creates the label and the tracking entry. Some of them can also show a live courier rate. You do not need a plugin to save a zone.
If you turn live rates on, decide whether they replace the flat rate. Both on the same zone makes the customer choose between your price and the courier quote. Connect only the API user that plugin asks for. WebJi® is not the courier and does not keep that login.
Place one test order in each zone. It worked when the courier account shows that shipment and checkout charged the method you meant. The store has to stay online while that call runs. That is what e-commerce hosting is for. WooCommerce hosting is the same job when the shop is only WooCommerce.
Why checkout shows no shipping method
No shipping options means the address matched a zone with no enabled method, or the product never asked for shipping.
Check these before you add another zone:
- The product is physical. A virtual or downloadable product does not ask for a zone.
- Shipping location(s) includes India. A setting that omits India blocks Indian addresses.
- The first zone that matches that PIN has at least one method switched on.
- A wider zone is not sitting above the PIN zone. Drag the PIN zone up and save.
- The test PIN has six digits and no space. 560001 is not the same line as 560 001.
- Rest of the world is empty on purpose when the test address is outside India.
If the right method shows in a private window and not in the usual one, a cached cart is holding an old calculation. Exclude the cart and checkout from the page cache, then test the same PIN again.
If the zone is right and checkout returns a server error, stop retrying. Email support@webji.services the zone name, the PIN, the time, and any fatal line under WooCommerce, then Status, then Logs. The average first reply is under 60 minutes, in Hindi or English. +91-141-4941811 is the Jaipur office, not a support line.
Frequently Asked Questions
How do I add a WooCommerce shipping zone for India?
Open WooCommerce, then Settings, then Shipping, then Shipping zones, and click Add zone. Choose India or one state, add a flat rate or another method, and save. Put any PIN or state zone above a zone that already covers all of India.
How do I charge a different rate for each state?
Add one zone per state, or per group of states that share a rate, and put a flat rate on each. Drag a narrower zone above a wider one. Checkout uses only the first zone the address matches.
Can a zone match an Indian PIN code?
Yes. Edit the zone, open Limit to specific zip/postcodes, and enter one PIN per line. Use 560* for every PIN that starts with 560, or 400001...400100 for a numeric range. A star inside a range is not treated as a range.
How do I offer free shipping above a cart total?
Add a Free shipping method on that zone and require a minimum order amount. Keep a flat rate on the same zone so a smaller cart still has a method. Test one cart just under the amount and one just over it.
Why is my shipping method missing at checkout?
The address matched a zone with no method, the product is virtual, or a wider zone above it took the match. Include India under Shipping location(s), enable a method, and move the specific zone up. Retest with a six-digit PIN.
Does WooCommerce calculate shipping by weight?
Not with the core flat rate. That method charges the cost you type, unless a shipping class changes it. Weight bands need a table-rate method or a courier plugin on the same zone.
How do I add a cash on delivery fee?
Enable Cash on delivery under WooCommerce, then Settings, then Payments, and limit it to the shipping methods that should offer it. The core screen has no surcharge field. Add the fee with a payment-fee extension, and show it before the order is placed.
Do I need Shiprocket for shipping zones?
No. Zones and flat rates work without a courier plugin. Add Shiprocket, Delhivery, or a similar plugin when you want labels, tracking, or a live rate. A test order should show in that courier account and match the checkout method.

