AumReserva turns a WordPress site into an appointment system for anything booked as one person at one time: lessons, treatments, consultations, viewings, and repairs. It requires no particular theme and no other plugin.
1. What the plugin adds
Activating AumReserva registers two content types and two taxonomies:
| Registered | What it holds |
|---|---|
Services (arb_service) | What can be booked: duration, price, buffer, and which staff deliver it |
| Service Categories | A taxonomy on services, used to group the catalogue |
Staff Members (arb_staff) | Who delivers it: job title, working hours, days off, and status |
| Locations | A taxonomy on staff, used to group them by where they work |
Bookings are not posts. They are rows in a table of their own, arb_bookings, which is why they have statuses, a CSV export, and a calendar rather than an editor screen.
The front end is one shortcode and a modal. A visitor picks a service, a member of staff, a day, and a free start time, then leaves their details. The booking is written to the table and the configured emails are sent.
2. Install
Install and activate the plugin. A Reserva menu appears with seven screens: Dashboard, Service Categories, All Services, All Staff Members, Locations, All Bookings, and Settings.

Two things are worth doing before anything else, because the booking form reads both:
- Reserva → All Services — add at least one service.
- Reserva → All Staff Members — add at least one member of staff, then assign them to the service under Assigned staff members.
A service with nobody assigned to it cannot be booked. The modal opens on the staff step and finds nobody to offer.
3. Services
A service is an ordinary post with one added box, Service Details.


| Field | What it controls |
|---|---|
| Duration (minutes) | How long the appointment lasts |
| Price | Shown on the service card, in the modal, and in the emails |
| Buffer time after service (minutes) | Extra minutes blocked after the appointment, for cleaning, notes, or travel |
| Assigned staff members | Who can deliver this service. The visitor chooses among these on the first step |
| Max bookings per slot | Overrides the site-wide figure for this service. Blank follows the global setting |
| Deposit (%) | Overrides the site-wide deposit for this service. Requires WooCommerce |
| Staff selection step | Follow the global setting, force the step on for this service, or force it off |
Duration and buffer are added together when a slot is taken. A 45-minute service with a 10-minute buffer occupies 55 minutes, so the next appointment with that person can start 55 minutes after this one and no sooner.
3.1 Services that carry several people
Three further fields turn a service from one appointment into a departure or a class:
| Field | What it controls |
|---|---|
| Fixed start times | Specific times, such as 09:00, 13:30. Blank offers every slot of the day |
| Seats per time | How many people one start time carries. Blank means one party per booking and no head count |
| Most people per booking | The largest party one booking may hold. Only read when seats are set |
With seats set, each start time in the modal carries the number of places left, and a booking subtracts its party size rather than closing the time outright.
Service Categories group services for your own use. They do not restrict who may book what.
4. Staff
A staff member is also an ordinary post, with two added boxes.


Staff Details holds who they are and when they work:
| Field | What it controls |
|---|---|
| Job Title | Shown under the name on the staff step |
| Years of Experience | Shown with the job title |
| Override global working hours for this staff member | When ticked, the two fields below replace the site-wide hours |
| Work Start / Work End | This person's working day |
| Days Off | Dates this person is unavailable, whatever the hours say |
| Status | Working, On Vacation, or Inactive. Only Working staff are offered |
Custom hours narrow availability rather than widening it. A staff member whose day starts at 10:00 on a site that opens at 09:00 is offered from 10:00, and the 09:00 and 09:30 slots render as unavailable rather than disappearing, so a visitor can see that the time exists and this person does not work it.
Linked Login Account connects this staff member to a WordPress user, either by linking an existing account or by creating one with Full name, Email address, and an optional welcome email. A linked staff member who logs in sees only their own bookings, in the admin calendar and through [arb_my_bookings].
5. Locations
Locations are a taxonomy on staff, not on services. The same service can be offered in several places because the people who deliver it work in several places.

The staff step groups people under a heading per location. A member of staff assigned to two locations appears under both headings. The entry the visitor picks is recorded with the booking.
6. When you are open
Site-wide hours live under Reserva → Settings → General, in the Working Hours section:
| Setting | What it controls |
|---|---|
| Working days | Which days of the week accept bookings |
| Working hours | The site-wide start and end of the day |
| Break | One daily period that accepts no bookings |
| Slot length | The spacing of the start times offered, in minutes |
| Minimum advance booking (hours) | How many hours before an appointment booking closes |
| Maximum advance booking (days) | How many days ahead the calendar opens |
| Max bookings per slot | How many bookings one start time accepts, unless a service overrides it |
Slot length is the spacing between start times, not the length of an appointment. On a 30-minute spacing a 45-minute service is offered at 10:00, 10:30, 11:00, and so on, and each booking blocks whatever its duration and buffer require.
7. Put the booking form on a page
Create a page and add the shortcode [arb_services]. It renders every published service as a card with its price, its duration, and a Book Now button.

Three shortcodes are available:
| Shortcode | What it renders |
|---|---|
[arb_services] | The service cards and the booking modal |
[arb_booking_button] | A single button for one service, for use inside other content |
[arb_my_bookings] | A customer's own bookings, and the confirmation shown straight after booking |
Reserva → Settings → Booking Flow → Redirect page nominates where a visitor lands after booking. Pointing it at the page that holds [arb_my_bookings] gives them a confirmation of what they booked. Leaving it empty keeps them on the page they booked from.
8. What a visitor does
Step 1 — Choose staff. The people assigned to this service, grouped by location. The step can be turned off site-wide, or per service under Staff selection step.

