Description
Class Bookings with Stripe helps studios, instructors, and venues sell places on scheduled classes using Stripe Checkout (Stripe’s hosted payment page). Customers pick a date, choose seats, and pay securely without WooCommerce or a custom cart.
The plugin uses Advanced Custom Fields (ACF). Each bookable class has schedule, price, capacity, and optional extras. Embed the form with a shortcode or Elementor widget. When a customer clicks Book & pay with Stripe, the plugin creates a soft-hold, opens a Stripe Checkout Session, and redirects to Stripe. A signed webhook marks the booking paid and can send customer and admin emails.
Video tutorials — get started
New to the plugin? Watch these first:
Features
- Classes — Weekly recurring classes, one-off events, or external booking links.
- Capacity — Per class and date; counts paid bookings and active soft-holds.
- Cancelled dates — Block individual dates without disabling the class.
- Bookings — Pending, paid, and expired statuses with Stripe session references.
- Reports — Yearly charts, upcoming attendance, and guest lists.
- Form extras — Waiver, Mailchimp opt-in, and custom ACF fields.
- Emails — Customer and admin templates with merge tags via
wp_mail(). - Result pages — Booking Confirmed, Cancelled, and Error pages on activation.
Stripe Checkout
The plugin uses the bundled stripe-php SDK. It does not embed card fields on your site. Checkout Sessions use inline price_data (GBP), session metadata, and a 30-minute soft-hold aligned with session expiry. Configure webhooks for checkout.session.completed, checkout.session.expired, and checkout.session.async_payment_failed.
Shortcodes
[clasbowi_booking class_id="123"][clasbowi_booking_status type="success"](orcancelled,error)- Legacy aliases:
[stripe_booking],[yoga_booking],[stripe_booking_status],[yoga_booking_status]
Requirements
- WordPress 6.0+
- Stripe account (keys and webhook signing secret)
- ACF Free or Pro (bundled ACF Free loads if ACF is not active)
- Elementor (optional, for the Elementor widget)
Video tutorials — full series
Step-by-step guides on YouTube (IORoot):
- Quick start: install, API keys & first booking
- Full installation & setup guide
- Stripe webhook setup
- Result pages, Developer & Help tabs
- Creating a weekly repeating class
- One-off events & workshops
- Extra fields & ACF on the booking form
- Email setup
- Bookings list & reports
External services
This plugin connects to third-party services to process payments and, optionally, add customers to a mailing list. You must configure your own accounts and API keys for these services in Class Bookings with Stripe Settings.
Stripe
This plugin uses Stripe Checkout to collect payments. Stripe hosts the payment page; card details are entered on Stripe’s site, not in WordPress.
When data is sent
- When a customer submits the booking form, your WordPress site calls the Stripe API to create a Checkout Session, then redirects the browser to Stripe’s hosted checkout page.
- When payment completes, fails, or the session expires, Stripe sends signed webhook events to your site (
/wp-json/clasbowi/v1/stripe-webhook). - If webhooks are delayed, the plugin may call the Stripe API again to retrieve the Checkout Session status when the customer returns to your success page.
What data is sent
- To Stripe’s API (server-side): your Stripe secret key (authentication), customer name and email, class and booking details (class name, date, time, location, seats, booking ID), line-item title and price (GBP), and success/cancel return URLs.
- On Stripe Checkout (customer-facing): payment and billing details the customer enters on Stripe’s hosted page.
- From Stripe to your site (webhooks): event payloads about the Checkout Session and payment status (no card numbers are stored in WordPress).
This service is provided by Stripe, Inc.: Terms of Service, Privacy Policy.
Mailchimp
If enabled in plugin settings, this plugin can subscribe customers to a Mailchimp audience when they opt in on the booking form.
When data is sent
- After a booking is marked paid (via Stripe webhook), and only when all of the following are true: Mailchimp opt-in is enabled in settings, you have saved a Mailchimp API key and Audience ID, the customer checked the opt-in box on the form, and the booking has not already been synced.
What data is sent
- To the Mailchimp Marketing API: the customer’s email address, first name, last name (parsed from the booking name), and subscription status (
pendingif double opt-in is enabled, otherwisesubscribed). Your Mailchimp API key is sent in the request for authentication.
This service is provided by Intuit Mailchimp: Terms of Use, Privacy Policy.
Installation
- Upload the plugin to
/wp-content/plugins/or install via Plugins Add New. - Activate Class Bookings with Stripe.
- Open Class Bookings with Stripe Settings in the admin menu.
- Enter Stripe publishable and secret keys (test or live).
- In Stripe Dashboard Developers Webhooks, add an endpoint:
https://yoursite.com/wp-json/clasbowi/v1/stripe-webhookwith eventscheckout.session.completed,checkout.session.expired, andcheckout.session.async_payment_failed. - Paste the webhook signing secret into plugin settings.
- Add classes under Class Bookings with Stripe Classes.
- Place
[clasbowi_booking class_id="123"]on a page or add the Class Booking with Stripe Elementor widget.
FAQ
-
Does this plugin store credit card numbers?
-
No. Card data is handled on Stripe Checkout. WordPress stores booking metadata only.
-
Do I need WooCommerce?
-
No.
-
Do I need ACF Pro?
-
No. ACF Free or Pro works; bundled ACF Free loads if ACF is not already active.
-
Do I need Stripe Products?
-
No. Checkout uses inline
price_datafrom each class price. -
Which webhook events are required?
-
checkout.session.completed,
checkout.session.expired, andcheckout.session.async_payment_failed. -
How long is a seat held?
-
30 minutes, matching the Checkout Session expiry. Stale holds are cleared by webhook and cron.
-
Which currency is supported?
-
GBP (pence) by default.
-
Does it work with Elementor?
-
Yes. Use the Class Booking with Stripe widget or the shortcode.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“Class Bookings with Stripe” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “Class Bookings with Stripe” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
1.0.0
- Initial public release.
- Class and booking custom post types with ACF-driven fields.
- Stripe Checkout Sessions via bundled stripe-php SDK.
- REST checkout, signed webhooks, status polling, and availability API.
- Soft-holds, capacity limits, and cron expiry.
- Shortcodes, Elementor widget, result pages, and email templates.
- Reports, waiver, Mailchimp opt-in, and custom form fields.
- Bundled ACF Free when ACF is not active.
