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 settings —
start_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
- Upload the plugin folder to
/wp-content/plugins/or install from Plugins Add New Upload - Activate Aprus Appointment Calendar in the Plugins list
- Open Appointments Settings, adjust hours / duration / working days
- Open Appointments Calendar and drag over slots to open them for clients
- 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 format —
H:ishows 24-hour times (13:00),g:i ashows 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.
ContributorsTranslate “Aprus Appointment Calendar” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
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
sacprefix toapruapca(8 chars) - Renamed the shortcode from the generic
[appointment_calendar]to[apruapca_calendar]for the same uniqueness requirement - Wrap global variables in
uninstall.phpin 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
%iidentifier 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()withgmdate()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: hiddenon the calendar card so nothing escapesmin-width: 0on 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: noneto 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
