Opens in a new tab
All guides

How to Build a Custom WooCommerce Checkout in Bricks

WooCommerce checkout is a form built from hooks. Here is how to lay it out visually in Bricks β€” billing, shipping, order bumps and a place-order button you control.

A Bricks WooCommerce checkout solves the page where a store earns or loses the sale, and it is the page WooCommerce gives you least control over. The default template is a form built from hooks: to move a field, add a trust badge or change the order of the sections, you are writing PHP against woocommerce_checkout_fields and a dozen action hooks, then hoping the next WooCommerce update does not move them.

The Checkout Builder module turns each part of checkout into a Bricks element you place and style yourself. This guide builds a one-page checkout with billing, shipping, order bumps and a styled place-order button.

Before you start: what not to change

A Bricks WooCommerce checkout rebuilds the layout only. Validation, tax calculation, shipping rates, payment gateways and order creation stay with WooCommerce. That is the right split β€” a custom checkout that reimplements validation is a checkout that will quietly drop orders.

Two rules worth writing down before you touch anything:

  • Never cache the checkout page. Exclude cart, checkout and my-account from full-page caching. A cached checkout serves one customer’s session to another.
  • Test a real order end to end on every change, including a failed payment. The failure path is where custom checkouts break.

The 12 Bricks WooCommerce checkout elements

ElementWhat it does
Billing FieldsEvery billing address field, as individual Bricks elements you can reorder
Billing Address SelectorSaved addresses for returning customers
Shipping FieldsThe shipping address block
Shipping Address SelectorSaved shipping addresses
Shipping MethodsAvailable rates for the entered address
Shipping CalculatorPostcode-based estimate before the address is complete
Payment MethodsThe gateway picker
Place Order ButtonSubmit, with a loading state
Bank DetailsBACS transfer details for that payment method
Add Order BumpsUpsell products shown during checkout
Content UpdaterUpdates a section’s content dynamically as the order changes
Checkout HooksInjects content at any WooCommerce checkout hook

The last one is the escape hatch. If a payment or tax plugin expects to render at a specific WooCommerce hook, drop a Checkout Hooks element at that position and its output appears where it should.

Step-by-step

1. Enable the module and create the template

Switch on Checkout Builder in the Djia Bricks modules panel, then create a Bricks template for the checkout page. Put a real product in your cart before you start editing β€” an empty cart means an empty checkout and nothing to lay out.

2. Lay out two columns

The layout that consistently performs: form on the left, order summary sticky on the right, collapsing to a single column under about 900px with the summary moved to the top as a collapsible row. Shoppers want to confirm what they are buying before they type an address.

Bricks WooCommerce checkout template layout with the form and a sticky order summary
Form on the left, sticky order summary on the right, single column under 900px.

3. Place and prune the billing fields

Because each field is its own element, you remove a field by deleting the element rather than by filtering an array in PHP. Be careful which ones you drop: a field that WooCommerce treats as required but which is not on the page produces a checkout that fails validation with no visible error. If you want a field gone, mark it not-required in the WooCommerce settings as well.

The biggest easy win here is field order. Email first, then name, then address. Asking for a phone number before an email costs you the ability to follow up on an abandoned checkout.

4. Add the order summary

From the cart element set: Cart Content for the line items, Cart Cost for subtotal, tax and total, Coupon Form and Applied Coupons, and Free Shipping Bar β€” the progress bar showing how much more is needed to qualify. That bar is one of the few upsell mechanics that shoppers genuinely appreciate.

5. Add order bumps, carefully

The Add Order Bumps element shows an offer inside checkout. One bump, placed just above the payment section, is the pattern that works. Three bumps is a page that feels like a trap, and the measurable result is usually a lower completion rate, not a higher average order value.

6. Style the place-order button like it matters

Full width, high contrast, with the loading state visible. Label it with the action and the amount β€” “Pay 149 USD” outperforms “Place order”, because it removes the last moment of doubt about what is about to happen.

Conditional checkout content

With the Conditions module, parts of checkout can respond to the order:

  • Hide the shipping block entirely when the cart is only downloadable products.
  • Show a “free shipping unlocked” message once the cart total crosses the threshold.
  • Show a VAT number field only for customers in specific countries.
  • Show a returning-customer address selector only to logged-in users.

The My Account page

Checkout’s neglected sibling. The My Account Builder module lets you map any account endpoint β€” orders, downloads, addresses, edit account β€” to its own Bricks template, add custom navigation items, and reorder or hide the default WooCommerce menu items, with no PHP. If you sell licences or subscriptions, this is where a custom endpoint pays off.

Troubleshooting

Checkout submits and nothing happens

A required field is missing from the layout, so validation fails with an error that has nowhere to render. Add the field back, or make it optional in WooCommerce settings.

Shipping methods do not refresh

WooCommerce refreshes rates over AJAX when address fields change. If a script optimiser defers or combines the checkout script, that stops. Exclude WooCommerce scripts from optimisation on this page.

Totals are wrong for one customer only

Almost always page caching. Confirm cart, checkout and my-account are excluded at every layer β€” plugin cache, server cache and CDN.

A payment gateway’s fields are missing

The gateway renders at a hook your layout no longer outputs. Place a Checkout Hooks element at the right position to restore it.

FAQ

Does this work with any payment gateway?

Gateways that register through the standard WooCommerce payment API work normally. Gateways that replace the whole checkout with their own hosted flow bypass the layout entirely, by design.

Can I build a multi-step checkout?

Yes, by grouping the elements into steps. Measure it rather than assuming: multi-step reduces the perceived effort on long forms, and adds friction on short ones.

What happens if I disable the module later?

Checkout falls back to the standard WooCommerce template. Orders are unaffected β€” the layout is presentation only.

Next steps

Checkout Builder is one of six WooCommerce modules in Djia Bricks, all included in every licence. See the WooCommerce feature page for the complete element list, the documentation for setup detail, or start with the product page guide if you have not customised that yet.

Build it faster with Djia Bricks

15 modules and 400+ native Bricks elements: AJAX filters, Pro Forms, WooCommerce builder, conditions and animations. One plugin, every feature.

See pricingExplore features