Title: EffortLess Modular Booking Platform
Author: domclic
Published: <strong>June 24, 2026</strong>
Last modified: June 25, 2026

---

Search plugins

![](https://ps.w.org/effortless-modular-booking-platform/assets/banner-772x250.jpg?
rev=3585490)

![](https://ps.w.org/effortless-modular-booking-platform/assets/icon-256x256.jpg?
rev=3585490)

# EffortLess Modular Booking Platform

 By [domclic](https://profiles.wordpress.org/domclic/)

[Download](https://downloads.wordpress.org/plugin/effortless-modular-booking-platform.1.1.28.zip)

 * [Details](https://wordpress.org/plugins/effortless-modular-booking-platform/#description)
 * [Reviews](https://wordpress.org/plugins/effortless-modular-booking-platform/#reviews)
 *  [Installation](https://wordpress.org/plugins/effortless-modular-booking-platform/#installation)
 * [Development](https://wordpress.org/plugins/effortless-modular-booking-platform/#developers)

 [Support](https://wordpress.org/support/plugin/effortless-modular-booking-platform/)

## Description

Effortless Modular Booking Platform lets any service business accept appointments
on their WordPress site. Features include service management, flexible availability
scheduling, Stripe and pay-on-arrival payments, email confirmations with .ics calendar
invites, and a lightweight shortcode-based booking form.

## Installation

 1. Upload the plugin folder to `/wp-content/plugins/`.
 2. Activate via Plugins menu.
 3. Go to Booking > Settings to configure.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“EffortLess Modular Booking Platform” is open source software. The following people
have contributed to this plugin.

Contributors

 *   [ domclic ](https://profiles.wordpress.org/domclic/)

[Translate “EffortLess Modular Booking Platform” into your language.](https://translate.wordpress.org/projects/wp-plugins/effortless-modular-booking-platform)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/effortless-modular-booking-platform/),
check out the [SVN repository](https://plugins.svn.wordpress.org/effortless-modular-booking-platform/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/effortless-modular-booking-platform/)
by [RSS](https://plugins.trac.wordpress.org/log/effortless-modular-booking-platform/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 1.1.28

 * Add: donate notice displayed on all Booking admin screens (Services, Appointments,
   Agents, Settings, Network Settings).

#### 1.1.27

 * Fix: replace all inline and tags in admin views with wp_enqueue_style / wp_add_inline_style
   and wp_add_inline_script via admin_enqueue_scripts.
 * Fix: add explicit current_user_can( ‘manage_options’ ) checks in admin view files
   for defense-in-depth.
 * Fix: agents tab system was toggling .is-active class instead of .active; now 
   consistent with admin.css.

#### 1.1.26

 * Fix: remove PROJECT.md from plugin root (flagged as unexpected file by WordPress
   Plugin Check).

#### 1.1.25

 * Remove: Stripe payment integration removed (no vendor/ dependency required).
 * Remove: Payments tab from Settings page.
 * Remove: Stripe option from service payment type; only Free and Pay on arrival
   remain.

#### 1.1.24

 * Fix: replaced all interpolated table names in DB queries with $wpdb->prepare()%
   i placeholders (WP 6.2+).
 * Fix: removed all phpcs:disable/enable blocks; replaced with minimal per-line 
   phpcs:ignore where unavoidable.
 * Bump: Requires at least 6.2 (for %i placeholder support).

#### 1.1.23

 * Fix: removed load_plugin_textdomain() call (auto-loaded by WordPress.org since
   WP 4.6).
 * Fix: removed suppress_filters from WP_Query/get_posts calls.
 * Fix: added phpcs suppression for table-name DB params (internally trusted values).
 * Fix: added phpcs suppression for global variable naming in admin view templates.

#### 1.1.22

 * Fix: updated “Tested up to” to WordPress 6.8; removed PROJECT.md from distributed
   zip.

#### 1.1.21

 * Fix: removed duplicate Plugin URI header (was identical to Author URI); only 
   Author URI is kept.

#### 1.1.20

 * UX: agent edit page reorganised into four tabs — Timezone, Weekly Hours, Time
   Off, Services — using WordPress native nav-tabs. Active tab is remembered via
   URL hash. Time Off form fields use a flex row layout with labelled columns.

#### 1.1.19

 * Feature: time off now supports date ranges. Select a “From” and “To” date to 
   block an entire period in one step. Each day in the range is stored individually
   so existing slot logic is unchanged. Time inputs are hidden automatically when
   a range is selected (full-day only for ranges). Applies to both Agents and the
   global Availability screen.

#### 1.1.18

 * i18n: add “at”  “à/a las/um/に/에/於” translations to all six bundled locales
   for the booking confirmation message.

#### 1.1.17

 * Fix: booking confirmation message now shows the date in the site language (e.
   g. “13 juin 2026 à 15:30” on a French site) instead of the raw ISO date and hardcoded
   English “at”.

#### 1.1.16

 * Fix: all email types (customer, cancellation, agent, admin) now use the site 
   language for date and time formatting. Previously customer and cancellation emails
   used the visitor’s browser locale, and agent emails used the agent’s WordPress
   user locale, causing dates like “June 12, 2026” on French sites.

#### 1.1.15

 * Fix: admin notification emails now use the site locale for date and time formatting(
   e.g. “12 juin 2025” on a French site). Previously the locale was not switched,
   so month names always appeared in the request locale (often English).

#### 1.1.14

 * Fix: use post_name__in to also detect trashed templates (WordPress renames post_name
   to {slug}__trashed on trash), preventing indefinite recreation.

#### 1.1.13

 * Fix: email templates no longer recreated after deletion — existence check now
   includes trash status.
 * Fix: removed template auto-creation from new-site activation to prevent English
   templates appearing on non-English subsites; admin_init handles creation with
   the correct locale on first admin visit.

#### 1.1.12

 * Email templates are now stored as a Custom Post Type (Booking  Email Templates).
   Translators can edit templates per site in the standard WordPress editor. In 
   multisite global mode, each booking uses the templates from the site where the
   booking was made. The Settings  Emails tab has been removed.

#### 1.1.11

 * Emails to customers are now sent in the customer’s browser locale; emails to 
   agents are sent in the agent’s WordPress user locale. Locale-aware date and time
   formatting (month names, weekday names) applies to all recipient types.
 * A new customer_locale field is stored at booking time (captured from navigator.
   language in the booking form).

#### 1.1.10

 * Availability menu item removed — availability is now managed exclusively per-
   agent in Booking  Agents.
 * Services edit/add forms split into Details and Booking tabs for clearer organisation.

#### 1.1.9

 * Slot Buffer, Booking Window, and Cancellation Cutoff are now per-service settings(
   configured in Services > Edit > Details).
 * Availability (weekly schedule, blocked dates) is now managed per-agent only.

#### 1.1.8

 * Fix: appointment times are now stored as UTC in two new database columns
    (start_utc,
   end_utc). A third column (agent_timezone_at_booking) snapshots the agent’s timezone
   at booking time, so emails remain correct even if the agent later changes their
   timezone (e.g. when travelling). Existing appointments are migrated automatically
   on the next admin load. The .ics calendar invite also uses the UTC values directly.

#### 1.1.7

 * Fix: confirmation, cancellation, and agent emails now display times in the correct
   timezone. Agent emails show the agent’s own timezone; customer emails show the
   customer’s browser timezone (stored at booking time). A new {timezone} placeholder
   is available in all email templates.

#### 1.1.6

 * Slot times display in 24h format. Visitor timezone shown once as a small label
   below all slot buttons.

#### 1.1.5

 * Slot buttons now display the visitor’s timezone as a small tag inside each button,
   replacing the standalone note below the grid.

#### 1.1.4

 * Fix: submitting the Timezone form no longer wipes all agent availability windows.
   The timezone form now posts to a dedicated `elmbp_save_agent_timezone` handler
   instead of sharing the weekly-hours handler, which was clearing windows when `
   avail_active` was absent from the request.

#### 1.1.3

 * Each agent now has a configurable timezone (IANA identifier).
 * Booking form displays available slots converted to the visitor’s local timezone.
 * Slots that have already passed (in the visitor’s timezone) are hidden.

#### 1.1.2

 * Fix: email {date} and {time} placeholders now show the correct local time on 
   sites not in UTC — previously strtotime() parsed appointment times as UTC, shifting
   every email by the site’s UTC offset. Added {raw_date} (YYYY-MM-DD) and {raw_time}(
   HH:MM) as stable, machine-readable alternatives.
 * Fix: WordPress locales that include a script-variant suffix (e.g. sr_RS@latin)
   are now sanitised before being passed to the browser, preventing the JS Intl 
   API from discarding the locale and falling back silently to the visitor’s language.
 * Fix: the falsy-zero guard on the timestamp check now uses strict false !== comparison.
 * Improvement: the weekday-header Intl.DateTimeFormat object is now created once
   per calendar instead of once per cell.

#### 1.1.1

 * Fix: the booking calendar now formats dates in the site language (month name,
   weekday headers, and selected-date label) instead of the visitor’s browser locale.
   Confirmation/admin/agent emails now show {date} and {time} in the site’s configured
   date/time format and language.

#### 1.1.0

 * New: Agents / team scheduling. Assign multiple WordPress users as agents to a
   service (Booking  Agents); each agent has their own weekly hours, time off, and
   assigned services. A slot is offered when any assigned agent is free, and the
   system auto-assigns the least-loaded free agent at booking. The assigned agent
   is emailed (new Agent Notification template; {agent_name} placeholder). Services
   with no agents keep the single-schedule behaviour.
 * New: per-service availability. Each service can have its own weekly schedule 
   and blocked dates (Services  edit  Availability tab); the Booking  Availability
   page is now the default used when a service defines none. Precedence: agents  
   per-service schedule  global default.
 * Appointments screen shows the assigned agent and allows reassigning to another
   of the service’s agents.
 * All new admin/email strings translated into the six bundled locales (fr, es, 
   ko, ja, de, zh_TW).

#### 1.0.11

 * Fix: enabling Global mode now creates the shared (network) tables immediately,
   instead of waiting for the next admin page load — so services and availability
   saved right after switching land in the correct store.
 * New: admin notices on the Booking screens show the active data mode (on multisite)
   and warn when no availability is configured (which is why a booking calendar 
   shows all dates greyed out).

#### 1.0.10

 * Change: on multisite, the Global/Per-site mode toggle and all global settings
   now live in Network Admin  Settings  Booking. The per-site Booking  Settings 
   page only shows settings in Per-site mode (or on single-site); in Global mode
   it points to the network settings.
 * Note: in Global mode, services and availability are shared network-wide. After
   enabling Global mode you must (re)configure Availability while in Global mode—
   existing per-site data is not copied into the shared store, so an empty shared
   schedule shows no bookable dates.

#### 1.0.9

 * New (multisite): “Booking data mode” setting (Booking  Settings  General, super
   admins only) to run bookings Per site or Global. In Global mode all sites share
   the same services, availability, appointments and settings. Stored as a network
   option; single-site installs are unaffected.

#### 1.0.8

 * Change: the booking form now opens on the calendar with the available dates to
   pick (positioned on, and highlighting, the first available date) instead of jumping
   straight into that day’s time slots. Time slots load when a date is clicked.

#### 1.0.7

 * New: cancel an appointment directly from the Appointments admin screen — a “Cancel”
   row action (and the Change Status dropdown) now sets it to cancelled and emails
   the customer the cancellation notice. Translated into all bundled languages.

#### 1.0.6

 * New: translations for French (fr_FR), Spanish (es_ES), Korean (ko_KR), Japanese(
   ja), German (de_DE), and Taiwan Mandarin (zh_TW), including the customer/admin
   emails. Front-end strings are translated server-side, so the booking form follows
   the site/user language.
 * Added load_plugin_textdomain() so the bundled translations in /languages load
   automatically.

#### 1.0.5

 * Fix (critical): booking submission crashed with a fatal error — wp_tempnam() (
   used for the .ics attachment) is not available during front-end REST requests.
   The calendar invite is now written with front-end-safe functions.
 * Hardened multisite new-site activation against a similar admin-only function 
   being unavailable.
 * New: the booking form now opens on the next available date and shows that day’s
   time slots immediately, even when it falls in a later month.
 * New: popup mode — [effortless_booking service=”1″ popup=”yes” button_text=”Book
   now”] renders a button that opens the booking form in a modal. Inline remains
   the default.

#### 1.0.4

 * Change: the “Quick Start” welcome notice now appears only on the Booking admin
   pages instead of across all of wp-admin.

#### 1.0.3

 * Fix: booking form showed a permanent loading spinner over the calendar. The loading
   overlay’s `hidden` attribute was being overridden by its own `display: flex` 
   rule, so it never hid. The `hidden` attribute is now authoritative inside the
   widget.

#### 1.0.2

 * Fix: services (and other data) silently failing to save when a site’s database
   tables were missing — common on multisite sub-sites. Tables are now self-healed
   on every admin load via a schema-version check.
 * Fix: the Services screen now reports the real database error instead of always
   showing “Service created.” on failure.
 * Fix: dashboard widget styles and copy button now load correctly on the WordPress
   dashboard.

#### 1.0.1

 * Multisite network activation support — tables created for all sites on network
   activation and for new sites when added.
 * Dashboard widget listing all active services with one-click copy-to-clipboard
   shortcodes.
 * Welcome / quick-start admin notice shown after activation with shortcode usage
   instructions.
 * Copy button added to each shortcode in the Services admin table.

#### 1.0.0

 * Initial release.

## Meta

 *  Version **1.1.28**
 *  Last updated **9 hours ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.2 or higher **
 *  Tested up to **7.0**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [appointments](https://wordpress.org/plugins/tags/appointments/)[booking](https://wordpress.org/plugins/tags/booking/)
   [calendar](https://wordpress.org/plugins/tags/calendar/)[scheduling](https://wordpress.org/plugins/tags/scheduling/)
   [stripe](https://wordpress.org/plugins/tags/stripe/)
 *  [Advanced View](https://wordpress.org/plugins/effortless-modular-booking-platform/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/effortless-modular-booking-platform/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/effortless-modular-booking-platform/reviews/)

## Contributors

 *   [ domclic ](https://profiles.wordpress.org/domclic/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/effortless-modular-booking-platform/)