Relationship Between Bookings and Orders: Understanding the Connection

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 top

You 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.
Linked orders on the “All Bookings” screen
Linked Order on the “Edit Booking” screen

For Bookings with the “In Cart” status, no corresponding order exists.

Finding the Booking for a WooCommerce order

↑ Back to top

The 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 top

Once 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
StatusInternal KeyDescription
In Cartin-cartBooking created when customer adds a bookable product to the cart. Holds the time slot.
Was In Cartwas-in-cartBooking was removed from the cart by the customer (temporary state).
UnpaidunpaidBooking has been checked out but payment has not been received yet.
Pending Confirmationpending-confirmationBooking requires admin approval before the customer can pay.
ConfirmedconfirmedAdmin has approved the booking. Customer can now proceed to pay.
PaidpaidPayment has been received for this booking.
CompletecompleteThe booking’s end date/time has passed. Automatically set by cron.
CancelledcancelledThe 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 top

WooCommerce Bookings has two different checkout flows depending on whether the product requires confirmation or not.

Standard (No Confirmation Required)

↑ Back to top

The 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 top

When 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-confirmation status
  • Once the admin confirms, the customer receives a link to pay

Complete Status Flow

↑ Back to top

Phase 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 top

When an order’s status is changed, here’s what happens to the linked booking(s):

Order Status ChangedBooking Status Change
 processingin-cart/unpaid → paid
completedin-cart/unpaid → paid
processing/completed â†’ pendingpaid → unpaid
 cancelledAny active status → cancelled
 refundedAny active status → cancelled
 failedpaid → in-cart (revert for retry)
Still failed after 1 hourin-cart → cancelled

Questions and support

↑ Back to top

Something 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.

Related Products

Let customers subscribe to your products or services and pay on a weekly, monthly or annual basis.

Power your membership association, online magazine, elearning sites, and more with access control to content/products and member discounts.

Use of your personal data
We and our partners process your personal data (such as browsing data, IP Addresses, cookie information, and other unique identifiers) based on your consent and/or our legitimate interest to optimize our website, marketing activities, and your user experience.