How to sell bookings for courses through WooCommerce
WooCommerce is an ideal solution to allow your users to book courses or any kind of training event, such as classes, seminars, lectures, workshops, and so on.
In this article, we’ll look at different options for selling your courses online through WooCommerce. This includes a simple method using just WooCommerce itself, plus more advanced options using additional plugins.
We’ll look at how to:
- Take date-based bookings using a calendar
- Set maximum availability per course
- Define which days course are available
- Allow users to book multiple places at once
- Run the same class several times a day at set times
- Collect additional information from the user – and offer them extra options
- Restrict course availability to site members
All the options above are compatible with all WordPress themes and page builders. Let’s start by looking at a simple method to accept course bookings.
Three tutorials: how to let users book courses with WooCommerce
In this section, we’ll step through three different methods for selling courses with WooCommerce.
Example #1: Take bookings in WooCommerce – no extra plugins required
This first example doesn’t require any additional plugins. You can create this using standard WooCommerce functionality. There are some limitations but this is a good option if you’re not offering loads of courses and you just want a way to manage simple bookings.

Step #1: Create a new product
Just create a new product in WooCommerce:
- Go to Products > Add New
- Give your product a title to describe the course or class
- Enter a price for the course
- Add an image, some descriptive text, and any other relevant information
Step #2: Set capacity for your course
If numbers are limited on your course, you can define the capacity using standard WooCommerce inventory functionality. To ensure you don’t oversell your course:
- Click the ‘Inventory’ tab in the ‘Product data’ section
- Enable the ‘Stock management’ option
- Enter the number of places on your course in the ‘Quantity’ field.

Publish your product. Now, if users want to book onto the course they can just purchase one or more places and check out as normal in WooCommerce.
Step #3 (optional): Set capacity for different levels or tiers
If you’re running a single course with multiple tiers, e.g. you’re running an art class for beginners and advanced students simultaneously, but you want to limit how many students you have per tier, you can do this using variable products:
- Change the product type to ‘Variable’ in the ‘Product data’ section
- In ‘Attributes’, create a new attribute for your tiers or levels

- In the ‘Variations’ tab, create variations for each level by clicking the ‘Generate variations’ button
- Then enter details for each level – ensure you set a price and stock level to manage capacity

Now users will be able to select their level and you can manage availability for all levels. When places run out on one tier, further users won’t be able to book.

Example #2: Use a WooCommerce bookings plugin
The first method is great if you’re not offering lots of courses. However, if you are running regular courses and you’d like users to be able to book onto specific dates, ideally using a calendar, then you’ll need a WooCommerce bookings plugin.
The Bookings for WooCommerce plugin is ideal for selling courses and classes. You can create multiple bookable products, set class sizes and limits, and define which days they run.
In this example, we’ll use Bookings for WooCommerce to sell places on a pottery course. The course runs weekly, starting Mondays, and there are 30 places available per week.

Step #1: Install and activate Bookings for WooCommerce
Once you’ve purchased Bookings for WooCommerce, you can install it on your site as follows:
- Download the plugin files as a zip from your welcome email or the thank you page after you check out
- Go to Plugins > Add New and click the ‘Upload Plugin’ button
- Drag the zip file to the upload area on the screen – the plugin files will upload
- Click the ‘Activate’ button when it appears
Step #2: Create your bookable product
Now you can create a bookable product for your course:
- Go to Products > Add New
- Give your product a title, e.g. ‘Pottery Course’, a featured image, descriptive text, and so on – just as you would with a standard product
- Select ‘Booking’ as the product type in the ‘Product data’ section

You’ll see that you have some additional options, including:
- Booking unit: you can choose from ‘Day’, ‘Night’ or ‘Week’ to specify how the booking duration is measured
- Max bookings per unit: if you have a set number of places on your course, you can specify how many in this setting. In our example, we have 30 places per course – so we entered 30 here
- Bookings start: if your course always starts on the same day of the week, you can specify it here
- Max booking length: you can specify how long your course will run for (based on what you chose in the ‘Booking unit’ setting above)
- Standard price: enter the value per booking unit here. So if your course costs $200 per week, enter 200 here
When we publish the product, users can now book their course using a calendar to pick the start date. They can also choose how many students they’d like to enrol as part of the same booking.

