Checkout does not render shipping methods
-
Hi WooCommerce Team,
I’m reporting what appears to be a core WooCommerce Checkout bug affecting shipping method rendering.
The issue has been confirmed NOT related to my theme (Flatsome) and NOT related to AJAX blocking (verified by hosting).
❗
ISSUE SUMMARY
Shipping works perfectly on the Cart page, but does NOT appear at all on the Checkout page.
- No shipping section
- No shipping methods
- No error messages
- The Checkout totals simply show without any shipping row
It looks like the Checkout does not initialize the shipping calculation AJAX, even though all conditions for shipping are met.
🧪
STEPS TO REPRODUCE
- Add a physical product to cart
- Go to /cart → Shipping methods load normally
- Proceed to /checkout →
❌ Shipping block completely missing
❌ No shipping method selector
❌ No AJAX request triggered to calculate shipping
✔ Billing fields load
✔ Payment methods load
✔️
TROUBLESHOOTING COMPLETED (VERY IMPORTANT)
1. Checkout Page Recreated
- Deleted original Checkout page
- Created new page → added [woocommerce_checkout]
- Assigned in WooCommerce → Settings → Advanced
- Page loads correctly (no 404)
- ❌ Shipping still missing
2. Shipping Configuration Verified
- Zone: Singapore
- Method: Flat Rate (SGD 3.90)
- Product is NOT virtual
- No shipping classes
- No conditional logic
- No other shipping plugins
➡️ Shipping works in Cart → confirms the shipping zone logic is correct
3. THEME-INDEPENDENT (CRITICAL)
- Switched to Storefront
- Issue persists identically
- Flatsome support explicitly stated:
“Same issue happens with Storefront, so it’s not theme-related. It’s a WooCommerce issue.”
➡️ Confirms the problem is in WooCommerce core or checkout logic.
4. Plugin Conflict Test
- Disabled ALL plugins except WooCommerce
- Issue persists
➡️ Not caused by 3rd-party plugins
5. AJAX VERIFIED WORKING (CRITICAL)
Hosting (SiteGround) manually checked server logs and confirmed:
- No ModSecurity blocks
- No firewall blocks
- No 403/404 AJAX drops
- No blocked admin-ajax.php calls
- They also offered to disable the whole cache layer temporarily → no change
➡️ AJAX is not blocked at server level
➡️ But WooCommerce is not triggering shipping AJAX in Checkout
6. Cache Cleared Everywhere
- Browser cache
- SiteGround cache (Purge SG Cache)
- WooCommerce transients cleared
- No effect
7. No custom code & no template overrides
- No code in functions.php
- No overrides in /woocommerce/checkout folder
- No Scripts Manager modifications
➡️ Environment is clean
8. Endpoints Verified
- /checkout loads normally
- No 404 on endpoints
- WooCommerce → Status → Tools → Regenerated tables
➡️ Endpoint system is functioning
📌
TECHNICAL OBSERVATION
Since:
- shipping loads correctly in Cart
- shipping zone matches the address
- AJAX is not blocked
- Checkout template is default (tested with Storefront)
- no plugins interfere
- no virtual products
- correct country matching
The issue appears to be:
Shipping block in Checkout is not being generated at all due to a WooCommerce internal condition returning false.
Specifically, this looks like a failure in one of these mechanisms:
- needs_shipping()
- WC_Checkout::get_value() shipping address logic
- show_shipping() logic
- wc_shipping_enabled() returning false only in checkout
- or shipping initialization action not firing:
- woocommerce_review_order_before_shipping
- woocommerce_review_order_after_shipping
No hooks seem to run because the whole block is missing from the markup.
🙏
REQUEST
Please treat this as a high-priority bug.
The store cannot launch without working Checkout shipping.
You must be logged in to reply to this topic.