You have carefully organized your store's shipping options: a strict local zone for "California" offering a $5 flat rate, and a broad zone for "United States (All States)" offering a $15 rate. However, a frustrating routing bug occurs where a customer entering a California zip code is only shown the expensive $15 national rate, completely hiding the cheaper regional rate they are eligible for.
This glitch is caused by a structural top-down logic failure inside the WooCommerce Shipping Zones evaluation engine. WooCommerce processes shipping zones sequentially from the top of the list to the bottom. The moment it matches the customer's address to a valid zone, it halts execution completely and ignores all remaining rows. If your broad "United States" zone is positioned above your specific "California" zone, WooCommerce matches the country first, locks in that zone's expensive pricing, and never reaches the more specific regional rule below it.
The Solution
Fixing shipping calculations requires realigning your zone hierarchies from most specific to least specific.
-
Reorder the Shipping Zone List: Navigate to WooCommerce > Settings > Shipping > Shipping Zones.
-
Drag-and-Drop to Re-index: Use the leftmost anchor icon to drag your most granular zones (zip-code restricted or state-specific areas) to the absolute top of the list. Place your broadest global continental zones at the absolute bottom. Click Save Changes.
-
Apply Postcode Wildcards Wisely: If a specific state boundary continues to fail validation loops, bypass text string matches and use strict numerical ranges separated by ellipses or wildcards to ensure precise matching logic:
902*
90001...90050
-
Enable Shipping Debug Mode: Go to Shipping Options and toggle Enable shipping debug mode. Test the checkout with a local address to verify that WooCommerce is bypassing the rate cache and reading your new top-down hierarchy accurately.