Take a look at the demo product here.
Example #3: Classes that run several times a day
You might run the same class several times a day, so students can pick the time that suits them. For example, a two-hour cookery class that runs at 9am, 12pm, and 3pm.
Students book a date, then choose their session. You set how many places are available in each one.
This uses the time slots feature in Bookings for WooCommerce, which divides a single day into fixed-length windows. It’s available when the booking unit is set to ‘Day’.

Step #1: Set up the bookable product
Create your course product as in Example #2 above, with one change: set the ‘Booking unit’ to ‘Day’ on the ‘Booking Settings’ tab. Time slots are only available when the unit is set to ‘Day’.

Enter the number of places per session in the ‘Max bookings’ field. You can adjust this number per class later.
You now have a day-based bookable course, ready for time slots. Next, let’s add the session times.
Step #2: Enable and configure time slots
Open the ‘Time Slots’ tab and check ‘Enable time slots’. The rest of the settings appear once this is enabled.
Set your timings to match your class schedule:
- Slot duration (minutes) – the length of each class. For a two-hour class, enter ‘120’
- First slot time – when the first class starts, e.g. ‘9:00’
- Last slot end time – when the last class must finish, e.g. ’17:00′
- Set both the ‘Minimum duration’ and ‘Maximum duration’ to ‘120’ so that users can’t book successive courses
This will automatically generate time slots spaced evenly through the day. The settings above will create four sessions a day: 09:00–11:00, 11:00–13:00, 13:00–15:00 and 15:00–17:00.
If you want, you can build in a turnaround between classes – just enter a value in the ‘Buffer time’ field. This trims that many minutes from the displayed end of each slot without changing the price or when the next class starts. A 15-minute buffer shows the 10:00 class as 09:00–10:45, for example, while the next class still begins at 11:00 – giving you time to reset the room.

Each day is now split into four class times.
However, the timing of your classes might be more irregular. Let’s look at how to customize start and end times, as well as limit some classes to certain days of the week.
Step #3: Optionally vary the times or days
If your classes run at separate times rather than back to back – say 09:00, 12:00, and 15:00 – click ‘Edit Time Slots’ in the ‘Timings’ section. This opens a table with one row per class.
In the table you can disable sessions you don’t need, override individual start and end times, and use the ‘Days’ column to restrict a session to specific days of the week. So you could add an evening class on Thursdays only, or run a reduced timetable at weekends. You can also use this setting to build in breaks during the day.

So in our example above, the classes at 9am and 11am run every day but the afternoon session at 3pm only runs on Mondays and Tuesdays.
Next, let’s set the price and layout.
Step #4: Set the price and booking layout
Enter the price of one class in the ‘Price per slot’ field, e.g. ‘40.00’. Each session a student books is charged at this rate.
Then choose how students pick their time in the ‘Time slot view’ field. The ‘Time Picker’ shows each session as a cell in a grid, which works well for a handful of daily classes.
Save and publish the product. Now students can pick a date, choose a class time, and book their place.
Check out the demo product here.
Example #4: Classes on specific days of the week
You might be running the same course or class on different days of the week. So users could book on to Monday or Tuesday, for example. In this example, users can book onto a coding workshop on Mondays, Tuesdays or Thursdays.

To create a course product that can only be booked on specific days of the week, follow the steps in Method #2 above with the following changes:
- Set ‘Booking unit’ to ‘Day’
- Set ‘Bookings start’ to ‘Any’

Then click the ‘Availability’ tab and disable the days where the course isn’t running.

