Skip to content
Browse docs

How bookings become WooCommerce orders

One order per booking trip, what each order status means for the places, and the safety net for odd payment timings.

Every paid booking in Tempo is a real WooCommerce order. That's not plumbing trivia; it's why refunds, payment records and your accountant's export all behave like a normal online shop. This article is the reference for how the two systems talk.

Your site may use different words. Tempo lets you rename class, student and teacher under Settings → Branding & vocabulary; these docs use the defaults.

What an order looks like

One checkout produces one order, which can contain several bookings (a parent paying for three children at once). Each order line is named after the class, and carries visible Student, Package, Sessions and Included dates rows, so an order makes sense on the admin order screen and in the order emails without opening Tempo at all. Even £0 bookings (complimentary or fully credit-paid) get an order, so every booking has the same paper trail.

A WooCommerce order in wp-admin containing a Tempo booking line: class-named line item with Student/Package/Included dates meta visible.
A WooCommerce order in wp-admin containing a Tempo booking line: class-named line item with Student/Package/Included dates meta visible.

What each order status means

Order statusWhat it means for the booking
Pending payment / On hold / FailedPlaces stay held until the reservation expires. The member is told, with the exact time the hold runs out. A failed card doesn't release the places early; the family is usually one retry away from paying.
Processing / CompletedThe bookings are confirmed. This is the normal happy path, and it's repeat-proof: a payment provider sending the same confirmation twice can never double-book, double-charge credit or double-email.
CancelledBookings cancelled, places released.
RefundedThe order's remaining bookings are cancelled and any credit that was spent at checkout is returned, once. See Recording refunds for the proper refund flow.

Skipping Processing for paid bookings

WooCommerce only marks an order Completed by itself when everything in it is a virtual download, so a paid booking order normally parks at Processing even though there's nothing left to fulfil. If that dangling status bothers your bookkeeping, switch on Tempo → Settings → Booking & checkout → Complete paid orders automatically (off by default): a successful gateway payment then lands the order straight on Completed, and the family receives WooCommerce's "Completed order" email instead of the "Processing" one.

It's deliberately narrow. Only orders made entirely of booking lines qualify, and only when a payment gateway confirms the payment, so statuses staff choose by hand (manual bookings, hand-edited orders) are never overridden. And the safety net below still wins: a payment that lands after the hold expired parks the order On hold with no booking, setting or no setting.

The safety net: payment landing after the hold expired

Occasionally a member completes payment after their 30-minute hold has lapsed (classically, sitting in a payment provider's popup). Tempo re-checks availability at the moment of confirmation, the one gate every payment route passes through:

  • Places still free: the paid booking is honoured and created normally.
  • A place was taken in the meantime: no booking is created, because the family who took the place fairly keeps it; capacity is never exceeded. The order is parked On hold with a note naming the lost dates. In wp-admin the order shows a prominent "Tempo booking NOT completed" alert; the member sees a calm note that the club will be in touch, and nothing is needed from them.
  • Your options as staff: arrange an alternative or a refund; or, if a place frees up, set the order back to Processing and the booking completes normally.

This is rare, but when it happens you'll want to move quickly; the order alert and the Bookings hub filters make these easy to spot.

Housekeeping you never need to do

A background task tidies expired holds every few minutes, but capacity never depends on it: an expired hold stops counting the second it lapses. A slow server cron can't oversell a class or block a sale.

Note

Guest checkout settings don't affect bookings; booking always requires a logged-in member because every booking belongs to a named student. Your shop can still sell other things to guests if it likes.

Was this helpful?

Still stuck?

Most questions are answered in a minute here. When they aren't, a real person replies.

Tempo customers Send us the question through the support form. The person who built it reads every message. Contact support
Not a customer yet? Demos, pricing and anything pre-sales. Ask before you buy. Ask a pre-sales question