Appointable Product
How it works
An Appointable product is a WooCommerce product with duration, capacity, and booking rules. Customers book it on the storefront; you manage appointments in admin.
What you need first
- Plugin installed and licensed — Installation
- WordPress → Settings → General timezone and date format set — Global Settings
- At least one availability rule planned — Availability rules
You are ready when
- ✅ Product type is Appointable, duration and interval are set
- ✅ Availability tab has at least one Yes rule
- ✅ A test booking shows slots on the product page
Create the product
- Go to Products → Add New.
- Choose Appointable Product in the Product Data dropdown.
- Mark Virtual when no shipping is required (selected by default for services so shipping is not applied).
General settings
Configure price, duration, interval, padding, lead time, scheduling window, and confirmation or cancellation rules here. Interval must be less than or equal to duration.

- Duration: How long each booked appointment lasts (minutes, hours, days, or months). The customer’s start time plus duration must fit inside an appointable time range on the Availability tab.
- Interval: How often start times are offered inside an open range. This is the step between starts, not how long the service lasts.
- Example: duration 2 hours, interval 15 minutes → starts at 09:00, 09:15, 09:30, …; each booking still blocks a full 2 hours.
- Example: duration 270 minutes, interval 270 minutes → starts only every 4.5 hours from the first open minute (for example 08:30, then 13:00 in a continuous day). Use a smaller interval (for example 30 minutes) if you want more start choices such as 13:30.
- Tip: for one departure per open window, set interval equal to duration and use availability rules for the window(s) you offer.
- Padding: Time reserved around each appointment for prep, setup, or cleanup. Set Before and After on the same row (shared unit). Padding is not added to the customer-facing duration; it only keeps staff free around the booking.
- Existing padding is treated as Before, and After starts at 0. With only Before set, the handoff gap stays the same as before (timed and day).
- The gap between two appointments is the earlier appointment's After plus the later appointment's Before. Example: After 10 then Before 15 gives a 25-minute gap (or 25 days on a day product when the unit is days).
- Same staff on two products: the same earlier-After + later-Before rule applies.
- Lead time: Minimum notice before booking (for example, 1 day means no bookings within 24 hours of start).
- Scheduling window: How far ahead customers may book (for example, 1 month).
- Requires confirmation: When enabled, customers submit details for approval instead of paying at checkout. After you approve, they receive a confirmation email with an optional payment link.
- Can be cancelled / Can be rescheduled: When enabled, set how long before start customers may cancel or reschedule from My Account.

When reschedule is enabled, customers use My Account → Appointments.

- Timezones: Customer timezone display is site-wide (not per product). When enabled, customers pick a timezone on the booking form and in My Account. See Timezones.
Recurring packages (5.4+)
Below reschedule options, enable Can be recurring? to let customers book a series of sessions (class packs, treatment plans) with RRULE scheduling.
| Setting | Purpose |
|---|---|
| Repeat frequencies | Daily, weekly, and/or monthly patterns |
| Min / max sessions | Occurrence limits per package |
| Payment model | Prepaid (all sessions now), pay-first (first session now + balance order), or customer chooses |
Use Pricing tab rules with Appointments in package to discount longer series. Add-ons can be marked Use once per recurring series.
Full guide: Recurring appointment packages.

Recurring packages are not subscriptions. For ongoing credits each billing period, use a WooCommerce Subscription product with the Appointments tab — see Membership credits.
Pricing
Set the appointment price on the General tab like any WooCommerce product.

Price fields
- Regular Price: Standard price unless a sale price applies.
- Sale Price: Optional discount. The price at booking time applies, not the appointment date (December sale price applies to a January slot booked in December).
- Cost of Goods Sold (COGs): Your cost per appointment for margin reporting. Not shown to customers and does not change the selling price.
COGs help track profitability. Regular Price $100 and COGs $30 means $70 margin per appointment.
You can hide the numeric price and show a custom label with Label instead of price? — checkout still uses the calculated price.
Custom pricing rules
Use Custom pricing rules on the Pricing tab for date, time, staff, or duration-based pricing (similar structure to availability rules).