You can check out the demo product here.
Bonus #1: Add extra options to your course booking pages
Let’s look at a couple of additional features we can add to our course booking pages. In the first example we’ll look at how to collect information from students, like their name. In the second example, we’ll look at how to add extra options to a booking so users can personalize the course – and you can upsell.
Collect student details for enrolment
With any of the examples of courses and classes so far, you might want to collect certain information from each participant. You can do this using the WooCommerce Product Add-Ons Ultimate plugin.
WooCommerce Product Add-Ons Ultimate allows you to add extra form fields to product pages – so you can use it to collect enrolment and other details from your course students.
Let’s update our pottery class product from the tutorials above to add a field for the user to enter their name and to describe their experience.

In the screenshot above, you can see that there’s a field to collect the user’s name and for them to register what level they’re at. If they are booking more than one place, they’ll be able to enter the information for all participants.
To add extra fields to your course booking product:
- Click the ‘Product Add-Ons’ tab in the ‘Product data’ section
- Click ‘Add Group’ then ‘Add Field’
- Select the field type – in this case, ‘Text’ – and add a label
- Repeat for any other fields you want to add

If you want to collect the same information for multiple users, enable the ‘Repeatable’ option for the group:

Now, when a user books, they can add the names of any students who will be attending.
Upsell optional extras when users book
Product Add-Ons Ultimate can also be used to sell upgrades, merch and additional options for your courses and classes.
In this example, users can book a week on a writer’s retreat and opt to upgrade their room for an additional charge.

To add a simple checkbox option like this:
- Click the ‘Product Add-Ons’ tab in the ‘Product data’ section
- Click ‘Add Group’ then ‘Add Field’
- Select the field type – in this case, ‘Checkbox’ – and add a label
- Set a price for the option in ‘Field Price’


You can use this offer additional training materials, equipment, merchandise – or any other kind of optional extra on your courses.
Bonus #2: Courses with membership perks
So far, we’ve looked at courses that are available to any user. However, you may want to limit availability of your courses to certain users – or to offer special discounts to members.
Offer discounts on courses to members
First, let’s look at how you can provide discounts to certain users for your courses and classes. Bookings for WooCommerce allows you set role-based prices for courses – so a customer with the role of ‘Gold’ could get a different price for the course.
To enable role-based pricing for courses in Bookings for WooCommerce:
- Go to WooCommerce > Settings
- Select which roles should have differential pricing in the ‘Roles’ field

- Edit the course product page
- Enter the discounted pricing for each user role

Offer courses exclusively to members
You can take this a step further and ensure that only members of your site can book courses. To do this, you’ll need a WooCommerce membership plugin: WooCommerce Members Only.
Once you’ve installed and activated Members Only, you can ensure that only members of your site can book your courses.
Define how to limit access to your courses
You can limit access to your courses in different ways:
- Go to Members Only > Settings
- In ‘Restriction Method’ choose from one of the following:
- Log-in status: choose this to prevent guest users from accessing your courses
- Password: choose this to protect courses from users who don’t have the correct password
- User role: choose this to specify which user roles can access your courses
Create a membership plan
Once you’ve defined the restriction method, you can define what courses to restrict:
- Go to Members Only > Plans and click ‘Add New’
- In ‘Restricted Content’, choose ‘Specific content’
- In ‘Content Type’, select ‘Product Categories’
- In ‘Restricted Product Categories’, choose the relevant categories for your courses

Now, only members with the correct permissions will be able to book courses on your site. Find out more about WooCommerce Members Only here.
Use WooCommerce to take bookings for courses and classes – recap
In this article, we looked at how to take bookings for your courses and classes in WooCommerce. We looked at a simple method using just WooCommerce, then more advanced methods using the Bookings for WooCommerce plugin.
Bookings for WooCommerce allows you take multiple bookings for courses. Users can select their times and dates using a calendar – and you can limit the number of places per course so that you never get overbooked.
Bookings for WooCommerce is compatible with every WordPress theme and page builder. It’s backed by our world-class support – and a 14-day money-back guarantee, so you can try it without risk.


