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.
The All Bookings screen with the Order column highlighted, showing linked order numbers next to each booking.
Linked orders on the “All Bookings” screen
The Edit Booking screen showing the linked order number as a clickable link under Booking Details.
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.

The Edit Order screen showing a bookable product as a line item, with the booking ID linked in the item details.

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

Cancel unpaid confirmed bookings automatically with AutomateWoo

↑ Back to top

When a bookable product requires confirmation, the admin can confirm the booking before the customer pays. If the customer does not return to complete payment, the booking can remain confirmed and the selected time slot stays unavailable for other customers.

To free that availability automatically, create an AutomateWoo workflow that cancels matching pending-payment orders after a set amount of time. Cancelling the order also cancels the linked booking, which releases the reserved slot.

  1. Set the trigger to Order Pending Payment.
  2. Enable Recheck status before run.
  3. Add a rule to confirm the order payment gateway is Check booking availability.
  4. Add an Order – Change Status action that changes the order status to Cancelled.
  5. Set the timing to Delayed, using the amount of time you want to wait before cancelling unpaid bookings.
Steps to set up an AutomateWoo workflow that automatically cancels unpaid bookings to free up availability.
Steps to set up an AutomateWoo workflow that automatically cancels unpaid bookings to free up availability.

Complete Status Flow

↑ Back to top

Phase 1: Cart

  1. The customer selects Book Now.
  2. A booking is created with the in-cart status.
  3. If the booking remains inactive, a scheduled task removes it.
  4. If the customer proceeds to checkout, continue to Phase 2.

Phase 2: Checkout

  1. The customer arrives at checkout.
  2. Check whether the product requires confirmation.
  3. If it requires confirmation, continue to Phase 4.
  4. If it does not require confirmation, show the available payment gateways and the customer submits the order.
  5. The booking changes from in-cart to unpaid, and the order is set to pending.
  6. Continue to Phase 3.

Phase 3: Payment processing

The order is awaiting payment with the pending status. The outcome determines the next steps.

  • Payment succeeds. The order changes from pending to processing, or to completed for virtual products. The booking changes from unpaid to paid. A reminder is scheduled for one day before the booking begins, and the completion task is scheduled for the booking end time. Continue to Phase 5.
  • Payment fails. The order is set to failed. The booking remains in-cart so the customer can retry payment. If the order is still failed after one hour, the booking changes to cancelled.
  • The customer abandons checkout. A scheduled cleanup task removes the booking.

Phase 4: Requires confirmation

When the booking product requires confirmation, this flow applies.

  1. The customer submits the order. Only the Check Availability gateway is available.
  2. The order is set to pending, and the booking changes from in-cart to pending-confirmation.
  3. The administrator receives a New Booking email and the customer receives a Pending Confirmation email.
  4. If the administrator confirms the booking, it changes to confirmed. The customer receives a payment link. When payment succeeds, the order becomes processing or completed, and the booking becomes paid. Continue to Phase 5.
  5. If the administrator rejects or cancels the booking, it changes to cancelled. For a single-item order, the order also becomes cancelled, and the customer receives a Booking Cancelled email.

Phase 5: Completion

  1. The booking is paid or confirmed.
  2. One day before the booking starts, a scheduled task sends a reminder email.
  3. The booking end date and time pass.
  4. The wc-booking-complete scheduled task runs and changes the booking from paid or confirmed to 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

WooCommerce Subscriptions is a WooCommerce extension that lets customers subscribe to your products or...

Power your membership association, online magazine, elearning sites, and more with access control to...

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.