How to accept bookings in WooCommerce
WooCommerce can sell a service as a normal product, but it cannot manage booking slots, availability or double bookings on its own. For occasional bookings, use a virtual product and confirm dates manually. For regular appointments, reservations or rentals, use a WooCommerce booking extension.
- 01Define your booking rules
- 02Use WooCommerce manually for simple bookings
- 03Add a booking extension
- 04Create your bookable service
- 05Set availability and payment
- 06Connect calendars and test checkout
What you need
- A WordPress site with WooCommerce installed and configured
- Admin access to WordPress
- Your service, opening hours, capacity and cancellation rules
- A working payment gateway and shop email address
Define your booking rules
Write down what customers are booking, how long each booking lasts, your opening hours, blackout dates, maximum capacity and whether payment is taken immediately or after approval. Decide whether one booking represents one person, a group, a room, a vehicle or another shared resource.
Also choose your cancellation window and the timezone customers should see. Most booking problems start with unclear duration, capacity or timezone rules rather than with the checkout itself.
Use WooCommerce manually for simple bookings
For a low-volume service, create a normal WooCommerce product, tick Virtual if nothing is shipped, and explain in the description that customers must request a date and time. Collect the requested slot through a checkout note or a form, then review the order and confirm the appointment using a customer note.
This route is acceptable when you handle only a few bookings and check a separate calendar yourself. It does not create real availability rules, hold time slots during checkout, prevent two customers choosing the same time or provide a booking calendar, so it becomes risky on a busy Friday.
Add a booking extension
Install a WooCommerce-compatible booking extension from Plugins → Add New → Upload Plugin, activate it, and complete its general settings. A proper booking extension adds a bookable product type because ordinary WooCommerce products do not contain date, duration and availability controls.
Keep WooCommerce's shop, checkout and payment settings in place. The extension should connect the chosen date and time to the cart, order and booking record rather than treating the booking as an unstructured product note.
Create your bookable service
Go to Products → Add New, enter the service details, select the extension's bookable product type and mark it as virtual if no delivery is required. Set a fixed duration or let customers choose a duration, then configure the calendar display and booking lead time.
Set the maximum number of bookings for each slot or day. If the service uses staff, rooms, equipment or other limited assets, create them as resources and attach them to the product so separate products share the same availability.
Set availability and payment
Add your weekly working hours, holidays, date ranges, minimum notice and maximum advance-booking period. Configure prices for duration, people, dates or resources where needed. If every valid booking can be accepted automatically, take payment through your normal WooCommerce gateway.
If you need to review each request, enable the product's confirmation workflow instead. Customers submit a booking request first, and you approve it before they receive the payment request. Remember that confirmation-based bookings use a separate checkout flow and cannot be mixed with ordinary products in the same cart.
Connect calendars and test checkout
Connect Google Calendar or an iCal feed if your extension supports it, then check how imported events affect availability. Set the WordPress site timezone correctly and decide whether the calendar should display the shop's timezone or the visitor's timezone. Booking emails and reminders depend on these settings.
Place a test booking as a customer, pay or submit it for approval, confirm the email, inspect the order and booking record, and try to book the same slot again. Test cancellation, refunds, capacity limits and a daylight-saving date before publishing the product.
Fast way: use WooCommerce Bookings. It provides WooCommerce-native bookable products with availability rules, resources, variable pricing, calendar integration, customer details and booking notifications, so you can configure the service instead of building the scheduling logic yourself.
Let WooCommerce Bookings do it
WooCommerce-native appointments, reservations, and rentals with availability, calendar sync, variable pricing, and reminders.
Sources
- woocommerce.com /document/managing-products/virtual-downloadable/?utm_source…
- woocommerce.com /document/introduction-to-woocommerce-bookings/woocommerce-b…
- woocommerce.com /document/introduction-to-woocommerce-bookings/woocommerce-b…
Questions
- Can WooCommerce accept bookings without a plugin?
- WooCommerce can sell a service as a virtual product without a booking plugin, but it cannot manage real booking availability by itself. You can collect a requested date in a checkout note and confirm it manually, which is fine for occasional bookings. For public time slots, capacity limits, resources, reminders or double-booking protection, you need a booking extension or a separate scheduling system.
- How do I prevent double bookings in WooCommerce?
- Use a booking extension that reserves or counts a slot against availability when a customer adds the booking to the cart or submits the order. Configure capacity, staff, rooms and equipment as shared resources where necessary. Do not rely only on product stock or a spreadsheet, because those controls do not understand overlapping times. Test the same slot in two separate customer sessions before launch.
- Should customers pay when they book or wait for approval?
- Let customers pay at checkout when your availability and pricing are straightforward. Use approval first when you need to inspect a request, confirm staff or equipment, quote a variable price, or check a venue manually. In a confirmation workflow, the customer submits the booking before payment, and you approve it before the payment request is sent.
- Why are WooCommerce booking times showing incorrectly?
- Incorrect booking times usually come from a wrong WordPress timezone, a fixed UTC offset, or confusion between the shop's timezone and the visitor's timezone. Set the site timezone to a named location rather than a manual offset, choose the display timezone in the booking settings, and place a test booking across a daylight-saving change. Show the timezone in confirmation emails when customers are in different regions.