Aprus Appointment Calendar

Description

Aprus Appointment Calendar is a lightweight, no-frills booking plugin. You set your opening hours, drag-select the exact slots you want to be bookable, and clients book through a clean calendar embedded anywhere on your site.

Features

  • Two client views — monthly calendar and weekly column layout
  • Embed anywhere[apruapca_calendar] shortcode, classic widget or Gutenberg block (Aprus Appointment Calendar / Aprus Appointment Calendar (columns))
  • Admin availability grid — drag-select a rectangle over slots to open or close them in bulk. Booked slots are protected from accidental change.
  • Appointment duration + break — control slot generation with duration and buffer between visits
  • Working days & hours — per-day-of-week toggle, lead time (earliest booking), calendar range (how far ahead)
  • Booking popover — hover a booked slot in admin to see client details and cancel with one click; cancellation sends an e-mail notification
  • Automatic locale — Polish or English based on WordPress site language, English by default
  • Respects your WP settingsstart_of_week (Monday vs Sunday), time_format (24h / 12h AM-PM)
  • E-mail notifications — customer + admin messages via wp_mail()
  • No accounts required — clients book by e-mail

Free and open source

The plugin is fully free — no premium tier, no artificially blocked features. If you find it useful, you can buy me a coffee on Ko-fi or on buycoffee.to. It helps me keep the project maintained.

Privacy

The plugin stores appointment data (name, e-mail, phone, note, date, time) in your own WordPress database. Nothing is sent to third-party servers. E-mails go through the standard wp_mail() function.

Screenshots

Blocks

This plugin provides 2 blocks.

  • Appointment calendar (monthly)
  • Appointment calendar (columns)

Installation

  1. Upload the plugin folder to /wp-content/plugins/ or install from Plugins Add New Upload
  2. Activate Aprus Appointment Calendar in the Plugins list
  3. Open Appointments Settings, adjust hours / duration / working days
  4. Open Appointments Calendar and drag over slots to open them for clients
  5. Add the shortcode [apruapca_calendar] (or [apruapca_calendar view="columns"]) to any page/post, or drop the block/widget on your site

FAQ

How do I display the weekly column view?

Use [apruapca_calendar view="columns"] in the shortcode, or pick Aprus Appointment Calendar (columns) in the block editor / widgets.

Can clients see all slots by default?

No. In this plugin nothing is bookable until you explicitly open slots in Appointments Calendar. Drag over the slots you want to make available.

Can I cancel a booking?

Yes. In Appointments Calendar, hover a blue (booked) slot — a popover appears with client details and a “Cancel booking” button. The client gets an e-mail notification. You can also cancel from Appointments Bookings.

Does it support 12-hour time format?

Yes. The calendar reads your Settings General Time formatH:i shows 24-hour times (13:00), g:i a shows 12-hour (1:00 pm).

Does the week start on Monday or Sunday?

Whatever you set in Settings General Week starts on.

Does the plugin phone home / call external services?

No. All data stays in your WordPress database. E-mails use wp_mail().

Reviews

There are no reviews for this plugin.

Contributors & Developers

“Aprus Appointment Calendar” is open source software. The following people have contributed to this plugin.

Contributors

Changelog

2.5.0

  • Month view now colours each day by availability — days with open slots get a green tint and dot, fully-booked days are greyed out and not clickable, with a small legend below the calendar
  • Redesigned the empty “no free slots” state (centred icon + message) instead of a cramped line of text
  • Spam / bot protection for the public booking form, all configurable under Settings Spam protection (on by default, no external services): honeypot field, time trap (rejects submits faster than a human — default 3s) and a per-IP rate limit (default 5 bookings / 60 min)
  • Unique prefixes across the whole plugin, per WordPress.org review feedback: functions, classes, constants, options, hooks, nonces, AJAX actions, menu slugs, script/style handles, widget id, block namespaces and the custom table renamed from the 3-letter sac prefix to apruapca (8 chars)
  • Renamed the shortcode from the generic [appointment_calendar] to [apruapca_calendar] for the same uniqueness requirement
  • Wrap global variables in uninstall.php in a prefixed function
  • Refreshed the front-end booking form — a summary chip with calendar icon for the chosen slot, uppercase field labels with clearer spacing, larger inputs, and a redesigned confirmation / error message (status icon, subtle fade-in, no empty space reserved before a booking is made)
  • Verified on a clean WP_DEBUG install — no notices, warnings or deprecations across activation, front-end views, all AJAX endpoints, the full booking lifecycle, settings save and uninstall

2.4.4

  • Pass all Plugin Check audits: WordPress coding standards, i18n compliance, DB safety, output escaping
  • Migrate SQL queries to modern %i identifier placeholder (requires WordPress 6.2+)
  • All translatable strings go through __() with English source (Poedit / GlotPress friendly)
  • Add translators: comments on placeholders in e-mail templates
  • Replace date() with gmdate() for timezone-safe date math
  • Ordered sprintf placeholders (%1$s, %2$s) in all multi-arg strings

2.4.3

  • Switch to WordPress standard i18n with .pot / .po / .mo files (in /languages/)
  • All source strings are English; Polish translation shipped as aprus-appointment-calendar-pl_PL.mo
  • Localized month and weekday labels use WordPress core translations via wp_date()
  • Full code comments translated to English

2.4.2

  • Fix layout shift after selecting a day in the monthly view (theme CSS interference)
  • overflow: hidden on the calendar card so nothing escapes
  • min-width: 0 on grid children — prevents column widening under long content

2.4.0

  • Respect WordPress start_of_week — Monday or Sunday
  • Respect WordPress time_format — 24h / 12h AM-PM in slot labels and popover
  • Minor CSS reset to prevent themes from breaking labels and headings

2.3.0

  • Full visual redesign — modern colour palette, spacing, typography

2.2.0

  • Admin availability: rubber-band rectangle selection (mouse drag or touch)
  • Auto-jump on first load to the first week with clickable slots
  • Stronger user-select: none to stop theme CSS from breaking drag

2.1.0

  • Booking popover on hover (client details + cancel)
  • Cancel booking endpoint with customer e-mail notification
  • Full i18n — auto-detected Polish / English

2.0.0

  • New availability model — nothing is bookable by default; admin opens slots explicitly
  • Add appointment duration + buffer settings

1.0.0

  • First release