Skip to main content

Embedding Multiple Shows & "Buy Tickets" Buttons on One Page with your Widget

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:

  • list

  • calendar

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.

Did this answer your question?