{"id":319887,"date":"2026-09-22T20:34:18","date_gmt":"2026-09-22T20:34:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/gather-grove-booking\/"},"modified":"2026-09-29T00:16:07","modified_gmt":"2026-09-29T00:16:07","slug":"gather-grove-booking","status":"publish","type":"plugin","link":"https:\/\/pirate.wordpress.org\/plugins\/gather-grove-booking\/","author":23506124,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.204.0","stable_tag":"1.204.0","tested":"7.1.2","requires":"6.9","requires_php":"8.2","requires_plugins":null,"header_name":"Gather Grove Booking","header_author":"Rob Hewitt \/ Gather Grove","header_description":"Class scheduling and booking for studios, wellness centers, and community programs.","assets_banners_color":"2a4436","last_updated":"2026-09-29 00:16:07","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/gathergrove.io\/docs\/booking","header_author_uri":"https:\/\/gathergrove.io","rating":0,"author_block_rating":0,"active_installs":0,"downloads":349,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.178.1":{"tag":"1.178.1","author":"gturtle108","date":"2026-09-24 16:53:53","revision":3711708},"1.186.0":{"tag":"1.186.0","author":"gturtle108","date":"2026-09-24 17:16:45","revision":3711744},"1.191.1":{"tag":"1.191.1","author":"gturtle108","date":"2026-09-25 21:48:56","revision":3713631},"1.192.0":{"tag":"1.192.0","author":"gturtle108","date":"2026-09-25 22:53:50","revision":3713667},"1.194.0":{"tag":"1.194.0","author":"gturtle108","date":"2026-09-26 07:07:52","revision":3713935},"1.194.1":{"tag":"1.194.1","author":"gturtle108","date":"2026-09-26 07:42:29","revision":3713960},"1.195.0":{"tag":"1.195.0","author":"gturtle108","date":"2026-09-26 18:22:38","revision":3714585},"1.200.0":{"tag":"1.200.0","author":"gturtle108","date":"2026-09-28 20:57:12","revision":3717907},"1.204.0":{"tag":"1.204.0","author":"gturtle108","date":"2026-09-29 00:16:07","revision":3718055},"1.95.9":{"tag":"1.95.9","author":"gturtle108","date":"2026-09-22 20:33:59","revision":3708059}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3708060,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3708060,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3709617,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3709617,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.178.1","1.186.0","1.191.1","1.192.0","1.194.0","1.194.1","1.195.0","1.200.0","1.204.0","1.95.9"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3709633,"resolution":"1","location":"assets","locale":"","width":1456,"height":730},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3709633,"resolution":"2","location":"assets","locale":"","width":1456,"height":730},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3711708,"resolution":"3","location":"assets","locale":"","width":1456,"height":730},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3709633,"resolution":"4","location":"assets","locale":"","width":1456,"height":730},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3709633,"resolution":"5","location":"assets","locale":"","width":1456,"height":730},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3709633,"resolution":"6","location":"assets","locale":"","width":1456,"height":730}},"screenshots":{"1":"The public schedule \u2014 month view, filterable by category, instructor and location, built as an Elementor widget.","2":"Sessions \u2014 every scheduled occurrence with capacity, instructor, location and status, with row actions.","3":"Class details in one click \u2014 date, facilitator, location, price and spots left, with Book Now, from the schedule's list view.","4":"Waiver Compliance \u2014 who has signed the current version of each waiver and who still owes one, with CSV export and paper-signature recording.","5":"Instructors \u2014 each instructor is a profile the schedule and class pages link to.","6":"Settings \u2014 currency, timezone, formats and page URLs, plus the Booking, Notifications, Brand, Email, Payments and Integrations tabs."}},"plugin_section":[],"plugin_tags":[8132,8162,76538,10449,10311],"plugin_category":[40],"plugin_contributors":[282128],"plugin_business_model":[],"class_list":["post-319887","plugin","type-plugin","status-publish","hentry","plugin_tags-appointments","plugin_tags-class-booking","plugin_tags-elementor","plugin_tags-studio","plugin_tags-yoga","plugin_category-calendar-and-events","plugin_contributors-gturtle108","plugin_committers-gturtle108"],"banners":{"banner":"https:\/\/ps.w.org\/gather-grove-booking\/assets\/banner-772x250.png?rev=3709617","banner_2x":"https:\/\/ps.w.org\/gather-grove-booking\/assets\/banner-1544x500.png?rev=3709617","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/gather-grove-booking\/assets\/icon-128x128.png?rev=3708060","icon_2x":"https:\/\/ps.w.org\/gather-grove-booking\/assets\/icon-256x256.png?rev=3708060","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/gather-grove-booking\/assets\/screenshot-1.png?rev=3709633","caption":"The public schedule \u2014 month view, filterable by category, instructor and location, built as an Elementor widget."},{"src":"https:\/\/ps.w.org\/gather-grove-booking\/assets\/screenshot-2.png?rev=3709633","caption":"Sessions \u2014 every scheduled occurrence with capacity, instructor, location and status, with row actions."},{"src":"https:\/\/ps.w.org\/gather-grove-booking\/assets\/screenshot-3.png?rev=3711708","caption":"Class details in one click \u2014 date, facilitator, location, price and spots left, with Book Now, from the schedule's list view."},{"src":"https:\/\/ps.w.org\/gather-grove-booking\/assets\/screenshot-4.png?rev=3709633","caption":"Waiver Compliance \u2014 who has signed the current version of each waiver and who still owes one, with CSV export and paper-signature recording."},{"src":"https:\/\/ps.w.org\/gather-grove-booking\/assets\/screenshot-5.png?rev=3709633","caption":"Instructors \u2014 each instructor is a profile the schedule and class pages link to."},{"src":"https:\/\/ps.w.org\/gather-grove-booking\/assets\/screenshot-6.png?rev=3709633","caption":"Settings \u2014 currency, timezone, formats and page URLs, plus the Booking, Notifications, Brand, Email, Payments and Integrations tabs."}],"raw_content":"<!--section=description-->\n<p>Gather Grove Booking runs the schedule for people who teach \u2014 yoga and fitness studios, dance and martial arts schools, music teachers, pottery and craft studios, wellness practitioners, and community programs. Design your booking pages visually with Elementor, take drop-in and appointment bookings, and accept card payments with Stripe.<\/p>\n\n<p>The free version is fully functional for running a real studio:<\/p>\n\n<ul>\n<li><strong>Classes &amp; sessions<\/strong> \u2014 recurring schedules, capacity limits, multiple locations and rooms.<\/li>\n<li><strong>Online booking<\/strong> \u2014 Elementor booking-form and schedule widgets your clients use to reserve a spot.<\/li>\n<li><strong>Appointments<\/strong> \u2014 bookable service slots with availability windows and optional deposits.<\/li>\n<li><strong>Waivers &amp; liability forms<\/strong> \u2014 collect a real signature as part of booking, then see your whole roster at a glance: who has signed the current version, who signed an older one, whose signature has expired, and who has never signed at all. Send reminders by hand, record a paper signature, or export the lot to CSV.<\/li>\n<li><strong>Passwordless sign-in<\/strong> \u2014 students can sign in with a link emailed to them instead of a password, so nobody is locked out of a booking by a password they never set. Optional, and you choose whether your site offers passwords, magic links, or both.<\/li>\n<li><strong>Waitlists<\/strong> \u2014 clients can join a waitlist when a class is full, and open spots are automatically offered to the next person in line.<\/li>\n<li><strong>Flexible schedules<\/strong> \u2014 a class can meet on multiple recurring schedule blocks (e.g. Mon\/Wed\/Fri at different times).<\/li>\n<li><strong>Bulk attendance marking<\/strong> \u2014 mark a whole roster present in one action.<\/li>\n<li><strong>Payments<\/strong> \u2014 accept cards through Stripe for drop-in bookings.<\/li>\n<li><strong>Client accounts<\/strong> \u2014 a self-service dashboard for bookings and profile.<\/li>\n<li><strong>Attendance<\/strong> \u2014 front-desk and instructor check-in.<\/li>\n<li><strong>Instructors &amp; locations<\/strong> \u2014 profiles, assignments, and per-location schedules.<\/li>\n<\/ul>\n\n<h4>Who it's for<\/h4>\n\n<ul>\n<li><strong>Yoga, pilates and fitness studios<\/strong> \u2014 recurring drop-in classes, capacity limits, waitlists, and a signed waiver on file before anyone steps on a mat.<\/li>\n<li><strong>Dance and martial arts schools<\/strong> \u2014 several weekly schedule blocks on one class, per-location rooms, and front-desk check-in.<\/li>\n<li><strong>Music teachers and schools<\/strong> \u2014 appointment-style lessons with availability windows and optional deposits, alongside recurring group classes.<\/li>\n<li><strong>Pottery, craft and maker studios<\/strong> \u2014 small capacities, multiple rooms, and a roster you can mark present in one action.<\/li>\n<li><strong>Wellness practitioners<\/strong> \u2014 one-to-one appointments shown in the visitor's own timezone, with a self-service client dashboard.<\/li>\n<li><strong>Breathwork, meditation and sound-healing facilitators<\/strong> \u2014 circles, workshops and sound baths with capacity limits, a waitlist when they fill, and a waiver signed before anyone arrives.<\/li>\n<li><strong>Coaches, mentors and private sessions<\/strong> \u2014 bookable one-to-one slots with availability windows and optional deposits, so clients pick a time without the back-and-forth.<\/li>\n<li><strong>Online facilitators<\/strong> \u2014 virtual classes and appointments, with the Zoom meeting created for you and the join link in every confirmation and reminder.<\/li>\n<li><strong>Community programs and co-ops<\/strong> \u2014 free and comp bookings with no payment gateway required, and waiver compliance across a whole roster.<\/li>\n<\/ul>\n\n<h4>Built for Elementor<\/h4>\n\n<p>The client-facing pages (booking form, class schedule, appointment booking, client dashboard) are Elementor widgets, so you design them visually alongside the rest of your site. <strong>The free Elementor plugin (3.5 or newer) is required<\/strong> to display these on your site. Elementor Pro is <em>optional<\/em> \u2014 it unlocks dynamic tags and one-click Theme Builder starter pages, but is not required for booking to work.<\/p>\n\n<h4>Part of the Gather Grove suite<\/h4>\n\n<p>Gather Grove Booking works entirely on its own. It is also one part of Gather Grove, a family of plugins for running and growing a creative business on your own WordPress site. The plugins share one admin, one list of people, and one look, so a studio can add what it needs as it grows:<\/p>\n\n<ul>\n<li><strong>Gather Grove Pulse<\/strong> \u2014 email broadcasts, automated sequences and a contact list that knows who booked, joined or enrolled.<\/li>\n<li><strong>Gather Grove Communities<\/strong> \u2014 private member spaces with rooms, an activity feed and direct messages.<\/li>\n<li><strong>Gather Grove Courses<\/strong> \u2014 self-paced and cohort-based online courses.<\/li>\n<li><strong>Gather Grove Forms<\/strong> \u2014 applications, intake forms and RSVPs that feed the rest of the suite.<\/li>\n<li><strong>Gather Grove Companion<\/strong> \u2014 an AI assistant for your admin, and a chat helper for your visitors.<\/li>\n<li><strong>Gather Grove Notion Sync<\/strong> \u2014 free; sends bookings and form entries to your Notion workspace.<\/li>\n<\/ul>\n\n<p>Together they serve creators, mentors, facilitators and anyone running a private community or an online program, as well as studios. Learn more at <a href=\"https:\/\/gathergrove.io\/\">gathergrove.io<\/a>.<\/p>\n\n<h4>Free and Professional<\/h4>\n\n<p>Everything listed above is free, and stays free. The free plugin has no locked features, never expires, and is not a trial.<\/p>\n\n<p><strong>Gather Grove Booking Professional<\/strong> is a separate plugin, available from gathergrove.io, for studios that sell more than drop-ins. It adds:<\/p>\n\n<ul>\n<li>Memberships and class packs<\/li>\n<li>Gift cards<\/li>\n<li>Family and household accounts<\/li>\n<li>Multi-instructor scheduling<\/li>\n<li>Enrollment-style courses<\/li>\n<li>Custom email branding<\/li>\n<li>Advanced reporting drill-downs<\/li>\n<\/ul>\n\n<p>Compare every feature, line by line, at <a href=\"https:\/\/gathergrove.io\/docs\/pricing\/\">gathergrove.io\/docs\/pricing<\/a>.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to the following third-party services.<\/p>\n\n<p><strong>Stripe<\/strong> \u2014 used to process card payments after you connect a Stripe account and a client pays for a booking or appointment. The booking and payment details required to create the charge (amount, currency, and related metadata) are sent to Stripe at payment time. Stripe.js is loaded from Stripe's servers on pages that display a payment form, as required for PCI compliance.\nTerms of service: https:\/\/stripe.com\/legal \u2014 Privacy policy: https:\/\/stripe.com\/privacy<\/p>\n\n<p><strong>Google Maps<\/strong> \u2014 used by the optional Location \"Map Embed\" and \"Directions Link\" Elementor dynamic tags. If you place the Map Embed tag on a page, the visitor's browser loads an embedded map from google.com for the location's address (Google receives the visitor's IP address and the studio address, as with any embedded map). The Directions Link tag only builds a link to google.com\/maps containing the studio address; nothing is sent unless the visitor clicks it. No data is sent from your server, and neither tag is active unless you add it to a page.\nTerms of service: https:\/\/policies.google.com\/terms \u2014 Privacy policy: https:\/\/policies.google.com\/privacy<\/p>\n\n<p><strong>Zoom<\/strong> \u2014 used to automatically create, update, and delete Zoom meetings for virtual class and appointment sessions, only after you connect your own Zoom Server-to-Server OAuth app under Settings \u2192 Integrations. When a virtual booking is confirmed (and on reschedule or cancellation), your server sends the session's topic, start time, duration, timezone, and the host's email address to api.zoom.us \/ zoom.us using your own credentials. Nothing is sent unless you enable the integration, and visitors' browsers never contact Zoom through this plugin.\nTerms of service: https:\/\/explore.zoom.us\/en\/terms\/ \u2014 Privacy policy: https:\/\/explore.zoom.us\/en\/privacy\/<\/p>\n\n<p><strong>Postmark<\/strong> \u2014 used to send your site's email through your own Postmark account, only after you connect one under Gather Grove \u2192 Settings \u2192 Email delivery. When connected, your server sends Postmark your key, your sending domain (to register it and check its DNS records), and each email it is asked to send: sender, recipients, subject, body and any attachments. If you also switch on \"Send all your site's email through Postmark\", every email your site sends goes this way. Postmark then posts delivery, bounce, open, click, spam-complaint and unsubscribe reports back to a secret address on your site. Nothing is sent unless you connect an account.\nTerms of service: https:\/\/postmarkapp.com\/terms-of-service \u2014 Privacy policy: https:\/\/postmarkapp.com\/privacy-policy<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the free <strong>Elementor<\/strong> plugin (Plugins \u2192 Add New \u2192 search \"Elementor\").<\/li>\n<li>Upload the <code>gather-grove-booking<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install the zip via Plugins \u2192 Add New \u2192 Upload Plugin.<\/li>\n<li>Activate <strong>Gather Grove Booking<\/strong> through the Plugins screen.<\/li>\n<li>Go to <strong>Gather Grove \u2192 Settings<\/strong> to configure your studio, then connect Stripe under the Payments tab.<\/li>\n<li>Use <strong>Gather Grove \u2192 Getting Started<\/strong> to create your booking and schedule pages.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20elementor%3F\"><h3>Do I need Elementor?<\/h3><\/dt>\n<dd><p>Yes \u2014 the free Elementor plugin (version 3.5 or newer) is required to display the booking form, schedule, and other client-facing pages. The admin and booking engine run without it, but your visitors need the Elementor widgets to book. If Elementor is older than 3.5 the widgets stay switched off and a notice asks you to update.<\/p><\/dd>\n<dt id=\"do%20i%20need%20the%20other%20gather%20grove%20plugins%3F\"><h3>Do I need the other Gather Grove plugins?<\/h3><\/dt>\n<dd><p>No. Booking is complete on its own. The other Gather Grove plugins are optional and add email, communities, courses, forms and more when you want them.<\/p><\/dd>\n<dt id=\"do%20i%20need%20elementor%20pro%3F\"><h3>Do I need Elementor Pro?<\/h3><\/dt>\n<dd><p>No. Elementor Pro is optional. It adds dynamic tags and automatic Theme Builder starter pages, but every booking feature works with the free Elementor plugin.<\/p><\/dd>\n<dt id=\"how%20are%20payments%20processed%3F\"><h3>How are payments processed?<\/h3><\/dt>\n<dd><p>Card payments are processed by Stripe. You connect your own Stripe account; Gather Grove never stores card numbers on your site.<\/p><\/dd>\n<dt id=\"does%20it%20work%20without%20a%20payment%20gateway%3F\"><h3>Does it work without a payment gateway?<\/h3><\/dt>\n<dd><p>Yes. You can run free classes, complimentary (comp) bookings, and offline\/invoice payments without connecting Stripe.<\/p><\/dd>\n<dt id=\"will%20my%20data%20be%20deleted%20if%20i%20uninstall%3F\"><h3>Will my data be deleted if I uninstall?<\/h3><\/dt>\n<dd><p>No. Uninstalling leaves your studio data intact by default so you can reinstall safely. You can opt in to full data deletion under Settings \u2192 General \u2192 Danger Zone.<\/p><\/dd>\n<dt id=\"does%20it%20change%20anything%20about%20my%20site%27s%20login%20or%20security%3F\"><h3>Does it change anything about my site's login or security?<\/h3><\/dt>\n<dd><p>Two small protections are on by default, shared by every Gather Grove plugin. Visitors who are not logged in can no longer read your site's list of account names (WordPress normally publishes it at \/wp-json\/wp\/v2\/users and through ?author= links). And after 10 failed logins from one address in 15 minutes, that address has to wait before trying again, on the WordPress login page and on Gather Grove's own sign-in form. Logged-in editors are not affected, and sites behind Cloudflare are recognised automatically. If you already use a security plugin, or need the public account list, return false from the <code>gather_grove\/security\/throttle_logins<\/code> or <code>gather_grove\/security\/hide_user_list<\/code> filter to turn either off.<\/p><\/dd>\n<dt id=\"can%20i%20style%20the%20widgets%20using%20my%20real%20classes%20in%20the%20elementor%20editor%3F\"><h3>Can I style the widgets using my real classes in the Elementor editor?<\/h3><\/dt>\n<dd><p>Yes. Gather Grove widgets show a styleable sample by default in the Elementor editor. To style against your actual content, open the widget's Content tab, find the \"Editor Preview\" section, and set \"Preview in editor\" to \"Real data\" (for the Class Card widget, also pick a specific class). The editor canvas then renders your real class so you can style it without switching to the live page. This is rolling out across the widgets \u2014 the Class Card and Sessions List widgets have it today, with more on the way. It only affects the editor; your published page always shows live data.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.204.0<\/h4>\n\n<ul>\n<li>Fixed: a guest buying a class pack with a booking, enrolling in a course, or buying an appointment bundle, who had to sign a waiver first, was told \"An account already exists for that email address. Please log in\" when the booking carried on after signing. The checkout now recognises the account it created a moment earlier and finishes. An account that already existed, or whose owner has since signed in, is still asked to log in.<\/li>\n<\/ul>\n\n<h4>1.203.0<\/h4>\n\n<ul>\n<li>New: a waiver built in Gather Grove Forms is now filled in right inside checkout, like any other waiver. The form appears in the booking, and the booking carries on as soon as it is submitted \u2014 for members, parents booking for their children, and guests. The \"Form page\" setting is now optional and only used for emailed and portal links. Needs Gather Grove Forms 1.33.0 or newer.<\/li>\n<li>New: guests who fill in a waiver form do not have to fill it in again for 24 hours on the same browser, as long as they book with the same email.<\/li>\n<li>New: if a waiver's form cannot be shown (Forms switched off or too old, the form archived, or the form takes a payment), bookings that need it are refused with a clear message, and a notice in your dashboard names the waiver and the form. The waiver's settings warn about forms that take a payment or redirect.<\/li>\n<li>Security: a guest checkout is no longer given a permanent signing link for the account behind the email they typed.<\/li>\n<li>Security: a waiver that uses a form can only be signed by completing that form \u2014 never by an \"I agree\" tick, including on appointments, the sign-ahead page and emailed signing pages.<\/li>\n<\/ul>\n\n<h4>1.202.0<\/h4>\n\n<ul>\n<li>New: close the studio from Sessions \u2192 Closures. Pick the day (or the hours), whether it is the whole studio or only some locations, rooms, classes or instructors, and see every class it would cancel \u2014 with the bookings, people and money involved \u2014 before anything happens. Untick anything that should still run.<\/li>\n<li>New: \"Snow day: close today\" and \"Close tomorrow\" buttons on the Sessions screen set up an all-day closure for the whole studio and take you straight to that preview.<\/li>\n<li>New: when you confirm, every class in the closure is cancelled and everyone gets their money back the way they paid: cards are refunded (or, if you choose, turned into studio credit), class-pack sessions, session credits and studio credit come back, and unpaid invoices are cancelled. Course dates are simply dropped; the course carries on. Memberships are not changed.<\/li>\n<li>New: each client gets one email listing every booking the closure cancelled and what happened to it. A parent who booked for their children gets one email listing each child's seat. Waitlisted clients and instructors get their own single email, and managers get a summary. Clients and instructors are reminded the day before, unless the closure was announced at short notice.<\/li>\n<li>New: a \"Studio closed\" notice on the client account page and the instructor dashboard during the week before and during a closure.<\/li>\n<li>New: only Studio Directors, Gather Grove Admins and site administrators can close the studio. Managers can see the list of closures.<\/li>\n<\/ul>\n\n<h4>1.201.0<\/h4>\n\n<ul>\n<li>Fixed: a class you cancelled could come back. The nightly schedule builder re-created a cancelled date as a normal class when it was the last one it had made, and could re-create a one-off workshop date that had already passed. Cancelled dates now stay cancelled and past dates are never created.<\/li>\n<li>Fixed: the reason you type when cancelling a class now reaches your clients' email.<\/li>\n<li>Fixed: the \"class cancelled\" email is now sent after refunds run, and tells each client what happened to their payment: refunded to their card, returned as studio credit, their pack session returned, their invoice cancelled, or that there was nothing to return.<\/li>\n<li>Fixed: cancelling bookings in bulk from the Bookings list now works exactly like the Cancel button on one booking: class-pack sessions, session credits, studio credit, invoices and card payments come back, and the client reads \"Cancelled by the studio\" instead of \"bulk_cancel\".<\/li>\n<li>New: instructors are emailed when a class they teach is cancelled: the lead instructor, the substitute covering it and any co-instructors. Cancelling several dates at once sends each instructor one email listing them all. The instructor who cancels their own class is not emailed about it.<\/li>\n<li>New: when a class is cancelled, its waitlist is closed and everyone on it gets one email saying so. An open \"find a sub\" request on the class is withdrawn.<\/li>\n<li>Fixed: cancelling \"this and following\" or a whole series no longer wipes the session's staff notes. The reason is kept separately.<\/li>\n<li>Changed: removing a class (moving it to the trash) and cancelling from the instructor dashboard now refund and notify the same way. Both new emails can be edited under Settings \u2192 Email \u2192 Templates.<\/li>\n<\/ul>\n\n<h4>1.200.0<\/h4>\n\n<ul>\n<li>Fixed: searching the schedule or calendar for a category now also finds classes filed under its subcategories. A search for \"Yoga\" finds a class that is only in Yoga \u203a Vinyasa; a search for \"Vinyasa\" still does not bring up every Yoga class.<\/li>\n<\/ul>\n\n<h4>1.199.0<\/h4>\n\n<ul>\n<li>New: a promo code can now apply to several purchase types at once. Under Promo Codes \u2192 Applies To, tick any of Drop-in classes, Class packs, Memberships and Appointments, or tick Everything. Existing codes keep working exactly as before.<\/li>\n<li>New: the category limit on a promo code is now labelled \"Only for these categories (optional)\" and combines with the purchase types: \"Class packs\" + Ceramics means Ceramics class packs only.<\/li>\n<li>Changed: a promo code limited to some categories now also checks class packs and memberships. A pack or membership qualifies only when every class it can be used for is in those categories, so a Ceramics code no longer discounts a studio-wide pack. A category includes its subcategories: a Ceramics code covers Wheel Throwing classes. Before, the category limit was not checked on pack and membership purchases at all.<\/li>\n<li>Changed: the Promo Codes list shows each code's purchase types and category limit, for example \"Drop-in + Class packs \u00b7 Ceramics\".<\/li>\n<\/ul>\n\n<h4>1.198.0<\/h4>\n\n<ul>\n<li>New: a Studio Director role for your front-desk lead. A Studio Director can do everything a Gather Grove Manager can, and can also add and edit classes, appointments, packages, instructors, locations, rooms and waivers. They still cannot change Settings or manage the WordPress site. Give someone the role under Users (add it alongside their existing roles).<\/li>\n<li>Fixed: Gather Grove Managers no longer see Classes, Packages, Instructors, Locations, Rooms, Appointments and Waivers links that only led to \"Sorry, you are not allowed to access this page.\" Those screens are for Studio Directors, Gather Grove Admins and site administrators.<\/li>\n<li>Changed: the Gather Grove Booking menu is reordered: daily work first, then your catalog, then Waivers with Waiver Compliance right after it, then sales, Reports and Settings.<\/li>\n<li>Changed: editing classes and the rest of the catalog now needs the Gather Grove catalog permission instead of WordPress's general \"edit posts\" permission. Site administrators keep full access. If an Editor or Author on your site used to edit classes, give them the Studio Director role.<\/li>\n<\/ul>\n\n<h4>1.197.0<\/h4>\n\n<ul>\n<li>Fixed: a client who owns two or more packs of the same package now sees the total left across all of them on the booking form (\"5 sessions remaining across 2 packs\"), not just one pack's count. Before, someone with an old pack (1 left) and a new pack (3 left) was shown \"1 left\" and could not book a group of 3.<\/li>\n<li>Fixed: a group booking can now use seats from more than one pack of the same package. Bookings always use the pack that expires first, then the oldest one.<\/li>\n<li>Fixed: when a booking that used several packs is cancelled, each seat goes back to the pack it came from.<\/li>\n<li>Changed: My Account shows packs of the same package on one card, with the total on top and each pack (bought date, seats left, expiry) listed underneath.<\/li>\n<li>Fixed: the \"sessions remaining\" shown by the Package: Sessions Remaining widget tag, on the appointment booking form and in the \"your pack expires soon\" email now counts all of a client's packs of that package. The \"you finished your package\" email is no longer sent while the client still has another pack of the same package with sessions left.<\/li>\n<li>New: in Clients \u2192 a client \u2192 Packages, click a pack's name to see its history: every booking that used it (class, date, who came, how many seats, whether they were returned), plus staff adjustments, with the balance after each line.<\/li>\n<\/ul>\n\n<h4>1.196.0<\/h4>\n\n<ul>\n<li>New: your site's list of account names is hidden from visitors who are not logged in. WordPress normally publishes it, which hands password-guessers half of what they need. Logged-in editors are not affected.<\/li>\n<li>New: after 10 failed logins from one address in 15 minutes, that address has to wait before trying again, on the WordPress login page and on the sign-in form. Someone who mistypes is never locked out for longer than 15 minutes. Both protections can be turned off (see the FAQ).<\/li>\n<li>Fixed: a member caught by that limit is now told \"Too many login attempts. Please wait a few minutes and try again.\" instead of being told their password is wrong.<\/li>\n<li>Fixed: on sites behind Cloudflare, sign-in, sign-up and promo-code limits now count each visitor separately. Before, every visitor shared one count, so one person's failed attempts could block everyone.<\/li>\n<li>Changed: bundled Gather Grove Core updated to 0.65.0.<\/li>\n<\/ul>\n\n<h4>1.195.0<\/h4>\n\n<ul>\n<li>Fixed: opening a client's page under Clients no longer shows a critical error.<\/li>\n<li>Fixed: the client dashboard no longer shows an error for a member whose membership or pack was set up before the site changed plans; their details show read-only.<\/li>\n<li>Fixed: a booking request that can't go ahead is now refused before any account is created for the visitor.<\/li>\n<li>Fixed: the class calendar no longer errors on a course left over from an earlier setup.<\/li>\n<li>Changed: all your Gather Grove menus now sit together in the WordPress admin sidebar. On a site with other plugins (WooCommerce, Elementor, an SEO plugin) they used to be scattered between them. A menu-editor plugin can still rearrange them.<\/li>\n<li>Changed: now requires WordPress 6.9 or later. The bundled Action Scheduler, which runs background tasks such as reminders and is shared across Gather Grove plugins, is updated to its current release, 4.2.0, and that release needs 6.9.<\/li>\n<li>Changed: bundled Gather Grove Core updated to 0.64.6.<\/li>\n<\/ul>\n\n<h4>1.194.1<\/h4>\n\n<ul>\n<li>Email delivery now shows when Postmark last reported back on each stream (\"Last report: Delivered, 3 mins ago\"), and puts a count on the Gather Grove menu if your site sent email more than 30 minutes ago and no report has come back.<\/li>\n<\/ul>\n\n<h4>1.194.0<\/h4>\n\n<ul>\n<li>New: Gather Grove \u2192 Settings \u2192 Email delivery. Connect your own Postmark account once and your site's email \u2014 booking confirmations, reminders, receipts and password resets \u2014 can go through it instead of your web server, with delivery and bounce reports, a test email, and DNS records that show whether each one is live. Nothing changes until you connect an account and switch it on.<\/li>\n<li>If another email plugin (FluentSMTP, WP Mail SMTP, Post SMTP or Easy WP SMTP) sends your site's mail today, the screen says so and leaves it in charge until you choose to switch.<\/li>\n<\/ul>\n\n<h4>1.193.0<\/h4>\n\n<ul>\n<li>Your studio's brand \u2014 name, logo, palette, colors and fonts \u2014 now lives in Gather Grove \u2192 Settings \u2192 Brand, shared by every Gather Grove plugin, so a studio can set it even without Booking. Nothing to re-enter: your saved brand carries over as it is.<\/li>\n<li>Booking \u2192 Settings \u2192 Brand keeps the Reports chart color and links to the new Brand screen.<\/li>\n<\/ul>\n\n<h4>1.192.0<\/h4>\n\n<ul>\n<li>A clear notice, with an update link, when Elementor is older than 3.5 (the booking widgets need 3.5 or newer).<\/li>\n<li>Tells Elementor the plugin is tested up to Elementor 4.3.2 \/ Elementor Pro 4.3.0 (the Plugins-screen compatibility tag).<\/li>\n<\/ul>\n\n<h4>1.191.1<\/h4>\n\n<ul>\n<li>Fixed: Book buttons now work even when no booking page is set. Studios that never ran the Starter Page importer had disabled Book buttons and none in the calendar popover; the booking window now opens from any Book button.<\/li>\n<li>Fixed: \"Adopt my site brand\" and the Brand tab's Elementor Variables work again on Elementor 4.3.<\/li>\n<li>Fixed: Pink button outlines and hovers on the Hello Elementor theme (account and instructor tabs, Memberships buttons, notification dismiss, quantity buttons).<\/li>\n<li>Verified on Elementor 4.3.2, Elementor Pro 4.3.0, Hello Elementor 3.5.1 and WordPress 7.1.2.<\/li>\n<\/ul>\n\n<h4>1.191.0<\/h4>\n\n<ul>\n<li>New: Duration Display (Settings \u2192 General). Class and appointment lengths now read \"45 min\", \"1 hr 30 min\" or \"7 hr\" everywhere \u2014 or pick \"Minutes only\" to keep \"420 min\". Existing sites switch to hours and minutes on update.<\/li>\n<li>Fixed: the calendar pop-up could open underneath a sticky site header. It now always opens where you can see it.<\/li>\n<\/ul>\n\n<h4>1.190.2<\/h4>\n\n<ul>\n<li>Dark-themed sites: status badges like \"8 spots left\" and \"Paid\" are now easy to read, with colours that follow your own theme. Light sites are unchanged.<\/li>\n<\/ul>\n\n<h4>1.190.1<\/h4>\n\n<ul>\n<li>Fixed: with \"Release Venmo \/ Zelle \/ Other seats that are still unpaid\" turned on, a booking made shortly before the class could be cancelled minutes after it was made. Only bookings made before the cut-off are released now; anyone who books after it keeps their seat.<\/li>\n<li>Fixed: booking a pay-what-you-want class for $0 with Venmo, Zelle or another way to pay selected no longer shows an error. It is booked as free.<\/li>\n<li>Changed: in Reports, the money-still-owed line reads \"Still to collect (at the door \/ other ways)\" once you take other ways to pay.<\/li>\n<\/ul>\n\n<h4>1.190.0<\/h4>\n\n<ul>\n<li>Added: other ways to pay. Under Settings \u2192 Payments \u2192 Other ways to pay, turn on Venmo, Zelle, or a method you name yourself (such as Cash App). People booking a paid drop-in class can choose it instead of a card, even when Stripe is connected; their spot is held and marked as owed.<\/li>\n<li>Added: right after booking, people see how to pay \u2014 a Venmo button on a phone, a QR code to scan on a computer, or your Zelle details with copy buttons \u2014 and the same instructions in their confirmation email.<\/li>\n<li>Added: mark owed bookings paid by Venmo, Zelle or your Other method, as well as cash or check. Reports shows the money collected off-platform by method.<\/li>\n<li>Added: an optional \"Pay in person\" choice, offered beside the card even when Stripe is connected. People see \"You're booked \u2014 $X due when you arrive\", and you mark it paid in cash or by check.<\/li>\n<li>Added: an optional setting to release Venmo, Zelle and Other seats still unpaid a set number of hours before the class (24 hours unless you change it).<\/li>\n<\/ul>\n\n<h4>1.189.1<\/h4>\n\n<ul>\n<li>Fixed: the monthly instructor report's attendance figure. Booked, attended and no-shows now all count people (a group booking of 6 is 6), and only classes that have already been held are included, so the attended percentage is accurate.<\/li>\n<li>Added: a no-show count in the monthly instructor report (screen, email, CSV and WP-CLI), and a \"Seats held\" column in the CSV for reference.<\/li>\n<li>Changed: \"checked in\" is now \"attended\" throughout the monthly report, with a note that attendance is recorded automatically after each class and instructors or staff can mark no-shows. Classes still to come this month show their bookings separately.<\/li>\n<\/ul>\n\n<h4>1.189.0<\/h4>\n\n<ul>\n<li>Added: Reports \u2192 Monthly hours. For each instructor it shows classes taught, total hours, the days they worked, a breakdown by class, who subbed for whom, and attendance, for any month. It has a per-instructor drill-down and a CSV download.<\/li>\n<li>Added: the monthly instructor report is emailed to administrators and managers on the 1st of each month, with the CSV attached. You can turn it on or off and add recipients under Settings \u2192 Notifications. It is on by default.<\/li>\n<li>Added: \"Send this report to me now\" on the Monthly hours screen, and the WP-CLI command <code>wp gather-grove report monthly<\/code>.<\/li>\n<li>Fixed: sub-request emails now also go to users with the Gather Grove Admin role.<\/li>\n<\/ul>\n\n<h4>1.188.0<\/h4>\n\n<ul>\n<li>Added: sign a waiver ahead of time, with no booking. Put the [gather_grove_waiver] shortcode on a page (optionally id=\"123\") and share it. Signed-in people see \"You're all set, signed (date), valid until (date)\" and can sign for household members they manage; visitors enter their name and email and sign. A signature made there counts at checkout later.<\/li>\n<li>Added: automatic waiver reminders. Once a day, anyone with a confirmed booking in the next 7 days who still owes a waiver (booked by staff, a walk-in, a gifted seat, or after you revised the waiver) is emailed a signing link. At most two per waiver version, three days apart. On by default; turn it off or change the look-ahead under Settings \u2192 General \u2192 Waivers. The Waivers screen shows who was reminded and flags people with no email.<\/li>\n<li>Added: the instructor dashboard roster and the pre-class roster email mark anyone who owes a waiver, with a reminder to collect a signature at the door.<\/li>\n<li>Fixed: signing a waiver by any route now clears the \"Waiver pending\" note from that person's upcoming bookings.<\/li>\n<li>Fixed: a signed-in person with no client record yet can sign from My Account and the booking form instead of getting an error.<\/li>\n<li>Fixed: leaving a waiver's Version box blank no longer creates a new version that makes everyone re-sign. Editing the text without changing the version now shows a reminder.<\/li>\n<li>Fixed: \"Guests can book, and are asked when they arrive\" now applies to courses and class packs as well as drop-ins.<\/li>\n<li>Fixed: a guest who got a waiver reminder link can sign from it without being asked to log in to an account they never set up.<\/li>\n<li>Fixed: a form-based waiver on a drop-in booking now opens its form from the booking form.<\/li>\n<\/ul>\n\n<h4>1.187.0<\/h4>\n\n<ul>\n<li>Fixed: \"Book + Send Invoice\" on a course-priced class no longer saves the booking as Free. It is recorded as unpaid with the invoice amount due, and paying the invoice marks it paid.<\/li>\n<li>Fixed: the Book Client amount field is labelled for the payment you pick (Amount Due, Amount to Debit, Amount Collected or Amount Paid), and the success message says whether the invoice email went out.<\/li>\n<li>Fixed: an unpaid booking's detail screen shows the Amount Due instead of \"Amount Paid $0.00\", and a course session's invoice line reads \"Course session\", not \"Drop-in\".<\/li>\n<li>Fixed: booking studio credit on a course-priced class now debits the amount you enter instead of booking it free.<\/li>\n<li>Added: \"Book + Send Invoice for the whole course\" in Book Client. It enrolls the client in every upcoming session now and emails one invoice; paying it settles the whole enrollment and sends the enrollment email and receipt.<\/li>\n<\/ul>\n\n<h4>1.186.0<\/h4>\n\n<ul>\n<li>Added: online reminder emails now include a \"Trouble with the link?\" line with the Zoom Meeting ID and passcode, for devices that open the link and still ask for a passcode.<\/li>\n<\/ul>\n\n<h4>1.185.0<\/h4>\n\n<ul>\n<li>Changed: with no Stripe connected, a booking on a priced class or appointment is now recorded as unpaid and due at the door, not as free. Mark it \"Paid in cash\" or \"Paid by check\" on the booking or the attendance roster. The unused \"Require Payment at Booking\" setting is removed.<\/li>\n<li>Fixed: private appointments are no longer offered at times the instructor is teaching or the room is in use, and Buffer Time is now enforced.<\/li>\n<li>Fixed: raising a class's capacity offers the new seats to the waitlist.<\/li>\n<li>Fixed: when a substitute claims a class through Find a Sub, booked clients are told.<\/li>\n<li>Fixed: Mark Complete no longer turns no-shows into \"attended\".<\/li>\n<li>Fixed: \"Add to Google Calendar\" links for online classes include the join link.<\/li>\n<li>Fixed: bookings paid with studio credit can be refunded from the booking.<\/li>\n<\/ul>\n\n<h4>1.184.0<\/h4>\n\n<ul>\n<li>New: a cancelled booking now gets its card payment back automatically. When the studio cancels a class, the card is refunded. When a client cancels before the cancellation window, the payment comes back as studio credit (default) or to the card \u2014 your choice in Settings \u2192 Bookings.<\/li>\n<li>New: the cancellation window is enforced. Cancelling inside it is a late cancel (nothing refunded), and My Account says so before the client confirms.<\/li>\n<li>Improved: the cancellation email and confirmation emails now say exactly what happens to the payment.<\/li>\n<li>Fixed: a Find a Sub claim now emails the booked clients, and Mark Complete keeps No-Show and Excused marks already on the roster.<\/li>\n<li>Fixed: raising a class's capacity offers the new seats to the waitlist, and Google calendar links include the online join link.<\/li>\n<\/ul>\n\n<h4>1.183.0<\/h4>\n\n<ul>\n<li>Fixed: cancelling a class in good time now returns the studio credit it was paid with (including the credit part of a credit + card booking), just like pack sessions. A late cancel still forfeits it.<\/li>\n<li>Fixed: when the studio cancels a session, every booking on it is now cancelled and gets back its pack session, session credit or studio credit. Before, bookings stayed \"confirmed\" on the cancelled class and nothing was returned.<\/li>\n<li>Fixed: an admin refund can no longer return the same credit twice.<\/li>\n<\/ul>\n\n<p>Older releases are listed in changelog.txt, included with the plugin and viewable at https:\/\/plugins.svn.wordpress.org\/gather-grove-booking\/trunk\/changelog.txt<\/p>","raw_excerpt":"For yoga studios, teachers, and community programs \u2014 class booking, waivers, appointments, waitlists, and Stripe payments. Built for Elementor.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/pirate.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/319887","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pirate.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/pirate.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/pirate.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=319887"}],"author":[{"embeddable":true,"href":"https:\/\/pirate.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/gturtle108"}],"wp:attachment":[{"href":"https:\/\/pirate.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=319887"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/pirate.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=319887"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/pirate.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=319887"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/pirate.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=319887"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/pirate.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=319887"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/pirate.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=319887"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}