• Hi, I hope you’re well!

    I’m extending a WooCommerce store to support multiple shipping packages with different delivery addresses (using custom code rather than a third-party plugin).

    The issue is that the WooCommerce Checkout Block always displays a global Shipping Address form, even when shipping addresses are managed separately for each package.

    I’ve checked the documentation for WooCommerce 11.2.1 but couldn’t find a public API to conditionally hide or replace woocommerce/checkout-shipping-address-block while preserving the Billing Address form and native checkout functionality.

    Is there a supported way to achieve this, or is this currently a limitation of the Checkout Block API?

    I’d prefer to avoid CSS hiding, DOM manipulation, or overriding native WooCommerce components.

    I’ve already achieved the desired functionality with Classic Checkout, but I’d prefer to use the Checkout Block, hence my enquiry. 🙂

    Thank you so much for any advice!

Viewing 3 replies - 1 through 3 (of 3 total)
  • I ran into the same wall extending the Checkout Block for a multi-address setup. As far as I can tell from the WooCommerce 11.x docs, there is no supported public API to conditionally hide just the shipping address block while keeping billing and the native flow intact. The block API exposes registration and slot fills, but not conditional visibility for core inner blocks. The blunt options people use are unregistering the block entirely or CSS hiding, and both break what you are trying to preserve. What I ended up doing was keeping the native blocks untouched and handling per-package addresses through custom Store API extension data, with the shipping form collapsed to a single package at checkout time. It is worth opening this as a feature request on the WooCommerce Blocks GitHub repo, since the team does track checkout extensibility gaps there, and this exact one comes up a lot.

    The Checkout Block currently doesn’t provide a straightforward public API to conditionally remove or replace just the global shipping address block while preserving the native billing form and checkout functionality.

    WooCommerce Blocks supports extensibility, but hiding or replacing a core block like woocommerce/checkout-shipping-address-block may require APIs that aren’t exposed for this specific use case. I’d recommend checking the official WooCommerce Blocks extensibility documentation and asking in the WooCommerce GitHub repository whether a supported hook exists in version 11.2.1. Avoiding CSS or DOM manipulation is sensible, since those approaches can be fragile across updates.

    Plugin Support Stuart Duff – a11n

    (@stuartduff)

    Automattic Happiness Engineer

    Thanks for the detailed write-up, and nice work getting this running on the classic checkout already.

    To answer directly: from what I have investigated, there isn’t a supported public API in the Checkout Block today to conditionally hide or replace just the woocommerce/checkout-shipping-address-block while keeping the Billing Address block and the native flow intact. The block’s documented extensibility surface is Filters, Slot Fills, and Inner Blocks (overview here), and none of those expose per-block conditional visibility for a core inner block.

    A few specifics that map to what you’re trying to do:

    • The available filters adjust values and labels, not block visibility. The additionalCartCheckoutInnerBlockTypes filter controls which inner block types are allowed inside an area like the shipping address block, so it governs what can be added, not whether the block renders.
    • The supported field-removal path intentionally removes fields for both shipping and billing together (the docs note that the billing shape should match the shipping shape), so it won’t let you drop shipping while preserving billing.
    • For the shipping step itself, the ExperimentalOrderShippingPackages slot fill renders inside that step, but the Experimental prefix means it isn’t a stable public API to build on long-term.

    It seems like the supported approach is to leave the native blocks untouched and handle per-package addresses through custom Store API extension data, rather than removing or replacing the shipping address block on the front end. That keeps the native checkout behavior intact while your custom code manages the per-package addresses.

    Since this is a genuine extensibility gap rather than something you’re missing, it’s worth adding your voice to the feature request so the team can prioritize it. There’s already a related one open here: https://woocommerce.com/feature-request/block-checkout-option-to-show-separate-billing-and-shipping-addresses-by-default, and new API requests can go on the repo:

    https://github.com/woocommerce/woocommerce/issue

    To help you faster, we use AI tools as a support system in this forum: https://wordpress.org/support/topic/how-the-woocommerce-team-uses-ai-in-this-forum/

Viewing 3 replies - 1 through 3 (of 3 total)

You must be logged in to reply to this topic.