WP Manifestindependent plugin directory
manifest / events / wp-appointments

WP Appointment Plugin

Modern appointment booking for WordPress. Configure services with roles, days, max bookings. Block dates (including annual repeats). Shortcode [wp-appointment] for frontend. Users manage their own appointments.

★ 0stars

Install

Download source zip No release zip yet

This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/cerebrocodes/wp-appointments/archive/refs/heads/main.zip
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

Modern, flexible appointment booking for WordPress. Let users book services, while admins control everything from the dashboard – no coding required.

Features

  • Multi‑service support – create unlimited services (taxonomy-based)
  • Per‑service settings – set allowed user roles, available days of week, max appointments per day, and future booking window (days ahead)
  • Blocked dates – define dates or ranges that are unavailable (e.g., holidays, vacations) – with optional annual repetition (e.g., Christmas, New Year)
  • User‑friendly frontend – clean datepicker that only shows truly available dates (respects days, daily limits, blocked dates)
  • One‑appointment‑at‑a‑time – users can only have one future appointment at a time, unless they cancel the existing one
  • My Appointments – users can view and cancel their upcoming bookings via [wap_my_appointments] shortcode
  • Shortcode driven – embed booking forms anywhere with [wp-appointment services="service1,service2"]
  • Admin friendly – full WordPress UI; appointments are custom post types with editable metaboxes
  • Developer friendly – extensible, with hooks and clean code

Installation

  1. Upload the plugin folder to /wp-content/plugins/
  2. Activate the plugin through the 'Plugins' menu in WordPress
  3. Go to Services (under the new Appointments menu) to create services
  4. Configure each service: allowed roles, days, max per day, and future window
  5. Create blocked dates under Blocked Dates if needed
  6. Place the shortcode on any page or post: [wp-appointment services="consultation,therapy"]
  7. Add a page with [wap_my_appointments] so users can manage their bookings

Usage Examples

Basic Shortcode

[wp-appointment services="consultation, coaching"] text

User Appointments Dashboard

Place this on a page:

[wap_my_appointments] text

Logged‑in users will see a table of their upcoming appointments with a cancel link.

Blocked Dates

  • Go to Blocked Dates → Add New
  • Enter a title (e.g., "Christmas Holidays")
  • Set a start and end date, or just a start date for a single day
  • Check "Repeat annually" to block that month/day range every year

Configuration

Each service (created in Services) has these settings:

  • Allowed User Roles – select which roles (e.g., subscriber, editor) can book this service
  • Days Offered – tick which weekdays the service is available
  • Max Appointments Per Day – limit the number of bookings for that service on a given date
  • Available Days in Future – how many days from today the service can be booked (e.g., 30 = today + 30 days)

All these are respected both in validation and in the frontend datepicker.

Technical Details

  • Appointments are stored as a custom post type appointment
  • Each appointment stores:
    • _appointment_date – YYYY-MM-DD (meta field)
    • _appointment_service_id – term ID (meta field)
    • Service also assigned as taxonomy term service
  • Blocked dates are custom post type blocked_date with meta: _blocked_start_date, _blocked_end_date, _blocked_is_annual
  • Full nonce & capability checks for security

Requirements

  • WordPress 5.0 or higher
  • PHP 7.4 or higher

Contributing

Contributions are welcome! Please open an issue or submit a pull request on GitHub.

License

GPL v2 or later – see LICENSE file for details.