Paid bookings (WooCommerce)
Set Checkout to Pay with WooCommerce to take payment. WooCommerce must be active; if it isn't, the bookable shows its closed message instead of falling back to free bookings.
What visitors see
They choose a date, a time, tickets and extras, answer your questions and sign the waiver, then Book now takes them straight to checkout. The cart line shows the date, time, tickets and extras, and the price is the total of what they chose.
Their spots are held for 15 minutes while they check out, and the hold renews while they're on the cart and checkout pages. If a hold runs out and the session has filled in the meantime, the booking leaves the cart with a note saying so.
A booking already in the cart can still be paid for after Stop booking passes, as long as its hold hasn't run out: someone who adds the 3:30 session at 3:58 and pays at 4:03 keeps it. Past Stop booking the hold isn't renewed, so it lasts at most 15 minutes more.
Because a hold takes real spots, adding bookings is protected against scripts that would fill sessions without paying:
- If the site uses the Simple Cloudflare Turnstile plugin, Book now must pass its security check, as free reservations do. Without Turnstile keys, there's no check.
- One connection can hold up to four bookings' worth of spots (four times Most tickets in one booking) on a bookable that aren't paid for yet, in a cart or on an order waiting for payment, and add up to six bookings' worth in an hour. With Turnstile on, scripts are already stopped, so these rise to eight and twenty: many people can share one connection (a campus, an office, a phone carrier, your own guest Wi-Fi). Paid bookings don't count toward this, and neither do tries that didn't get a spot, like a session that just filled.
- If these limits turn people away, Bookings → Schedule says how many times in the last week. Take phone bookings with Add booking on the Schedule rather than the booking form: no limit applies there.
Before you take bookings
Use card payment methods only (for example WooCommerce Payments, Stripe or Square). WooCommerce's Direct bank transfer, Check payments and Cash on delivery put orders On hold or Processing before any money arrives, and those orders keep their spots until you cancel them, so someone could book a whole session with a check that never comes. Turn those payment methods off under WooCommerce → Settings → Payments, or, if you do take them, watch On hold orders and cancel unpaid ones.
Orders
Each booking is one line on the order, with the date, time, tickets, extras, answers and waiver signature underneath. WooCommerce's own order emails include those lines, so customers get them with their receipt, along with a Manage your booking button for each booking (see Manage my booking). Categories: give bookables categories under Bookings → Categories (or the Categories panel when editing a bookable). Each one is also a WooCommerce product category, so paid bookings show up in WooCommerce reports and in coupons limited to a category. A new category creates a matching product category, and renaming or moving it changes that one too. If the shop already has a product category with the same slug (for example "events"), the two are shared: bookings join the shop's category, and it isn't renamed from Bookings. Deleting a booking category leaves the product category in place. The booking products stay hidden from the shop and category pages, and a category holding only bookings stays out of the shop's category lists. The bookable's Note for people who book (Booking Form) appears under the booking on the order page, in those emails and in My Account.
- Processing, Completed and On hold orders keep the spots.
- Cancelled and Refunded orders give the spots back. So does refunding the booking line itself (its quantity, 1, in the refund form) or deleting the line from the order. A refund of just an amount, with no quantity, keeps the spots: use it for a partial refund when the people are still coming.
- An order waiting for payment keeps its spots for at least an hour (or your WooCommerce Hold stock time, if longer).
- Bookings are made on the booking form, or with Add booking on Bookings → Schedule. WooCommerce's order editor won't add a booking's product to an order: it wouldn't book a time or take a spot.
- Restoring an order from the trash gives its bookings back their spots if there's still room (otherwise it goes On hold, as below).
When a session fills before someone pays
If a customer pays after their hold ran out (for example from the "pay for this order" link a day later) and the session filled in the meantime, the booking isn't confirmed, so the session is never overbooked. The order goes On hold with a note explaining why. The customer gets an email saying their booking couldn't be confirmed and that you'll refund them or move them to another time, and you get an email too. Refund the order, or make room in the session and set the order back to Processing to confirm it. On Bookings → Schedule it shows as Paid, but the session was full.
Each bookable has a hidden WooCommerce product behind it. You don't need to edit it: it takes its name and image from the bookable, it isn't listed in the shop or search results, and opening it goes to the bookable's page.