A fully formed booking with WooCommerce and WooCommerce Bookings consists of two pieces:
- A booking entry visible or editable on your website dashboard under Bookings > All Bookings.
- A corresponding order viewable or editable on your website dashboard under WooCommerce > Orders.
The relationship between bookings and orders is an important concept to understand in the context of managing bookings and transactions.
When a customer adds a booking product to their cart and checks out, it represents their intention to reserve a specific time slot or availability. The checkout process creates a booking entry in the system, capturing details such as the date, time, duration, and any additional requirements.
However, a booking alone does not complete the transaction. The shop manager also needs to create an order to confirm the customer’s reservation and finalize the process. The order represents the actual purchase or acquisition of the booked product or service.
The connection between bookings and orders is that a booking serves as a precursor to an order. Once a customer makes a booking, the system generates an order to formalize the transaction and complete the purchase. The association of the booking information with the corresponding order, creates a clear link between the reserved time slot and the confirmed purchase.
These two entities have independent statuses that are bidirectionally synchronized; order status changes can update booking status, and booking status changes can update order status.
Finding the WooCommerce order for a Booking
↑ Back to topYou can find the corresponding order of a booking in the following locations:
- On the list of Bookings under Bookings > All Bookings on the dashboard, in the “Order” column.
- On the Edit Booking screen for a specific booking, as a link under the Booking Details header.


For Bookings with the “In Cart” status, no corresponding order exists.
Finding the Booking for a WooCommerce order
↑ Back to topThe corresponding order links to the booking as the item purchased within the “Edit Order” screen.

For a booking to be considered paid, it is necessary for the payment associated with the linked order to be successfully processed.
Why do orders have a status of Processing and not Completed?
↑ Back to topOnce a customer pays for an order, WooCommerce only sets the status of the order to Completed if all products purchased in the order are both virtual and downloadable. If all the products in an order are physical and/or virtual without being downloadable, WooCommerce marks the order as Processing. This helps you manage the shipping of physical items.
Bookable products marked as virtual override the behavior of normal virtual products. As a result, when an order only contains a virtual bookable product, WooCommerce marks the order as Completed automatically, if the payment has gone through.
By contrast, when an order contains a bookable product that is not virtual, the system sets the order status to Processing.
If you need more control, you can use the Order Status Manager extension to manage the order statuses in more detail, regardless of product type.
Booking Statuses
↑ Back to top| Status | Internal Key | Description |
|---|---|---|
| In Cart | in-cart | Booking created when customer adds a bookable product to the cart. Holds the time slot. |
| Was In Cart | was-in-cart | Booking was removed from the cart by the customer (temporary state). |
| Unpaid | unpaid | Booking has been checked out but payment has not been received yet. |
| Pending Confirmation | pending-confirmation | Booking requires admin approval before the customer can pay. |
| Confirmed | confirmed | Admin has approved the booking. Customer can now proceed to pay. |
| Paid | paid | Payment has been received for this booking. |
| Complete | complete | The booking’s end date/time has passed. Automatically set by cron. |
| Cancelled | cancelled | The booking has been cancelled (by admin, customer, or due to order |
Note: These statuses occupy the time slot and count toward availability: in-cart, unpaid, pending-confirmation, confirmed, paid, complete
Checkout Flows
↑ Back to topWooCommerce Bookings has two different checkout flows depending on whether the product requires confirmation or not.
Standard (No Confirmation Required)
↑ Back to topThe customer selects a date/time, adds to cart, and pays using any available payment gateway. The booking is confirmed automatically upon payment.
Requires Confirmation
↑ Back to topWhen the product is configured with Requires Confirmation enabled. In this flow:
- All standard payment gateways are removed at checkout
- A special internal gateway (“Check Availability”) is used instead
- The customer cannot pay until the admin confirms the booking
- The order is created with a Pending status
- The booking enters
pending-confirmationstatus - Once the admin confirms, the customer receives a link to pay
Complete Status Flow
↑ Back to topPhase 1: Cart
Customer clicks "Book Now"
│
â–¼
Booking created with status: IN-CART
│
├── Inactive timeout (cron) ──► Booking Removed
│
└── Customer proceeds to checkout ──► Phase 2
Phase 2: Checkout
Customer at checkout page
│
├── Product requires confirmation? ──► YES ──► (see Phase 4 below)
│
└── NO (Standard)
│
â–¼
Payment gateways displayed
│
â–¼
Customer submits order
│
â–¼
Booking status: IN-CART → UNPAID
Order status: PENDING
│
â–¼
Phase 3: Payment
Phase 3: Payment Processing
Order awaiting payment (status: PENDING)
│
├── Payment succeeds
│ │
│ ▼
│ Order status: PENDING → PROCESSING (or COMPLETED for virtual products)
│ │
│ ▼
│ Booking status: UNPAID → PAID
│ │
│ ▼
│ Cron events scheduled:
│ ├── Reminder (1 day before booking start)
│ └── Auto-complete (at booking end time)
│ │
│ ▼
│ Phase 5: Completion
│
├── Payment fails
│ │
│ ▼
│ Order status: FAILED
│ Booking status: stays IN-CART (allows retry)
│ │
│ └── If still failed after 1 hour ──► Booking: CANCELLED
│
└── Customer abandons ──► Booking cleaned up by cron
Phase 4: Requires Confirmation Flow
If the booking product requires confirmation, the flow is:
Customer submits order (Requires Confirmation)
│
â–¼
Only "Check Availability" gateway shown
│
â–¼
Order status: PENDING
Booking status: IN-CART → PENDING-CONFIRMATION
│
â–¼
Admin receives "New Booking" email
Customer receives "Pending Confirmation" email
│
├── Admin CONFIRMS booking
│ │
│ ▼
│ Booking status: PENDING-CONFIRMATION → CONFIRMED
│ Customer receives "Booking Confirmed" email with payment link
│ │
│ ▼
│ Customer pays ──► Order: PENDING → PROCESSING/COMPLETED
│ Booking: CONFIRMED → PAID
│ │
│ ▼
│ Phase 5: Completion
│
└── Admin REJECTS / CANCELS booking
│
â–¼
Booking status: PENDING-CONFIRMATION → CANCELLED
Order status: CANCELLED (if single-item order)
Customer receives "Booking Cancelled" email
Phase 5: Completion
Booking is PAID or CONFIRMED
│
├── 1 day before booking start ──► Reminder email sent (via cron)
│
â–¼
Booking end date/time passes
│
â–¼
Cron job: wc-booking-complete
│
â–¼
Booking status: PAID/CONFIRMED → COMPLETE
Order Status to Booking Status Mapping
↑ Back to topWhen an order’s status is changed, here’s what happens to the linked booking(s):
| Order Status Changed | Booking Status Change |
|---|---|
 processing | in-cart/unpaid → paid |
completed | in-cart/unpaid → paid |
processing/completed → pending | paid → unpaid |
 cancelled | Any active status → cancelled |
 refunded | Any active status → cancelled |
 failed | paid → in-cart (revert for retry) |
Still failed after 1 hour | in-cart → cancelled |
Questions and support
↑ Back to topSomething missing from this documentation? Still have questions and need assistance?
- If you have a question about a specific extension or theme you’d like to purchase, contact us to get answers.
- If you already purchased this product and need some assistance, get in touch with a Happiness Engineer via our support page and select this product’s name from the Product dropdown.