Step 2 — Choose date. Days outside the working days, days before the minimum advance, days beyond the maximum advance, and this person's days off all render as unavailable.

Step 3 — Choose time. Start times at the configured spacing. A time is unavailable when it falls outside this person's hours, inside the break, or when an existing booking's duration and buffer overlap it.

Step 4 — Your details. Name and email are required; phone and notes are optional. The summary above the fields repeats the date, the time, and the staff member. With Collect address enabled, an address field is added and required.

Whether a visitor needs an account is set by Allow guest bookings and Require login under Booking Flow. With guest bookings allowed, no account is created and the booking is matched to the email address.
9. Bookings in the admin
Reserva → All Bookings lists every appointment.

The filter bar narrows by status, staff member, service, and date range. CSV exports what the current filter shows, not the whole table.
Status is a dropdown on the row, so changing it takes one action and no screen of its own. The statuses are Pending, Confirmed, Cancelled, Completed, and No Show. Which one a new booking receives is set by Auto-confirm bookings under Booking Flow: with it off, bookings arrive as Pending and wait for you.
10. The calendar
Reserva → Dashboard carries four counters, the most recent bookings, and a calendar.

The calendar has a column per staff member, plus a leading Unassigned column for bookings with nobody attached. Day and Week switch the span, and the staff dropdown narrows it to one person.
A staff member with a linked login account sees only their own column.
11. Emails
Reserva → Settings → Notifications controls who is told what:
| Notification | Sent to | When |
|---|---|---|
| New booking | Customer, staff | A booking is made |
| Confirmed | Customer | A booking moves to Confirmed |
| Cancelled | Customer, staff | A booking moves to Cancelled |
| Reminder | Customer, staff | A set number of hours before the appointment |
Each recipient is a separate switch, and Enable emails is the master switch above them. Admin email sets the address that receives the staff copy when a booking has no staff member attached.
Reminders are sent by WP-Cron, so they depend on the site receiving traffic or on a real cron job calling wp-cron.php. On a site with no visitors, reminders go out late or not at all.
12. Naming the three things
"Service", "Staff", and "Location" are defaults. Reserva → Settings → General → Label Customisation renames all three, singular and plural.

The plural labels are also the URL bases of the service archive, the staff pages, and the location pages. Renaming Services to Treatments moves the archive from /services/ to /treatments/. Existing links to the old base stop resolving, so rename before publishing links rather than after.
The renamed labels appear in the admin menu, the breadcrumb, the archive titles, and every step of the booking modal.
13. Settings reference
The settings screen has three tabs.
13.1 General
| Setting | Effect |
|---|---|
| Label Customisation | The six labels described in section 12 |
| Currency symbol | Prefixed to every price the plugin renders |
| Time format | 12-hour or 24-hour, applied to every time the plugin renders, including the emails |
| Working days | Which days accept bookings |
| Working hours | The site-wide start and end of the day |
| Break | One daily period that accepts no bookings |
| Slot length | The spacing of the start times offered |
| Max bookings per slot | How many bookings one start time accepts, unless a service overrides it |
| Minimum advance booking (hours) | Closes booking this many hours before an appointment |
| Maximum advance booking (days) | Opens the calendar this many days ahead |
| Deposit (%) | The site-wide deposit, taken at booking. Requires WooCommerce |
13.2 Booking Flow
| Setting | Effect |
|---|---|
| Staff selection step | Whether the modal asks for a staff member at all, site-wide |
| Allow guest bookings | Whether booking without an account is possible |
| Require login | Whether an account is required to reach the form |
| Auto-confirm bookings | Whether new bookings arrive Confirmed or Pending |
| Allow customers to cancel | Whether the cancel control appears on a customer's own bookings |
| Cancellation cutoff (hours) | How long before the appointment cancelling closes |
| Collect address | Adds a required address field, for work done at the customer's premises |
| Redirect page | Where a visitor lands after booking |
13.3 Notifications
| Setting | Effect |
|---|---|
| Enable emails | The master switch above every notification |
| Admin email | The address receiving the staff copy when no staff member is attached |
| Notify customer: new, confirmed, cancelled | One switch per message to the customer |
| Notify staff: new, cancelled | One switch per message to the staff member |
| Reminder hours | How many hours before the appointment the reminder is sent |
| Reminder recipients | Whether the reminder goes to the customer, the staff member, or both |
14. Troubleshooting
The modal opens and offers nobody. No staff member is assigned to that service. Assigned staff is a field on the service, not on the staff member. A member of staff whose status is On Vacation or Inactive is also not offered.
Every day in the calendar is unavailable. Check working days first, then the staff member's custom hours, then minimum advance. A minimum advance longer than the maximum advance leaves no bookable day at all.
Slots are missing in the middle of the day. The break accepts no bookings, and a start time whose duration plus buffer would run past the end of the working day is not offered.
Times show in the wrong format. Time format under General applies to every time the plugin renders, the emails included.
Reminders do not arrive. Reminders run on WP-Cron. Confirm that wp-cron.php is being called, either by site traffic or by a real cron job.
A guest books and sees a login wall. Fixed in 1.5.5. Before that release the redirect carried the booking id and nothing read it. On 1.5.5 and later the redirect page shows the booking that was just made.
Screenshots in this guide are regenerated from the specifications in this directory, against the plugin version recorded in `img/shot-meta.json`.