If you'd like to display multiple productions on a single webpage, you can! The recommended setup is to use one ticket widget with multiple "Buy Tickets" buttons; one button for each show.
This approach is fully supported, easy to maintain, and works well across website platforms.
How It Works
A page can only contain one On The Stage ticket widget, but that widget can power unlimited Buy Tickets buttons.
Your page might look something like this:
Show A â Buy Tickets
Show B â Buy Tickets
Show C â Buy Tickets
Each button opens the correct show, while a single hidden widget handles the shopping cart and checkout experience.
Best Practice: Add the widget once, then add as many show-specific buttons as you'd like.
Setup Overview
Step 1: Add one ticket widget
Add a single ticket widget to the page. The widget can remain hidden until a patron clicks a button.
Step 2: Add a Buy Tickets button for each show
Each button is connected to a specific production and can be placed anywhere on the page:
Show cards
Event listings
Tables
Grids
Custom layouts
Each button opens the appropriate ticket popup while sharing the same checkout cart.
Choose What Your Button Opens
Your Buy Tickets button can launch one of two experiences.
Option 1: Show all performance dates
The patron first selects a performance date before purchasing tickets.
Use one of these widget styles:
listcalendar
This is ideal when a production has multiple performances.
Option 2: Open a specific performance
The patron skips the date selection and goes directly to ticket purchasing for one performance.
Use:
single_performance
This is useful for featured performances or promotional buttons.
Important Limitation: â ď¸
Only one ticket widget may exist per page.
Multiple buttons are fully supported.
Multiple widgets are not.
If more than one widget is embedded, you'll receive the following error:
Only one OTS Widget definition may be made per page.
This occurs because the widget maintains a single shopping cart and checkout session.
Frequently Asked Questions
Can I have multiple Buy Tickets buttons on one page?
Yes. There is no limit to the number of buttons you can add.
Can one widget power multiple buttons?
Yes. This is the recommended implementation.
Does "one widget per page" mean one button?
No.
It means:
â One widget
â Unlimited Buy Tickets buttons
Does this work with every widget style?
Yes. The limitation applies only to the number of widgets, not whether you're using:
List
Calendar
Single Performance
Does the popup (modal) widget work differently?
No. The modal widget is actually what makes this setup possible.
I saw another theatre doing this differently.
Some organizations use heavily customized websites built by third-party developers.
While those implementations may look different, the supported and recommended approach is still:
One widget
One button per show
This provides the same user experience without requiring custom development.
Squarespace Users
Known Issue
Some Squarespace sites experience an issue where the ticket popup opens, but the page content continues to appear behind or through the popup.
This happens because Squarespace's animated page sections can trap the widget inside a section instead of allowing it to display across the full page.
Recommended Fix
Instead of embedding the widget inside a page section:
Place the widget in Page Header Code Injection
Load it only on the page that needs it
Append it to the top level of the page
Your Buy Tickets buttons should remain in their normal page layout.
This allows the popup to:
Cover the full screen
Avoid conflicts with Squarespace animations
Prevent widget conflicts on other pages
Common Squarespace Error
If you receive:
Only one OTS Widget definition may be made per page
Check for duplicate widget embeds.
Common causes include:
Widget embedded in multiple sections
Duplicate copies left behind
Widget added to both Page Injection and Site-wide Footer Injection
Only one widget embed should exist on the page.
Developer Reference
The following examples can be shared directly with a customer's web developer.
Open the show's dates (List or Calendar)
<onthestage-widget organization-id="ORG_ID" modal="true" widget-style="list" production-id="SHOW_ID"> </onthestage-widget> <button data-onthestage-production-id="SHOW_ID"> Buy Tickets </button>
Swap widget-style="list" for calendar to display a calendar instead.
Open a specific performance
<onthestage-widget organization-id="ORG_ID" modal="true" widget-style="single_performance" production-id="SHOW_ID" event-id="PERFORMANCE_ID"> </onthestage-widget> <button data-onthestage-production-id="SHOW_ID" data-onthestage-event-id="PERFORMANCE_ID"> Buy Tickets </button>
Squarespace Code Injection
Place the widget in:
Page Settings â Advanced â Page Header Code Injection
Then:
Remove any widget embedded inside page sections.
Remove any widget from Site-wide Footer Injection.
Keep your Buy Tickets buttons where they already exist on the page.
This ensures:
The popup displays correctly
Only one widget loads
Other pages aren't affected
Optional: Hide Buttons While Popup Is Open
An upcoming widget release will automatically hide Buy Tickets buttons while the ticket modal is open.
Until then, developers can use the optional hook included in the original implementation guide to temporarily hide the buttons while the popup is active.
Need Help?
If you're unsure how to implement this on your website, or you're working with a web developer, our Customer Success Team is happy to help point you in the right direction.
If you're experiencing issues, please include:
Your website URL
The page where the widget is embedded
A description of the issue
Any screenshots or error messages
This helps us troubleshoot more quickly and get your page working as expected.