Rule types:
- Base cost: One-time charge for the whole appointment
- Slot cost: Per slot; for multi-day bookings, applies to each day in the range
Cost modifiers:
- + (Plus): Adds to base price and add-ons
- = (Equals): Replaces base price and add-ons for matching ranges
Use = when a rule should fully override product price and add-ons for specific date/time ranges.
Inventory & capacity
By default, one appointment fits each available slot. Increase Quantity for group classes or parallel bookings — set limits carefully to avoid overbooking.
When quantity is greater than 1, customers use the WooCommerce quantity field to book multiple seats in one checkout. Max order caps how many they can request (for example, max 2 for pairs).


- Capacity (Quantity): Base seats per slot or per day (see Quantity applies).
- Quantity applies: Per slot (default) or Per day (shared cap for all slots on the same calendar day, per staff when applicable).
- Minimum/Maximum per booking: Clamp quantity per checkout.
- Rules can change capacity: Availability Qty can lower capacity; staff and product caps still apply.
- Staff quantities override: Staff quantity replaces product capacity; availability rules can only reduce after that.
With staff assigned, inventory applies per staff member, not as a shared pool across all staff:
- Inventory 1, no staff → 1 booking per slot.
- Inventory 10, no staff → 10 bookings per slot.
- Inventory 10, 1 staff → 10 bookings per slot for that staff.
- Inventory 10, 2 staff → 10 bookings per slot for each staff member.
- Per-staff inventory can differ from the product default.
Capacity priority (most specific wins)
- Staff quantity (if set).
- Availability rule Qty.
- Product capacity.
- Per-booking min/max; the UI clamps to remaining seats.
Per-day specifics
- Multi-day/month bookings deduct capacity from every day they cover; a slot is unavailable if any day in the span has no remaining daily capacity.
- For "all staff" assignment, every staff member must have daily capacity for each day in the span.
- With no staff preselected, summed daily capacity is capped by the product's per-day quantity.
Staff
Assign staff who can be booked for this product. Staff availability is global — booking a staff member for one product blocks that staff for the same date/time on all other appointable products.

Selection mode:
- Customer defined — booking form shows a staff dropdown for the customer to choose.
- Automatically defined — the plugin assigns an available staff member.
Add staff under Users → Add New with the Shop staff role. Optional label text appears on the booking form instead of the display name.
Additional cost — extra charge per staff member, added to the appointment total.
Inventory — per-staff seat limit on this product; falls back to product inventory when unset.
Staff edit screen

Staff can update their own profile under Users → Profile:
- Connect a personal Google Calendar.
- Set availability rules and view synced Google Calendar blocks.
- Opt in or out of this product.
Availability (product tab)
Use the Availability tab to open bookable slots for this product. Rules layer on global and staff rules — see Availability rules for range types, priority, and examples.

Product-only options:
| Option | What it does |
|---|---|
| Availability check | Check only the starting slot, or every slot across the booked range |
| Auto-select? | Pick the first available slot automatically |
| Restrict start days? | Limit which weekdays an appointment may start on |
Add rules with Add Rule. Each row sets range, optional Qty override, Priority (lower number wins), and Appointable yes/no.

Use time rules, not range of days Yes on Mon–Fri alone. See Works vs does not work.
Add-ons
Product add-ons appear on the booking form. On a new or existing appointable product, open the add-ons panel and click Add Field:

Choose Type and Display as to define the field:
Common options:
- Hide duration label for customers / Hide price label for customers — hide labels on the storefront only.
- Show before appointment form — render add-ons above the calendar.
Per option:
- Option — label shown to customers.
- Price — added to total (flat or per quantity; can be negative).
- Duration — added to appointment length (flat or per quantity; can be negative).
See Add-ons for global add-ons and recurring-series options.
Related
- Availability rules — open bookable slots
- Customer booking process — test the form
- Recurring packages — multi-session products (5.4+)
- Add-ons — extra fields on the booking form