A physical product with a downloadable manual is different from a download-only product. Commission an explicit virtual/downloadable matrix before removing shipping from checkout. Otherwise a supplier may fix the digital product and accidentally stop collecting delivery details for a physical bundle.
Who should use this acceptance brief
Businesses selling digital files, services and physical bundles. Use this as a scoped website handover task. Where real system evidence is required, teaching examples are not a substitute.
Source-bound platform fact
WooCommerce distinguishes Virtual from Downloadable: virtual products do not trigger shipping calculation, while a downloadable item can still require shipping unless also marked virtual. WooCommerce: virtual and downloadable · Checked 16 October 2026.
Filled teaching example
Synthetic example, not a client case. Finite inputs, expected decisions and counterexamples follow; no live integration is claimed.
On narrow screens, scroll to read the complete table.
| Input / case | Check basis | Expected decision |
|---|---|---|
| virtual=true, downloadable=true | file only | no shipping |
| virtual=false, downloadable=true | physical + manual | shipping required |
| virtual=true, downloadable=false | service | no shipping; no file |
Run the acceptance exercise
- Classify each representative product by physical fulfilment and digital entitlement independently.
- Use an authorised sandbox to test each flag combination and a mixed cart.
- Confirm the final address, shipping and download screens rather than relying on admin labels.
Interpret the result and retain evidence
The checker returns the proposed shipping and file requirements for one item. A mixed cart still needs shipping when it contains a physical line, even if another line is virtual. Ask the developer to return those two cases separately and to verify actual order completion and download permissions in the store.
Limits before implementation
Not tax classification, a shipping-rate calculator or entitlement enforcement. Plugin, gateway and store settings require current-version testing.
Replay the finite example
Save both files in one folder and run with Node22.13 or newer. The example sends no network requests and changes no account or site. Filled inputs and expected outputs · Inspectable functions
node decision-check.mjs woocommerce-download-shipping-flags.json