The checkout page is where revenue either happens or disappears. Industry data consistently shows that roughly 70% of online shopping carts are abandoned before purchase, and a significant portion of that abandonment happens at checkout. For WooCommerce store owners, the default checkout experience is functional but not optimized. Customizing the checkout flow to reduce friction, build trust, and streamline the path to purchase is one of the highest-ROI changes you can make to your store.
This guide covers the practical techniques for customizing your WooCommerce checkout, from modifying form fields with built-in hooks through building multi-step experiences and implementing express checkout options. Whether you are a developer building checkout customizations for clients or a store owner looking to improve your conversion rate, these approaches work with both the classic checkout shortcode and the newer Checkout Block.
Why Checkout Optimization Matters
Cart abandonment at checkout typically falls into a few predictable categories. Unexpected costs like shipping and taxes appearing late in the process account for roughly 48% of abandonments. A checkout that requires account creation drives away about 24% of shoppers. A process that feels too long or complicated loses another 17%. Security concerns cost about 18% of potential sales.
Each of these problems is solvable through checkout customization. Showing estimated shipping costs early, enabling guest checkout, reducing the number of form fields, and adding trust signals all directly address the reasons people leave. The WooCommerce checkout is highly customizable through both hooks and the newer block-based approach, giving you multiple paths to implement these improvements.
Customizing Checkout Fields with Hooks
WooCommerce provides the woocommerce_checkout_fields filter as the primary way to modify checkout form fields. This filter gives you access to all checkout field groups: billing, shipping, account, and order.
Removing Unnecessary Fields
The fastest conversion improvement is often removing fields that your store does not need. If you sell digital products, you do not need shipping address fields. If you do not need a phone number, remove it. Every field you remove reduces friction.
add_filter( 'woocommerce_checkout_fields', function( $fields ) {
// Remove company field
unset( $fields['billing']['billing_company'] );
// Remove phone if not needed
unset( $fields['billing']['billing_phone'] );
// Remove order notes
unset( $fields['order']['order_comments'] );
return $fields;
} );
Adding Custom Fields
Sometimes you need information that WooCommerce does not collect by default. A delivery date preference, a gift message, a VAT number for B2B sales, or a referral source for marketing attribution. Adding custom fields requires both displaying the field and saving its value.
// Add the field
add_filter( 'woocommerce_checkout_fields', function( $fields ) {
$fields['billing']['billing_vat_number'] = array(
'type' => 'text',
'label' => 'VAT Number',
'placeholder' => 'EU VAT Number (optional)',
'required' => false,
'class' => array( 'form-row-wide' ),
'priority' => 120,
);
return $fields;
} );
// Save the field value
add_action( 'woocommerce_checkout_update_order_meta', function( $order_id ) {
if ( ! empty( $_POST['billing_vat_number'] ) ) {
update_post_meta(
$order_id,
'_billing_vat_number',
sanitize_text_field( wp_unslash( $_POST['billing_vat_number'] ) )
);
}
} );
Reordering Fields
Field order affects completion rate. Email and name should come first because they are the easiest to fill. Address fields follow. Optional fields go last. WooCommerce uses a priority system to control field order, lower numbers appear first.
add_filter( 'woocommerce_checkout_fields', function( $fields ) {
$fields['billing']['billing_email']['priority'] = 5;
$fields['billing']['billing_first_name']['priority'] = 10;
$fields['billing']['billing_last_name']['priority'] = 15;
$fields['billing']['billing_country']['priority'] = 20;
$fields['billing']['billing_address_1']['priority'] = 30;
$fields['billing']['billing_city']['priority'] = 40;
$fields['billing']['billing_state']['priority'] = 50;
$fields['billing']['billing_postcode']['priority'] = 60;
return $fields;
} );
Building a Multi-Step Checkout
A multi-step checkout breaks the single long form into smaller, less intimidating steps. Research shows that multi-step checkouts can improve conversion rates by 10-15% compared to single-page checkouts, primarily because each step feels manageable and a progress indicator gives shoppers a sense of momentum.
The Step Structure
A typical multi-step WooCommerce checkout uses three or four steps. Step one collects contact information and email. Step two handles the shipping address and shipping method selection. Step three covers the payment method and billing details. An optional step four shows an order review before final submission.
Implementation Approaches
You can build a multi-step checkout in several ways. The simplest is using a WooCommerce multi-step checkout plugin like CheckoutWC, Flux Checkout, or WooCommerce MultiStep Checkout. These plugins provide pre-built step layouts, progress indicators, and mobile-optimized designs without custom code.
For custom implementations, the approach involves wrapping checkout field groups in step containers, using JavaScript to show and hide steps, adding a progress indicator, and validating each step before allowing progression to the next. The key technical consideration is that WooCommerce validates all fields on form submission, so your step validation needs to check fields client-side before the user moves forward, while the final submission still triggers server-side validation.
Express Checkout Options
Express checkout lets returning customers and mobile users skip the form entirely. Apple Pay, Google Pay, and Stripe Link allow one-tap or one-click purchases using payment information already stored on the customer’s device or in their payment provider account.
Apple Pay and Google Pay
Both are available through the WooCommerce Stripe extension or the WooCommerce Payments plugin. Once configured, express payment buttons appear at the top of the checkout page. Customers authenticate with Face ID, Touch ID, or their device PIN, and the payment processes with stored card details and address information. No form fields to fill out.
Implementation is straightforward: install the Stripe extension, enable the express payment methods in the Stripe settings, and configure your domain verification for Apple Pay. The buttons appear automatically on both the cart and checkout pages.
Stripe Link
Stripe Link saves customer payment and shipping information across all Stripe-enabled stores. When a customer enters their email at checkout, Link checks if they have stored information and offers to auto-fill everything. This significantly reduces checkout time for returning internet shoppers, even if they have never purchased from your specific store before.
Field Validation for Better UX
Default WooCommerce validation happens on form submission, which means customers fill out the entire form before learning about errors. Real-time validation, checking fields as the customer completes them, prevents frustration and reduces abandonment.
Custom Validation Rules
WooCommerce provides the woocommerce_after_checkout_validation action for server-side validation:
add_action( 'woocommerce_after_checkout_validation', function( $data, $errors ) {
// Validate VAT number format for EU countries
if ( ! empty( $data['billing_vat_number'] ) ) {
$vat = strtoupper( $data['billing_vat_number'] );
if ( ! preg_match( '/^[A-Z]{2}[0-9A-Z]{2,12}$/', $vat ) ) {
$errors->add(
'validation',
'Please enter a valid EU VAT number (e.g., DE123456789).'
);
}
}
}, 10, 2 );
For real-time client-side validation, add JavaScript that validates fields on blur events and shows inline error messages. This gives customers immediate feedback without waiting for a form submission round-trip.
Conditional Fields
Conditional fields appear or disappear based on other selections. Show a gift message field only when the customer checks a gift wrapping option. Display business fields like VAT number and company name only when the customer selects a business account type. Show delivery time preferences only for physical products.
Conditional fields keep the checkout clean by default while collecting additional information when relevant. Implementation combines the checkout fields filter with JavaScript to handle the show/hide behavior on the frontend.
// Add a conditional gift message field
add_action( 'woocommerce_after_order_notes', function( $checkout ) {
echo '<div id="gift-fields" style="display:none;">';
woocommerce_form_field( 'gift_message', array(
'type' => 'textarea',
'label' => 'Gift Message',
'class' => array( 'form-row-wide' ),
), $checkout->get_value( 'gift_message' ) );
echo '</div>';
woocommerce_form_field( 'is_gift', array(
'type' => 'checkbox',
'label' => 'This order is a gift',
'class' => array( 'form-row-wide' ),
), $checkout->get_value( 'is_gift' ) );
} );
Checkout Blocks vs Classic Shortcode
WooCommerce now offers two checkout implementations: the classic checkout shortcode and the newer Checkout Block. Understanding the differences helps you choose the right approach for your store.
The classic shortcode checkout uses PHP hooks (woocommerce_checkout_fields, template overrides) for customization. It has years of plugin compatibility and extensive documentation. Most existing checkout plugins and customizations target the shortcode checkout.
The Checkout Block uses the WordPress block editor and React-based extensibility. It offers built-in express payment support, better mobile responsiveness, and is the future direction of WooCommerce. However, it has a different extension API that many existing plugins do not yet support.
| Feature | Classic Shortcode | Checkout Block |
|---|---|---|
| Customization | PHP hooks and template overrides | Block editor and JS extensibility API |
| Plugin compatibility | Excellent, years of ecosystem | Growing, major plugins updating |
| Express payments | Requires plugin/extension setup | Built-in support |
| Mobile experience | Depends on theme | Optimized by default |
| Future support | Maintained but not primary focus | Active development priority |
For new stores, the Checkout Block is the recommended starting point. For existing stores with extensive customizations, migrating to the block checkout requires testing all your customizations against the new API. Plan the migration as a project rather than a quick switch.
Conversion Optimization Best Practices
Beyond technical customization, several UX practices consistently improve WooCommerce checkout conversion rates:
- Enable guest checkout, Do not force account creation. Offer it as an option after purchase instead.
- Show trust signals, Security badges, payment provider logos, and money-back guarantees near the payment button reduce anxiety.
- Add a progress indicator, For multi-step checkouts, a clear indicator showing steps completed and remaining reduces perceived effort.
- Display the order summary, Keep the cart contents visible throughout checkout so customers never feel uncertain about what they are buying.
- Minimize distractions, Remove the main site header, footer, and sidebar from the checkout page. The only action available should be completing the purchase.
- Show estimated delivery, If you ship physical products, showing expected delivery dates during checkout gives customers confidence and urgency.
- Auto-detect address fields, Google Places API integration that auto-fills address fields from a single input saves time and reduces errors.
- Offer multiple payment methods, Credit cards, PayPal, Apple Pay, Google Pay, and buy-now-pay-later options like Klarna or Afterpay each capture customers who prefer that method.
Testing Your Checkout Changes
Every checkout modification should be tested before going live. WooCommerce checkout touches payment processing, order creation, email notifications, and inventory management, a bug in checkout directly costs revenue.
Use WooCommerce’s built-in test modes for payment gateways. Stripe, PayPal, and most gateways offer sandbox or test modes that process test transactions without real money. Place test orders through the full checkout flow after every change.
Test on mobile devices specifically. Over 60% of ecommerce traffic comes from mobile, and checkout is where mobile UX problems cause the most damage. Verify that form fields are properly sized, buttons are tappable, and express payment methods work correctly on both iOS and Android.
For A/B testing checkout changes, tools like Google Optimize (now part of Google Analytics), Optimizely, or WooCommerce-specific plugins let you test different checkout layouts against each other with real traffic. Run tests for at least two weeks or until you have statistical significance before committing to a change.
The WooCommerce checkout is one of the most impactful pages on your store. Every percentage point improvement in checkout conversion translates directly to revenue. Start with the highest-impact changes, removing unnecessary fields, enabling guest checkout, adding express payment, measure the results, and iterate from there.

