Skip to main content

Multi-Step Checkout

Overview​

Multi-Step Checkout breaks WooCommerce's single checkout page into a sequence of steps — by default Cart, Shipping, Payment and Review — with progress saved as the customer moves through them. A customer who leaves and comes back is restored to the step they reached, with what they had already entered.

Because each step is validated on its own, a customer is told about a problem at the step that caused it instead of meeting every error at once on submit.

The module also carries two conversion features: trust badges shown beside the payment step, and an order bump — a single product offered during checkout.

It is for long checkouts, where a single form loses people.

Availability​

ItemValue
Module keymulti-step-checkout
TierPremium
Entitlement keymulti-step-checkout
Admin tabmulti-step-checkout
Enabled optionaiowc_module_enabled_multi-step-checkout (off until turned on)
REST namespaceaiowc/v1

Enabling the module creates the two tables below, seeds the defaults and schedules the session cleanup job.

registerHooks() returns early when the licence does not grant multi-step-checkout.

Settings​

Stored in the bundled option row aiowc_msc_settings.

Stored keyDefaultMeaning
enable_multi_steptrueWhether checkout is split into steps.
step_labels['Cart','Shipping','Payment','Review']The four step names shown in the progress indicator.
show_trust_badgestrueWhether trust badges are shown.
trust_badgesSecure Checkout (lock), Money-Back Guarantee (shield)The badges themselves: a label and an icon name each.
order_bump_product_id0The product offered as an order bump. 0 means none.
session_ttl_days30How long a saved checkout session is kept.

🔴 The default trust badges make a claim the store may not honour. Money-Back Guarantee ships as a default badge and is displayed to customers as soon as the module is on. If the store has no such guarantee, remove or reword that badge before going live — it is a statement to the customer, not decoration.

Steps and saved progress​

Each step is saved to the module's session table as the customer completes it, keyed by a session id and, for a signed-in customer, their user id. The stored step data and the last step reached are what GET /checkout/restore returns, so the progress indicator and the form come back to where the customer left off.

Sessions carry an expiry derived from session_ttl_days and are removed by the cleanup job once past it.

Step fields​

The module keeps its own field table so a field can be assigned to a particular step, with its own label, type, required flag, options, validation rules and sort order. This is how a field is made to appear at step 2 rather than wherever the checkout form would otherwise put it.

Order bump​

When order_bump_product_id names a product, it is offered on woocommerce_review_order_before_payment — beside the payment section, at the point the customer is committing. One product, not a list.

Admin screen​

The Multi-Step Checkout tab edits the step labels, the trust badges, the order bump product and the session lifetime, and manages the per-step fields.

REST API endpoints​

All routes are on aiowc/v1 and answer with the { success, data, message } envelope.

MethodPathPurposePermissionRequired args
GET/checkout/steps/fieldsEvery step field definition.manage_woocommerce–
POST/checkout/steps/fieldsCreate a step field.manage_woocommerce–
PATCH/checkout/steps/fields/{id}Update a step field.manage_woocommerceid
DELETE/checkout/steps/fields/{id}Delete a step field.manage_woocommerceid
POST/checkout/save-stepSave the customer's progress at a step.Nonce, rate-limited–
POST/checkout/validate-stepValidate one step without submitting the order.Nonce, rate-limited–
GET/checkout/restoreRestore a saved session's step and data.Public, rate-limited–

These sit under /checkout/steps/ and the three step verbs, while the separate Custom Checkout Fields module owns /checkout/fields and /checkout/settings, so neither shadows the other.

WooCommerce integration​

HookWhat the module does
woocommerce_before_checkout_formDraws the step progress indicator above the form.
woocommerce_checkout_fieldsAssigns the configured fields to their steps.
woocommerce_checkout_processValidates the submission across the steps.
woocommerce_review_order_before_paymentShows the trust badges and the order bump.
wp_enqueue_scriptsLoads the step navigation and save-progress assets.

Database schema​

TableHolds
{prefix}aiowc_checkout_sessionsSaved progress: the session id, the customer if signed in, the step data, the last step reached, and an expiry.
{prefix}aiowc_msc_checkout_fieldsStep field definitions: key, label, type, the step it belongs to, required flag, options, validation rules, sort order, enabled flag.

The field table carries an msc_ prefix because the plainer name belongs to the separate Custom Checkout Fields module.

Background jobs​

HookIntervalWork
aiowc_checkout_cleanup_sessionsdailyDeletes saved sessions past their expiry.

The job runs on WP-Cron, first scheduled an hour after the module is enabled.

Action hooks for integrators​

HookFired when
aiowc_track_eventThe module is enabled or disabled.

Entitlement limits​

multi-step-checkout is an on/off grant with no cap on the number of step fields or saved sessions. The order bump is one product by design, not a limit imposed by the licence.

Health check​

The module reports a warning when its tables are missing or WooCommerce is inactive, and otherwise reports that it is functioning normally. A disabled module reports that it is disabled.

Known gaps​

  • The default Money-Back Guarantee trust badge is a claim about the store, shown by default, that a given store may not offer. It should be reviewed before the module goes live.
  • Two modules filter woocommerce_checkout_fields — this one and Custom Checkout Fields. With both enabled they both modify the same field array, and nothing coordinates the result or warns that both are active.
  • The step count is fixed at four by the default labels; the setting renames the steps rather than adding or removing one.
  • The order bump is a single product id with no targeting — it is offered to every customer regardless of what is in the cart.
  • A saved session stores what the customer has entered until its expiry, which is 30 days by default. That is checkout data at rest, and it is worth accounting for in a store's retention and privacy position.