{"id":387280,"date":"2026-10-29T10:23:02","date_gmt":"2026-10-29T10:23:02","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/bookingistic\/"},"modified":"2026-10-29T10:26:26","modified_gmt":"2026-10-29T10:26:26","slug":"bookingistic","status":"publish","type":"plugin","link":"https:\/\/cs.wordpress.org\/plugins\/bookingistic\/","author":18551128,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.6.0","stable_tag":"2.6.0","tested":"7.1.4","requires":"6.4","requires_php":"8.0","requires_plugins":null,"header_name":"Bookingistic","header_author":"Shuvo Chandra Sarker","header_description":"Advanced Booking, Calendar & Email Automation for WordPress. Turn your site into a premium booking system with services, staff, availability, calendar views, and automated emails.","assets_banners_color":"6265a3","last_updated":"2026-10-29 10:26:26","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/bookingistic.com","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":58,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.6.0":{"tag":"2.6.0","author":"developershuvo","date":"2026-10-29 10:26:26","revision":3772637}},"upgrade_notice":{"2.6.0":"<p>New booking-form design and motion across all designs and calendar views, all SQL prepared, object caching for the plugin&#039;s tables, and security hardening. No database changes.<\/p>","2.3.0":"<p>Adds payments: WooCommerce Orders gateway, payment ledger, deposits, signed pay links and the [bookingistic_payment] shortcode. A small automatic database upgrade (service deposit column) runs on update.<\/p>","2.2.0":"<p>New designs, calendar views, industry presets and Google Calendar sync. Database upgrades run automatically \u2014 back up before updating as with any release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3772631,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3772631,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-772x250.png":{"filename":"banner-772x250.png","revision":3772631,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["2.6.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3772631,"resolution":"1","location":"assets","locale":"","width":1271,"height":853},"screenshot-10.png":{"filename":"screenshot-10.png","revision":3772631,"resolution":"10","location":"assets","locale":"","width":1258,"height":688},"screenshot-11.png":{"filename":"screenshot-11.png","revision":3772631,"resolution":"11","location":"assets","locale":"","width":1258,"height":688},"screenshot-12.png":{"filename":"screenshot-12.png","revision":3772631,"resolution":"12","location":"assets","locale":"","width":1258,"height":797},"screenshot-13.png":{"filename":"screenshot-13.png","revision":3772631,"resolution":"13","location":"assets","locale":"","width":1258,"height":797},"screenshot-14.png":{"filename":"screenshot-14.png","revision":3772631,"resolution":"14","location":"assets","locale":"","width":1258,"height":797},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3772631,"resolution":"2","location":"assets","locale":"","width":1271,"height":853},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3772631,"resolution":"3","location":"assets","locale":"","width":1271,"height":853},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3772631,"resolution":"4","location":"assets","locale":"","width":1264,"height":730},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3772631,"resolution":"5","location":"assets","locale":"","width":805,"height":824},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3772631,"resolution":"6","location":"assets","locale":"","width":1180,"height":824},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3772631,"resolution":"7","location":"assets","locale":"","width":792,"height":653},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3772631,"resolution":"8","location":"assets","locale":"","width":1260,"height":898},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3772631,"resolution":"9","location":"assets","locale":"","width":1268,"height":509}},"screenshots":{"1":"Calendar \u2014 month view with filters and booking events","2":"Calendar \u2014 week view for staff planning","3":"Calendar \u2014 list view for upcoming bookings","4":"Classic template \u2014 two-panel booking form with service details and available times","5":"Modern Card template \u2014 compact card layout with calendar and time selection","6":"Split Hero template \u2014 full-width branded booking experience","7":"Minimal Inline template \u2014 lightweight form that blends into any theme","8":"Services \u2014 configure duration, buffers, pricing, deposits, and confirmation rules","9":"Staff \u2014 add a staff member and set availability details","10":"Staff availability \u2014 working hours and days off","11":"Email automations \u2014 confirmation, cancellation, reschedule, and reminder rules","12":"New automation \u2014 event triggers, recipients, delays, and template variables","13":"Reports \u2014 booking status, service totals, and weekly activity","14":"Integrations \u2014 WooCommerce, Google Calendar, Outlook, Messageistic, and CRMistic"}},"plugin_section":[],"plugin_tags":[276,8132,269,416,268],"plugin_category":[40],"plugin_contributors":[289445],"plugin_business_model":[],"class_list":["post-387280","plugin","type-plugin","status-publish","hentry","plugin_tags-appointment","plugin_tags-appointments","plugin_tags-booking","plugin_tags-calendar","plugin_tags-scheduling","plugin_category-calendar-and-events","plugin_contributors-developershuvo","plugin_committers-developershuvo"],"banners":{"banner":"https:\/\/ps.w.org\/bookingistic\/assets\/banner-772x250.png?rev=3772631","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/bookingistic\/assets\/icon-128x128.png?rev=3772631","icon_2x":"https:\/\/ps.w.org\/bookingistic\/assets\/icon-256x256.png?rev=3772631","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/bookingistic\/assets\/screenshot-1.png?rev=3772631","caption":"Calendar \u2014 month view with filters and booking events"},{"src":"https:\/\/ps.w.org\/bookingistic\/assets\/screenshot-2.png?rev=3772631","caption":"Calendar \u2014 week view for staff planning"},{"src":"https:\/\/ps.w.org\/bookingistic\/assets\/screenshot-3.png?rev=3772631","caption":"Calendar \u2014 list view for upcoming bookings"},{"src":"https:\/\/ps.w.org\/bookingistic\/assets\/screenshot-4.png?rev=3772631","caption":"Classic template \u2014 two-panel booking form with service details and available times"},{"src":"https:\/\/ps.w.org\/bookingistic\/assets\/screenshot-5.png?rev=3772631","caption":"Modern Card template \u2014 compact card layout with calendar and time selection"},{"src":"https:\/\/ps.w.org\/bookingistic\/assets\/screenshot-6.png?rev=3772631","caption":"Split Hero template \u2014 full-width branded booking experience"},{"src":"https:\/\/ps.w.org\/bookingistic\/assets\/screenshot-7.png?rev=3772631","caption":"Minimal Inline template \u2014 lightweight form that blends into any theme"},{"src":"https:\/\/ps.w.org\/bookingistic\/assets\/screenshot-8.png?rev=3772631","caption":"Services \u2014 configure duration, buffers, pricing, deposits, and confirmation rules"},{"src":"https:\/\/ps.w.org\/bookingistic\/assets\/screenshot-9.png?rev=3772631","caption":"Staff \u2014 add a staff member and set availability details"},{"src":"https:\/\/ps.w.org\/bookingistic\/assets\/screenshot-10.png?rev=3772631","caption":"Staff availability \u2014 working hours and days off"},{"src":"https:\/\/ps.w.org\/bookingistic\/assets\/screenshot-11.png?rev=3772631","caption":"Email automations \u2014 confirmation, cancellation, reschedule, and reminder rules"},{"src":"https:\/\/ps.w.org\/bookingistic\/assets\/screenshot-12.png?rev=3772631","caption":"New automation \u2014 event triggers, recipients, delays, and template variables"},{"src":"https:\/\/ps.w.org\/bookingistic\/assets\/screenshot-13.png?rev=3772631","caption":"Reports \u2014 booking status, service totals, and weekly activity"},{"src":"https:\/\/ps.w.org\/bookingistic\/assets\/screenshot-14.png?rev=3772631","caption":"Integrations \u2014 WooCommerce, Google Calendar, Outlook, Messageistic, and CRMistic"}],"raw_content":"<!--section=description-->\n<p>Bookingistic turns your WordPress site into a premium booking system \u2014 for strategy calls, salons, clinics, tutors, fitness trainers, consultants, and any appointment-based business.<\/p>\n\n<p>Visit <a href=\"https:\/\/bookingistic.com\">Bookingistic.com<\/a> for the live product overview, setup guidance, and booking workflow examples.<\/p>\n\n<p><strong>Booking form designs (pick per site or per shortcode)<\/strong><\/p>\n\n<ul>\n<li><strong>Classic<\/strong> \u2014 two-panel layout with service details<\/li>\n<li><strong>Modern Card<\/strong> \u2014 elevated card with soft shadows, perfect for coaches<\/li>\n<li><strong>Split Hero<\/strong> \u2014 bold gradient header, great for salons and clinics<\/li>\n<li><strong>Minimal Inline<\/strong> \u2014 borderless, blends into any theme<\/li>\n<\/ul>\n\n<p>Switch templates instantly under Bookingistic \u2192 Appearance, or per form: <code>[bookingistic service=\"consult\" template=\"modern\"]<\/code>.<\/p>\n\n<p><strong>Three calendar views<\/strong><\/p>\n\n<ul>\n<li>Month grid \u2014 the classic date picker<\/li>\n<li>Pills \u2014 horizontal next-14-days scroller (mobile-first)<\/li>\n<li>List \u2014 upcoming dates with Today \/ Tomorrow labels<\/li>\n<\/ul>\n\n<p><strong>One-click industry presets<\/strong><\/p>\n\n<p>Salon\/Spa, Clinic\/Medical, Fitness\/Yoga, Tutoring, Consulting, Home Services \u2014 each applies a tuned design, brand color, and scheduling defaults (slot interval, notice window, booking horizon). Everything stays editable.<\/p>\n\n<p><strong>Elementor widget<\/strong><\/p>\n\n<p>Drag-and-drop the Bookingistic Form widget with live controls for service, template, and calendar view. (Appears automatically when Elementor is active.)<\/p>\n\n<p><strong>Real scheduling engine<\/strong><\/p>\n\n<ul>\n<li>Services with duration, buffers, price, category, manual\/auto confirmation<\/li>\n<li>Staff with per-day working hours, days off, holidays, daily booking limits<\/li>\n<li>Double-booking guard, min-notice, max-advance window, slot interval<\/li>\n<li>Timezone-aware: slots render in the visitor's timezone<\/li>\n<li>Cancel &amp; reschedule via signed, expiring links \u2014 no account needed<\/li>\n<\/ul>\n\n<p><strong>Google Calendar<\/strong><\/p>\n\n<ul>\n<li>Free on every site: .ics attachments + one-click \"Add to Google Calendar\" links<\/li>\n<li>Two-way sync (bring your own free Google OAuth client): confirmed bookings push to each staff member's calendar, and their external events automatically block booking slots. Refreshed every 15 minutes.<\/li>\n<\/ul>\n\n<p><strong>Email automation<\/strong><\/p>\n\n<p>Branded HTML confirmations, reminders (hourly cron), cancellation and reschedule notices. Automation rules fire on booking events; every send is logged. Site owners can add their own custom footer text under Settings.<\/p>\n\n<p><strong>Payments (bring your own gateway)<\/strong><\/p>\n\n<ul>\n<li>Paid services collect payment through a WooCommerce order per booking \u2014 customers pay with any payment method WooCommerce already supports, and payment status flows back to the booking automatically (paid \u2192 booking confirmed).<\/li>\n<li>Payment ledger: every attempt (pending, paid, refunded, failed) is logged under Bookingistic \u2192 Payments.<\/li>\n<li>Developer gateways: plug additional providers into the <code>bookingistic_payment_gateways<\/code> filter \u2014 no core billing decision is hard-coded.<\/li>\n<\/ul>\n\n<p><strong>Developer-friendly<\/strong><\/p>\n\n<ul>\n<li>REST API at <code>\/wp-json\/bookingistic\/v1\/<\/code> (services, staff, availability, bookings)<\/li>\n<li>Actions &amp; filters: <code>bookingistic_booking_confirmed<\/code>, <code>bookingistic_available_slots<\/code>, <code>bookingistic_external_busy_intervals<\/code>, <code>bookingistic_can_remove_branding<\/code>, and more<\/li>\n<li>Clean custom tables; opt-in data removal on uninstall (<code>BOOKINGISTIC_DELETE_DATA<\/code>)<\/li>\n<li>Backward compatible with the v1 <code>wpistic_booking<\/code> CPT and legacy REST route<\/li>\n<\/ul>\n\n<h4>Shortcode<\/h4>\n\n<pre><code>[bookingistic service=\"strategy-call\"]\n[bookingistic service_id=\"1\"]\n[bookingistic template=\"split\" calendar_view=\"pills\"]\n<\/code><\/pre>\n\n<h4>REST API<\/h4>\n\n<pre><code>GET  \/wp-json\/bookingistic\/v1\/services\nGET  \/wp-json\/bookingistic\/v1\/availability?service_id=N&amp;date=YYYY-MM-DD\nPOST \/wp-json\/bookingistic\/v1\/bookings\nPOST \/wp-json\/bookingistic\/v1\/bookings\/{id}\/reschedule\nGET  \/wp-json\/bookingistic\/v1\/payments\nGET  \/wp-json\/bookingistic\/v1\/payments\/gateways\n<\/code><\/pre>\n\n<h3>External services<\/h3>\n\n<p><strong>Google Calendar (optional, per staff member)<\/strong><\/p>\n\n<p>This plugin can connect to Google Calendar so each staff member can two-way sync their bookings. Nothing is sent to Google until a staff member explicitly clicks \"Connect Google Calendar\" in the staff editor and authorizes access with their own free Google OAuth client.<\/p>\n\n<ul>\n<li>What it is used for: pushing confirmed bookings to the connected Google Calendar, and reading that calendar's free\/busy blocks so external events block booking slots.<\/li>\n<li>What data is sent and when: booking details (service name, date\/time, customer name and notes) are sent when a booking is confirmed, rescheduled, or deleted, for staff members who connected their calendar. OAuth tokens are stored in the site's own database.<\/li>\n<li>Which services are contacted: Google's OAuth endpoints (accounts.google.com, oauth2.googleapis.com) and the Google Calendar API (www.googleapis.com).<\/li>\n<li>Google Terms of Service: https:\/\/policies.google.com\/terms<\/li>\n<li>Google Privacy Policy: https:\/\/policies.google.com\/privacy<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>bookingistic<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install via Plugins \u2192 Add New.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Open <strong>Bookingistic \u2192 Appearance<\/strong> and pick an industry preset (or your own design).<\/li>\n<li>Add your services under <strong>Bookingistic \u2192 Services<\/strong>.<\/li>\n<li>Drop <code>[bookingistic service=\"your-service\"]<\/code> on any page \u2014 or use the Elementor widget.<\/li>\n<\/ol>\n\n<p>Upgrading from 1.x? Your existing bookings and the legacy form keep working.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20the%20free%20version%20include%20payments%3F\"><h3>Does the free version include payments?<\/h3><\/dt>\n<dd><p>Yes \u2014 via WooCommerce. Turn on \"WooCommerce Orders\" under Bookingistic \u2192 Payments and every paid booking creates a WooCommerce order the customer can check out with (cards, PayPal, bank transfer \u2014 whatever your store supports). Payment status syncs back to the booking, and confirmed payment auto-confirms the booking. Direct Stripe\/PayPal gateways without WooCommerce are on the roadmap.<\/p><\/dd>\n<dt id=\"does%20google%20calendar%20sync%20need%20a%20paid%20service%3F\"><h3>Does Google Calendar sync need a paid service?<\/h3><\/dt>\n<dd><p>No. The deep-link + .ics features work everywhere. Two-way sync uses your own free Google OAuth client credentials (setup guide under Bookingistic \u2192 Integrations \u2192 Google Calendar).<\/p><\/dd>\n<dt id=\"can%20each%20staff%20member%20have%20their%20own%20calendar%3F\"><h3>Can each staff member have their own calendar?<\/h3><\/dt>\n<dd><p>Yes \u2014 per-day working hours, days off, daily limits, and individual Google Calendar connections.<\/p><\/dd>\n<dt id=\"will%20it%20slow%20my%20site%20down%3F\"><h3>Will it slow my site down?<\/h3><\/dt>\n<dd><p>No external CDN calls, no jQuery dependency, one small CSS + one JS file, loaded only where the form appears.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.6.0<\/h4>\n\n<ul>\n<li>New: premium booking-form design language across all four form designs and all three calendar views \u2014 elevated card, step progress (\"Step 1 of 3\"), service summary card with price pill, day tiles, time pills and a live \"Continue with Tue at 1:30 PM \u2192\" button<\/li>\n<li>New: motion \u2014 slide\/fade step transitions, spring-like day\/time selection, skeleton shimmer while availability loads, staggered time pills, crossfading CTA text, animated success checkmark, floating toast cards and hover micro-interactions; pure CSS + vanilla JS, no new libraries or external requests, and fully disabled under prefers-reduced-motion<\/li>\n<li>Accessibility: arrow-key \/ Home \/ End navigation for days, times and hosts; full-date labels on day buttons; polite live region for loading and availability; focus moves to each new step; visible focus rings; forced-colors support<\/li>\n<li>Changed: Modern Card is the default design and #1b7257 the default accent for sites that have never saved Appearance settings; saved settings, shortcode attributes and the Elementor widget are unchanged<\/li>\n<li>Security: every custom-table SQL query now goes through $wpdb-&gt;prepare() with placeholders; table and column identifiers are bound with %i (whitelisted columns only), optional filters are value-bound instead of concatenated, and ORDER BY uses a strict column whitelist. No phpcs:ignore remains on any SQL-preparation (PreparedSQL \/ PreparedSQLPlaceholders \/ InterpolatedNotPrepared) sniff.<\/li>\n<li>Performance: reads from the plugin's own tables are now object-cached (wp_cache_get\/wp_cache_set, one cache group per table) and invalidated through a per-table last_changed key on every write (create, update, delete, status change, cancel, payment updates, schema install\/upgrade, uninstall, and at the end of every booking transaction). Availability, overlap\/double-booking, daily-limit, slot-lock, slug-uniqueness and reminder checks always read live data. The remaining Plugin Check DirectQuery notices carry narrow line-level ignores with the reason stated. No functional changes.<\/li>\n<li>Fixed: PHP 8.1+ \"Passing null to htmlspecialchars()\" deprecation notice when editing a staff member with an empty bio (found while testing on MySQL\/MariaDB).<\/li>\n<li>Changed: the booking form uses the system UI font stack; no web font is loaded or referenced<\/li>\n<li>Hardening: admin form input (staff hours, days off, phone, integration settings) is sanitized with core functions before validation, admin pagination output is passed through wp_kses_post(), Google Calendar ICS files are written through WP_Filesystem, the cron schedule is registered next to its callback, and uninstall (with BOOKINGISTIC_DELETE_DATA) also removes the plugin's transients. Plugin Check (with experimental checks) and PHPCS (WordPress standard) report no errors or warnings.<\/li>\n<\/ul>\n\n<h4>2.5.5<\/h4>\n\n<ul>\n<li>Fixed: REST requests from the booking form and the admin calendar now work on sites using plain permalinks (the WordPress default on a fresh install) \u2014 endpoint URLs are built with a proper query-string join instead of plain concatenation, which previously produced \"No route was found matching the URL and request method\" on every booking-form and calendar request<\/li>\n<\/ul>\n\n<h4>2.5.4<\/h4>\n\n<ul>\n<li>Hardening: numeric superglobal reads now go through absint()\/floatval()\/sanitize_key() instead of raw casts, satisfying the stricter WordPress Coding Standards rulesets used by the latest Plugin Check and the WordPress.org review Playground \u2014 the plugin reports 0 errors and 0 warnings under it<\/li>\n<\/ul>\n\n<h4>2.5.3<\/h4>\n\n<ul>\n<li>Hardening: every superglobal read is now unslashed and sanitized (or explicitly cast) \u2014 admin pages, list filters, and the public cancel\/reschedule\/pay links<\/li>\n<li>Hardening: all admin templates now use plugin-prefixed variable names; read-only display filters are annotated for the WordPress coding standards<\/li>\n<li>Fixed: removed a leftover duplicate \"Footer text\" field on the Settings screen that referenced the removed 2.5.1 branding gate<\/li>\n<li>Dev: plugin now reports 0 errors and 0 warnings under the Plugin Check (PCP) static analysis suite<\/li>\n<\/ul>\n\n<h4>2.5.2<\/h4>\n\n<ul>\n<li>Fixed: the Google Calendar sync cron event is now scheduled correctly on a fresh activation \u2014 the custom \"every 15 minutes\" interval is registered before scheduling (previously the interval was only registered after activation, so the event was silently skipped on new installs)<\/li>\n<li>Security: every admin save and action handler (settings, services, staff, bookings, email automations, integrations, appearance) now verifies a capability before processing, in addition to the existing nonce checks \u2014 users without the matching Bookingistic capability get a 403<\/li>\n<\/ul>\n\n<h4>2.5.1<\/h4>\n\n<ul>\n<li>Removed the email footer branding and its license gate \u2014 every shipped feature is now free and fully enabled (WordPress.org guidelines)<\/li>\n<li>Security: staff email addresses are no longer exposed by the public REST endpoints<\/li>\n<li>Security: client IP detection for rate limiting now uses only the direct connection address unless the site explicitly opts in to trusted proxy headers, and all header input is sanitized<\/li>\n<li>Security: legacy form nonce is now sanitized before verification; admin error notices sanitize input before escaping<\/li>\n<li>Privacy: email .ics attachments are written to the system temp directory with random names and deleted after sending \u2014 no booking data in the public uploads folder<\/li>\n<li>Fixed: appearance screen styles load through the standard enqueue system<\/li>\n<li>Fixed: removed the redundant translation loader (WordPress.org loads translations automatically)<\/li>\n<li>Brand: plugin links now point to bookingistic.com<\/li>\n<\/ul>\n\n<h4>2.5.0<\/h4>\n\n<ul>\n<li>Fixed: <code>\/wp-json\/bookingistic\/v1\/payments\/status<\/code> now accepts the signed link's <code>t<\/code> parameter (previously only read <code>token<\/code>, so plugin-issued links always returned 410)<\/li>\n<li>Security: pay-now links now expire after 90 days \u2014 the token embeds its expiry under an HMAC; previously a leaked pay link stayed valid forever<\/li>\n<li>Security: Google Calendar OAuth tokens are now encrypted at rest (authenticated secretbox keyed from the site salt); existing tokens migrate transparently on the next save<\/li>\n<li>New: race-safe booking \u2014 concurrent submissions for the same staff member are serialized with a row lock and the availability re-check runs inside the transaction, preventing double-booking under simultaneous submits (InnoDB; silently degrades to check-then-insert on MyISAM)<\/li>\n<li>Dev: standalone test suite under <code>tests\/<\/code> (run <code>php tests\/run-all.php<\/code>) covering payment token expiry, crypto round-trip, and deposit math<\/li>\n<\/ul>\n\n<h4>2.4.0<\/h4>\n\n<ul>\n<li>New: premium admin UI \u2014 every Bookingistic screen restyled with a consistent design system (page headers with taglines, card-based panels, refined tables, status pills, sticky save bar)<\/li>\n<li>New: Integrations page rebuilt as an animated card grid \u2014 icon, description, Connected\/Not connected pill, hover lift, and staggered fade-in (pure CSS, respects prefers-reduced-motion)<\/li>\n<li>New: dashboard, bookings, services, staff, customers, and customer profiles now show live stat cards (real counts from your data)<\/li>\n<li>New: Reports screen with bookings-by-status summary and top services (replaces the Phase 2 placeholder)<\/li>\n<li>Tweak: legacy \"Bookings (v1)\" menu removed from the admin sidebar (data and the legacy REST endpoint are untouched; developers can restore it with the <code>bookingistic_legacy_bookings_show_ui<\/code> filter)<\/li>\n<li>Tweak: admin stylesheet rebuilt around CSS variables matching the WordPress admin palette; no external fonts or CDNs<\/li>\n<\/ul>\n\n<h4>2.3.0<\/h4>\n\n<ul>\n<li>New: Payments module \u2014 WooCommerce Orders gateway with enable\/disable switch under Bookingistic \u2192 Payments<\/li>\n<li>New: payment ledger \u2014 every payment attempt (pending\/paid\/refunded\/failed) recorded per booking, with admin screen and REST endpoints (<code>\/payments<\/code>, <code>\/payments\/gateways<\/code>, <code>\/payments\/status<\/code>)<\/li>\n<li>New: <code>bookingistic_payment_gateways<\/code> (alias <code>bookingistic_gateways<\/code>), <code>bookingistic_payment_recorded<\/code>, <code>bookingistic_payment_currency<\/code> filters \u2014 gateway registry is fully pluggable<\/li>\n<li>New: deposits \u2014 per-service deposit percentage; only the deposit is charged upfront (<code>deposit_paid<\/code> status), supported across forms, admin and REST<\/li>\n<li>New: signed pay-now links (<code>?bookingistic_action=pay<\/code>, HMAC token, 410 on bad token) + <code>[bookingistic_payment id email]<\/code> shortcode with Pay now button<\/li>\n<li>New: booking form success screen shows a Pay now button when a gateway is connected, or pay-later instructions otherwise<\/li>\n<li>New: <code>{payment_link}<\/code> email merge tag now carries the booking's signed pay link<\/li>\n<li>New: admin manual actions \u2014 Mark paid \/ Refund on payment records (nonce + capability checked) for offline payments<\/li>\n<li>New: paid bookings that receive payment are confirmed automatically (consistent with the WooCommerce integration flow)<\/li>\n<\/ul>\n\n<h4>2.2.0<\/h4>\n\n<ul>\n<li>New: 4 booking form templates \u2014 Classic, Modern Card, Split Hero, Minimal Inline (Appearance page + shortcode\/Elementor override)<\/li>\n<li>New: 3 calendar views \u2014 month grid, 14-day pills, upcoming list<\/li>\n<li>New: one-click industry presets with live preview (salon, clinic, fitness, tutoring, consulting, home services)<\/li>\n<li>New: brand accent color + corner radius controls<\/li>\n<li>New: Elementor widget with live template\/calendar controls<\/li>\n<li>New: Google Calendar two-way sync \u2014 per-staff OAuth connect, booking push, freebusy blocking, 15-min refresh<\/li>\n<li>New: Appearance admin page with live preview<\/li>\n<li>New: <code>bookingistic_gcal_sync<\/code> 15-minute cron; <code>bookingistic_external_busy_intervals<\/code> filter<\/li>\n<li>Improved: refreshed readme, i18n strings, POT file<\/li>\n<li>Fixed: staff REST responses no longer expose calendar token metadata<\/li>\n<\/ul>\n\n<h4>2.1.0<\/h4>\n\n<ul>\n<li>Version alignment release (matches the distributed 2.1.0 package).<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Phase 1 rebuild: custom tables, modular OOP architecture, availability engine,\nfrontend booking form with side calendar, full REST namespace, email automations\nwith branding helper, admin UI, signed cancel &amp; reschedule links.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial v1 Strategy Call lead-capture plugin.<\/li>\n<\/ul>","raw_excerpt":"Booking, calendar &amp; email automation for WordPress \u2014 form designs, calendar views, Google Sync, staff scheduling, and payments via WooCommerce.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/387280","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=387280"}],"author":[{"embeddable":true,"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/developershuvo"}],"wp:attachment":[{"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=387280"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=387280"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=387280"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=387280"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=387280"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=387280"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}