WooCommerce

No Shipping, No Checkout: Enforcing Shipping Restrictions in WooCommerce

If your store cannot legally ship a product to a particular state, a customer should never be able to place that order. For many merchants, one order to the wrong place is not just a refund - it is a problem with their payment processor. Here is why the usual approach leaves a gap, and how to close it.

The compliance problem

Plenty of legitimate businesses are required to restrict where they ship. Regulated and high-risk product categories - supplements, hemp and CBD, kratom, vape and nicotine, alcohol, and others - often have state, county, or city-level rules about where a product may be delivered.

Payment processors care about this too. High-risk merchant accounts frequently come with conditions that prohibit selling into banned jurisdictions. A pattern of orders to restricted areas can put your processing at risk, which is a far more expensive problem than a single canceled sale.

Why removing the shipping method is not enough

The common assumption is that if you exclude a state from your shipping settings, the store is safe. In practice, that is where stores get caught out:

  • Fallback rates. A catch-all or country-wide rate quietly covers the state you meant to block, so a rate still appears.
  • Partial exclusions. The restriction is added to some rate rules but not others, so at least one method still returns a price.
  • No hard stop. Even when no rate shows, stock WooCommerce does not always prevent the order - the customer can still reach a payment method and submit.
  • It is easy to misconfigure. Table-rate and zone rules are fiddly. One overlooked row and a banned destination is quietly shippable again.

The result is a store that looks restricted in the settings but still lets a restricted order through at checkout.

What a real block looks like

A proper block is unambiguous. When the cart needs shipping and no shipping option is available for the address, the checkout should:

  • Show that no shipping options are available
  • Remove the payment methods entirely, so there are no card fields to fill
  • Replace the Place Order button with a clear message, so there is nothing to submit
  • Reject the order server-side as a final safety net, on both the classic and the block-based checkout
  • Keep the address form visible, so a customer who mistyped can correct it and continue

That last point matters. The goal is to stop the wrong orders, not to trap a legitimate customer on a dead-end page.

How to set it up

There are two independent jobs, and doing both is what makes the block reliable.

1. Make restricted destinations return no rate

In your shipping method - core Shipping Zones, a table-rate plugin, or live carrier rates - ensure that restricted states or ZIP codes produce no shipping rate at all. Remove them from every rate rule, and confirm there is no fallback rate silently covering them. If any rule returns a price for that address, it is not restricted.

2. Enforce the block at checkout

Add a plugin that turns "no rate available" into "cannot check out." Our free plugin, No Shipping No Checkout for WooCommerce, does exactly this: it watches WooCommerce's calculated shipping and, the moment a shippable cart has no rate, it removes the payment methods and replaces the Place Order button, while keeping the form editable. It is rate-source agnostic, so it works with whatever shipping method you already use, and it never decides which locations are restricted - your shipping settings do.

Together, your shipping rules define where, and the plugin guarantees the block.

Common pitfalls to check

  • A restricted address still checks out. Almost always a shipping rate is still being returned for it. Trace the rule that produces it and remove that destination.
  • Billing vs shipping. Confirm which address WooCommerce uses to calculate shipping so you are testing the right one.
  • Cached checkout. Test in a private window; a cached session can mask a change you just made.
  • County and city rules. WooCommerce works at the state level for zones; county or city restrictions usually need ZIP-code conditions.

Get it right, and keep it that way

Shipping restrictions are not a one-time setup. Laws change, new ZIP codes get added, and a shipping-plugin update can shift behavior. If you would rather not track all of that yourself, CCMS offers managed WooCommerce hosting built for compliance-sensitive stores, and we can help you configure and verify your restrictions end to end.

Start with the free plugin, lock down your shipping rules, and test both an allowed and a restricted address before you rely on it.

Related Resources


Need help staying compliant?

CCMS builds and hosts compliance-sensitive WooCommerce stores, and provides shipping-restriction setup as part of our e-commerce services.

Talk to CCMS