Delivery rules

What a rule is made of, the conditions available, why the most specific rule wins rather than the top one, and per-product overrides.

A rule says which products get which delivery window.

The Delivery Rules tab.
The Delivery Rules tab.

Anatomy of a rule

Each rule is one or more conditions, plus a Min and Max in business days, plus an optional scheduled start.

✓ Note
A rule matches a product only when all of its conditions are true. Adding a second condition narrows a rule; it never widens it.

Conditions

ConditionMatches on
Producta specific product
Product categorya category
Shipping classa WooCommerce shipping class
Shipping zonethe customer’s shipping zone
Shipping methodthe method chosen at checkout
Countrythe customer’s shipping countryPro
Postcodepostcode, with wildcards and rangesPro
Stock statusin stock / out of stock / on backorderPro

Each has an is / is not operator. Leave a value on Any to match everything of that kind.

The catch-all default

A rule reading Product is Any matches every product. That is your store-wide default, and it is the rule the plugin creates on activation.

⚠ Warning
Keep one. A product matching no rule shows no estimate at all — which is the most common cause of “it stopped working on some products”.

The most specific rule wins

Several rules can match the same product. You do not order them by hand; the most specific one wins automatically.

ConditionBeats
Producteverything below
Product categoryclass, zone, method, Any
Shipping classzone, method, Any
Shipping zone / Shipping methodAny
Anynothing

So a product rule always beats a category rule, which always beats your default. Add the exception and leave the default alone.

The ↑ / ↓ arrows only break ties between rules of equal specificity. If a product is picking up the wrong window, look for a more specific rule rather than reaching for the arrows.

✓ Note
Premium conditions score between a category and a shipping class. An is not condition scores lowest of all, because an exclusion matches broadly.

Seeing it work

A rule targeting one product affects that product and nothing else. Here the left item is targeted and the right one is not, on the same shop page:

One product shows the estimate, the next does not.
One product shows the estimate, the next does not.

Per-product overrides

Sometimes a rule is more machinery than you need. Every product has its own control, under Product data → Estimated Delivery Date:

The product editor tab.
The product editor tab.
ChoiceEffect
Use store settingsFollow your rules. The default.
Hide for this productNo estimate at all, whatever your rules say.
Custom estimate for this productUse this product’s own Min/Max and ignore your rules.

Custom estimate also offers its own scheduled start date, which is the tidiest way to handle a single pre-order.

An override always beats every rule, because it is set on the product itself.

Tip
Prefer a Product rule where you can. An override is invisible from the settings screen, so months later the only way to discover why one product differs is to open it.

Scheduled start dates

Set one and counting begins from that date instead of today, for as long as it is in the future. Use it for pre-orders, restocks and launches.

⚠ Warning
Clear it once the stock lands. A window that seems stuck far ahead is almost always a scheduled start nobody removed.

Products that never match

No rule applies to:

  • Virtual products — nothing is being delivered. It is the Virtual checkbox that matters, not Downloadable.
  • External / affiliate products — you are not fulfilling the order.
  • Products that are not purchasable, such as one with no price.

Checking a rule without guessing

If you have WP-CLI, this reports which rule actually won:

wp edfw estimate 42

It prints the matched rule and the resulting dates, which distinguishes “no rule matched” from “the wrong rule matched” — two problems that look identical on the storefront.