Stachethemes Seat Planner

Installation

↑ Back to top

To start using a product from WooCommerce.com, you can use the โ€œAdd to storeโ€ functionality on the order confirmation page or the My subscriptions section in your account.

  1. Navigate to My subscriptions.
  2. Find the Add to store button next to the product youโ€™re planning to install.
  3. Follow the instructions on the screen, and the product will be automatically added to your store.

Alternative options and more information at:
Managing WooCommerce.com subscriptions.

Adding a WooCommerce.com subscription to your store

Requirements

↑ Back to top

Before installing, confirm your site meets these requirements:

  • WordPress 6.7 and above
  • PHP 8.2 and above
  • WooCommerce 9.5 or newer installed and activated

Recommended

↑ Back to top
  • WordPress 7
  • WooCommerce 10.7 or newer
  • PHP 8.2 or newer

More information: WooCommerce.com subscriptions.

Overview

↑ Back to top

The Overview page is the default landing when you open Seat Planner in the admin. It gives a quick summary of your venue bookings and links to the main sections of the plugin.

Where to Find It

↑ Back to top

In the WordPress admin sidebar, click Seat Planner. The first view is the Overview. You can also go to Seat Planner โ†’ Overview.

Stats

↑ Back to top

The page shows three summary cards:

  • Products – Total number of published Auditorium (Seat Planner) products.
  • Seats – Total number of seats sold across all products (all time).
  • Revenue – Total revenue from those seat sales, formatted in your store currency.

Stats are loaded from the server when the page opens. If data is still loading, the cards show a loading state.

Quick Actions

↑ Back to top

Shortcuts to the main Seat Planner areas:

  • Ticket Scanner – Open the QR code scanner to verify and check-in guests at your venue.
  • Manager – View and manage product availability (products list, dates, availability grid, statistics).
  • Settings – Configure reservation time, cart behavior, PDF/QR, reports, colors, and mobile app access.
  • Toolsย – Run booking integrity checks (including orphan taken seats), preview PDF tickets, verify order QR codes, and edit order items.

Clicking a card navigates to the corresponding section (Scanner, Manager, Settings, or Tools).

Help & Version

↑ Back to top

The page may include a help section and the current plugin version at the bottom.

Summary

↑ Back to top
  • Overview is the default Seat Planner dashboard: stats (products, seats sold, revenue) and quick links to Scanner, Manager, Settings, and Tools.

Creating an Auditorium Product

↑ Back to top

Once Seat Planner is installed, WooCommerce adds the Auditorium Product type for selling seats from a visual plan.

Steps

↑ Back to top
  1. Go to Products โ†’ Add New. Enter TitleDescription, and a Product image.
  2. In Product data, choose Auditorium Product from the product type dropdown.
  3. Open the Seat Planner tab and click Open Seat Planner.
  4. Place a Screen, drag Seat objects onto the canvas, and set each seatโ€™s Label, unique Seat ID, and Price. Use Auto Increment to number many seats quickly.
  5. Click the back arrow to return to the product page and Publish.

For seat statuses, groups, desirability, CSV import/export, and transform tools, see Seat Planner Editor.

Next steps

↑ Back to top
  • Adding Dates – Multiple show times or events.
  • Adding Discounts – Student, senior, or group pricing.
  • Custom Fields – Extra questions or paid add-ons per seat.
  • Settings – Reservation time, QR/PDF tickets, cart behavior.

Auditorium products are virtual and sold individually; availability is tracked per seat (and per date when dates are configured).

Seat Planner Editor

↑ Back to top

After you create an auditorium product, open Seat Planner โ†’ Open Seat Planner for the full visual editor. This section covers multiple layouts, advanced layout tools, seat statuses, and import/export.

Multiple seating layouts

↑ Back to top

A single auditorium product can include up to 5 seating layouts (for example Stalls, Balcony, and VIP). Use this when one event sells different sections from one product instead of creating separate products.

  • Workflow tabs – At the top of the editor, switch between layouts. Click Add Workflow to create another layout.
  • Rename – Double-click a tab label or use the edit icon. Customers see this name in the front-end layout picker.
  • Reorder – Drag the handle on a tab to change tab order on the storefront.
  • Delete – Remove a layout when more than one exists (confirm in the dialog).
  • Per-layout canvas – Each layout has its own seats, objects, dimensions, and background image. Product-wide rules (min/max seats, prevent single empty seats) apply to all layouts.
  • Unique Seat IDs – Every Seat ID must be unique across all layouts on the product, not only within one layout.

On the storefront, when a product has more than one layout, customers see a Select layout tab bar above the seat map. They can switch layouts and add seats from different sections in one order; a badge shows how many seats are selected in each layout. Best available (when enabled in Settings) can search across layouts if the active layout cannot satisfy the request.

In Manager โ†’ Availability, use Filter by layout to focus on one section or view all layouts together.

Canvas elements

↑ Back to top
  • Screen – Marks the screen or stage direction.
  • Seat – Purchasable seat; requires a unique Seat ID.
  • Object – Static decoration (tables, walls, etc.).
  • Text – Static labels (section names, row letters).

Table Templates

↑ Back to top

Table Templates place a table body plus surrounding seats in one click. Use them for restaurants, banquet halls, cabaret rooms, or any venue arranged around tables instead of rows.

Important: customers still book individual seats. Selecting one seat at a table does not reserve the whole table.

How to place a table

  1. In the editor toolbar, clickย Table Templates.
  2. Choose a shape group:ย Round,ย Square, orย Rectย (rectangular).
  3. Pick a seat count:ย 4,ย 6,ย 8,ย 10, orย 12.
  4. Optionally adjust size andย Table IDย (see below).
  5. Move the pointer over the canvas to preview the table, then click to place it.
  6. Keep clicking to place more tables. Pressย Escย or clickย Cancelย to exit the tool.
Table Templates tool in the Seat Planner editor

Size options

  • Roundย –ย Table diameterย andย Seat size.
  • Squareย –ย Table sideย andย Seat size.
  • Rectย –ย Table width,ย Table height, andย Seat size.

Changing the preset resets sizes to that templateโ€™s defaults. With Snap to grid enabled, only the table center snaps; seats keep their relative positions around the table.

Table ID and seat numbering

The optional Table ID field (default Table 1) controls how seats are identified:

  • With a Table ID (e.g.ย Table 1), each seat gets Seat IDs likeย Table 1-1,ย Table 1-2, and so on. Seat labels stay as the bare number (1,ย 2, โ€ฆ).
  • Without a Table ID, Seat IDs are just the seat numbers (1,ย 2, โ€ฆ).
  • After each place, if the Table ID ends in a number, it increments automatically (Table 1ย โ†’ย Table 2,ย T01ย โ†’ย T02) so you can stamp many tables quickly.
  • The table body object uses the Table ID as its label, orย Tableย if the field is empty.

Remember that every Seat ID must remain unique across all layouts on the product. After placing, you can still edit each seatโ€™s price, status, group, and other properties like any other seat.

What gets created

Each placement adds one decorative Object (the table) plus one Seat per place setting. Seats are arranged around the table:

  • Roundย – evenly around the circumference.
  • Squareย – on all four sides (extra seats go to the top and bottom first).
  • Rectย – along the two long sides.

Seat properties

↑ Back to top

For each seat you can set:

  • Label – Shown to customers (e.g. A1).
  • Seat ID – Unique identifier stored on orders; duplicates are highlighted in red.
  • Price – Base price (decimals supported).
  • Seat group – Used with discounts limited to a group.
  • Seat status – Default front-end behavior: AvailableUnavailableSold outPurchasable on Site (customer must buy at the venue), etc.
  • Handicap seat – Marks accessible seating.
  • Desirability – Heat-map value used by Best available when enabled in Settings. Hold Shift while adjusting to change delta for multiple selected seats.

Editor tools

↑ Back to top
  • Auto Increment – Pattern builder for labels or seat IDs (e.g. 1, 2, 3โ€ฆ).
  • Table Templatesย – Place round, square, or rectangular tables with 4โ€“12 seats in one click
  • Auto-fill – Fill a grid area with seats quickly.
  • Transform – Rotate, flip, and arc tools for selected objects.
  • Lock / Snap to grid – Prevent accidental moves; align objects on a grid.
  • Round corners – Slider for border radius on applicable elements.
  • Round-shaped seats – Optional circular seat appearance.
  • Z-index – Layer order for overlapping objects.
  • Additional class name – Custom CSS class on objects for theme styling.
  • Text direction – For text/object elements in RTL layouts.
  • Background – Workflow settings (cogwheel): upload a background image for the front-end seat map frame.

Import and export layout (CSV)

↑ Back to top

You can export the current seat plan to CSV for backup or editing in a spreadsheet, and import a CSV to restore or migrate a layout. Multi-layout products export all workflows in one file (with workflowId and workflowName columns). Imports are validated for duplicate Seat IDs across workflows and a maximum of five layouts. Use this when cloning venues or maintaining layouts outside WordPress.

Save and return

↑ Back to top

Click the back arrow to return to the product screen, then Update or Publish the product. Unsaved editor changes are stored in the product when you leave the editor according to the plugin save flow.

Summary

↑ Back to top
  • Use the editor for layout, per-seat price/status/groups, and desirability for Best available.
  • Import/export CSV for backups; use General and Dates for product-wide rules.

Adding Dates to a Product

↑ Back to top

The Dates tab lets you define when your event or show is available. Customers pick a date and time when selecting seats, and availability (e.g. sold-out seats) is tracked per date/time. If you leave dates empty, the product is treated as a single “no-dates” event.

Where to Add Dates

↑ Back to top
  1. Edit a WooCommerce product of type Auditorium (Seat Planner product).
  2. In the product data tabs click the Dates tab.
  3. Use the options described below to set “Stop sales before the event” and to add date/time slots.
Dates tab

Stop Sales Before the Event

↑ Back to top

At the top of the Dates tab you can set Stop sales before the event. This prevents customers from buying tickets within a certain time before each event start (e.g. 2 hours, 1 day). The value is entered as days, hours, and minutes. Sales for a given date/time are blocked once that cutoff time has passed (based on server time).

  • Set all three fields to 0 to allow sales right up until the event start (no cutoff).
  • Example: 0 days, 2 hours, 0 minutes – sales stop 2 hours before each eventโ€™s start time.

Manage Dates and Times

↑ Back to top

Use Add Date to create event slots. Each entry is a date with one or more times (e.g. one date with 10:00 and 14:00 for two showings that day).

  • Add Date – Adds a new date card. The first date defaults to today; each new date defaults to the day after the last one, with a default time of 10:00.
  • Date field – Use the date picker to set the event date. Past dates may be shown as expired in the admin; they are still stored and can be used for reporting or past bookings.
  • Times – Each date card lists one or more times (e.g. 10:00, 14:00). Use the controls to add, edit, or remove times. Each combination of date + time (e.g. 2025-01-15 at 10:00) is one selectable “slot” for customers.
  • Duplicate – Duplicates that date (and all its times) as a new card for the next day, so you can quickly build a run of dates.
  • Remove – Removes that date and all its times.

Dates are stored as date-time strings (e.g. 2025-01-15T10:00). Duplicates are removed and the list is sorted when you save the product.

Filter dates in the admin

↑ Back to top

When you have many date cards, use the list filters to find slots faster:

  • Upcoming – Show future dates only.
  • Expired – Show past dates.
  • By month – Narrow the list to a specific month.

How Customers Use Dates

↑ Back to top

On the frontend:

  • If the product has dates, customers choose a date and time (one of the slots you added) before or while selecting seats.
  • Availability (taken/sold-out seats) is per date/time. A seat can be sold for one slot and still available for another.
  • If the product has no dates, customers do not choose a date; the product behaves as a single event.
Date and time picker on front-end

Summary

↑ Back to top
  • Open Product data โ†’ Dates.
  • Optionally set Stop sales before the event (days, hours, minutes) so sales are blocked shortly before each event.
  • Use Add Date to add dates, then add one or more times per date. Use Duplicate to copy a date to the next day.
  • Save the product. Customers will see and select these date/time slots when booking seats.

Adding Discounts

↑ Back to top

Discounts let you offer reduced prices on seats-either as a percentage off or a fixed amount. You can apply them to all seats or limit them by seat group and/or user role.

Where to Add Discounts

↑ Back to top
  1. Edit a WooCommerce product of type Auditorium (Seat Planner product).
  2. Go to the product data tabs section and click the Discounts tab.
  3. Use Add Discount to create a new discount and configure it in the card that appears.
Discounts tab

Discount Fields

↑ Back to top

Each discount has the following options:

  • Discount Name (required) – A unique label for this discount (e.g. “Children”, “Students”). Customers see this when choosing a discount for their seat.
  • Seat Group – Leave as “All seats” to allow the discount on any seat, or choose a specific group so the discount is only available for seats in that group. Seat groups are defined on individual seats in the Seat Planner editor.
  • User Role – Leave as “No role” to show the discount to everyone, or select a WordPress role (e.g. Customer, Subscriber) so only users with that role can use this discount.
  • Discount Type – Percentage (e.g. 10% off) or Fixed (e.g. $5 off).
  • Discount Value – The amount: a number between 0โ€“100 for percentage, or a monetary value for fixed. The discount is applied to the base seat price; custom field surcharges are added after the discount.

Using Seat Groups with Discounts

↑ Back to top

To restrict a discount to certain seats:

  1. In the Seat Planner editor, assign a group to the relevant seats (each seat object can have a group name).
  2. Save the seat plan. The Discounts tab will list those group names in the “Seat Group” dropdown.
  3. When creating a discount, select that group so the discount is only offered for seats in that group. Customers will only see and can only apply that discount when selecting those seats.

How Customers See Discounts

↑ Back to top

On the frontend, when a customer selects seats:

  • If the product has discounts and the customer’s role (if required) and seat group (if set) match, they see a discount selector (e.g. “Select a discount”) for each seat or in the options area.
  • They can choose one of the available discounts or “No discount”. The price updates according to the base seat price minus the chosen discount; custom field surcharges are then added.
  • Discounts are validated at add-to-cart and in the Manager (e.g. when creating or editing orders). If a discount is not allowed for that seat or product, an error is shown.
Customer discount selector on seat selection

Summary

↑ Back to top
  • Add discounts under Product data โ†’ Discounts.
  • Set a unique nametype (percentage or fixed), and value.
  • Optionally limit by Seat Group (assign groups to seats in the editor) and/or User Role.
  • Customers choose an available discount when selecting seats; the final price is base price minus discount plus any custom field surcharges.

Custom Fields

↑ Back to top

Custom fields let you collect extra information per seat (e.g. attendee name, dietary notes, add-ons). You can make fields required, show or hide them with display conditions, and add optional prices so that choices (e.g. a checkbox or select option) add a surcharge to the seat price. The surcharge is applied after the base seat price and any discount.

Where to Add Custom Fields

↑ Back to top
  1. Edit a WooCommerce product of type Auditorium (Seat Planner product).
  2. In the product data tab click the Custom Fields tab.
  3. Use Add Custom Field to create a field and configure it in the card that appears. You can reorder fields by dragging the handle.
Custom Fields tab

Note: Field labels should be unique (case-insensitive). The admin may warn if two fields share the same label.

Field Types

↑ Back to top
  • Text – Single-line text input. Optional placeholder.
  • Textarea – Multi-line text input. Optional placeholder.
  • Checkbox – Yes/no switch. You can set a label for the checked state (e.g. “Yes”) and an optional price; if set, checking the box adds that amount to the seat price.
  • Select – Dropdown with predefined options. Each option has a label and an optional price; the selected optionโ€™s price (if any) is added to the seat price.
  • Number – Numeric input. Optional min/max, placeholder, and optional price per unit; the surcharge is (price ร— value), e.g. “โ‚ฌ2 per item” with value 3 adds โ‚ฌ6.
  • Meta – Read-only name-value pair. You set a fixed value in the admin; the customer does not edit it. The value is attached to the order (e.g. “Event” = “Summer Concert”). Meta fields are not shown in the seat form and are not included when you filter by “editable” fields.
  • Info – Display-only text: label and description. No value is stored. Useful for instructions or notes; you can control visibility with display conditions.

Common Options (per field)

↑ Back to top
  • Label – Shown next to the input in the seat details form. Should be unique.
  • Description – Optional helper text shown under the label on the front-end.
  • Required – When enabled, the customer must fill this field (for editable types) before adding the seat to the cart.
  • Visible – When enabled, this fieldโ€™s label and value are shown in the cart and order details on the front-end. When disabled, the value is still stored but not displayed there.

Display Conditions

↑ Back to top

For field types other than Meta, you can add display conditions. The field is only shown to the customer when all conditions are met. For example:

  • Show “Dietary requirements” only when “Vegetarian option” (checkbox) is checked.
  • Show a message (info field) only when a select field has a specific option selected.
  • Show a number field only when another number field is greater than 0.

Conditions can be based on: checkbox (checked/not checked), select (selected option), text/textarea (filled/empty), or number (equals, not equals, greater than, less than).

Mutual Exclusivity

↑ Back to top

You can mark a field as mutually exclusive with one or more other fields (by their UID). If the customer gives this field a value, the other specified fields are hidden. Useful when only one of several options should be chosen (e.g. “Option A” vs “Option B”).

How Customers See Custom Fields

↑ Back to top
  • When selecting seats, the seat details form shows all applicable editable custom fields (text, textarea, checkbox, select, number). Meta and info fields are handled as described above.
  • Fields that have display conditions appear only when those conditions are satisfied. Mutually exclusive fields are hidden when another field in the group has a value.
  • Values are saved with the cart item and the order. Any price set on checkbox, select options, or number (per unit) is added to the seat price after the base price and discount.
Seat details form with custom fields on front-end

Summary

↑ Back to top
  • Add and manage fields under Product data โ†’ Custom Fields. Use unique labels and drag to reorder.
  • Use TextTextareaCheckboxSelect, or Number for customer input; optionally set RequiredVisible, and prices (checkbox/select/number) for surcharges.
  • Use Meta for fixed key-value data on the order; use Info for display-only text.
  • Use Display conditions and Mutual exclusivity to show or hide fields based on other fieldsโ€™ values.

In-Cart Seats

↑ Back to top

The In-Cart Seats tab lists seats currently held in customer carts (reserved during checkout). Use it when seats look “stuck” as unavailable but no completed order exists.

Where to Find It

↑ Back to top
  1. Edit an Auditorium Product.
  2. In Product data, open the In-Cart Seats tab.

What You See

↑ Back to top

For each reservation you typically see the seat ID, date/time (if applicable), and how long the hold may last. Reservations expire automatically after the Seat reservation time set in Settings โ†’ General if checkout is not completed.

Force release

↑ Back to top

If a seat remains reserved longer than expected (for example after a failed payment or abandoned cart), you can force-release reserved seats from this tab so they become selectable again on the front end.

Before releasing, check Tools โ†’ Booking Integrity for ghost or stalled orders if the same seat still appears wrong after release.

Summary

↑ Back to top
  • In-Cart Seats shows active cart reservations for this product.
  • Reservations clear automatically when the cart timer expires; use force-release only when you need to free seats immediately.

Export Bookings

↑ Back to top

Export Bookings downloads completed bookings as a CSV file. You choose which columns to include. Only orders with status Completed are included.

Where to Find It

↑ Back to top
  1. Go to Seat Planner โ†’ Manager.
  2. Select an auditorium product.
  3. Open Statistics. For dated products, pick the event date first.
  4. Click Export Bookings in the toolbar.
Manager export bookings toolbar button
Manager export bookings

For products with dates, the export uses the event date shown on the Statistics page. Open statistics for the date you want before exporting. Products without dates export all completed bookings for that product.

Select Fields to Export

↑ Back to top

In the modal, use the checkboxes to choose CSV columns. Click Select all or Deselect all. At least one field must be selected before exporting.

Available fields:

  • Order ID – WooCommerce order ID.
  • Date created – When the order was placed.
  • Order status – Order status label (export only includes completed orders).
  • Customer name – Billing first and last name.
  • Customer email – Billing email.
  • Product name – Name of the Auditorium product.
  • Product note – Purchase note set on the product.
  • Seat ID – Seat identifier from the seat plan.
  • Date/Time – Event date and time for the seat (for dated products).
  • Discount – Seat discount applied at purchase, if any.
  • Seat price – Line total for that seat in the order.
  • Custom fields – When selected, one column is added per custom field that has values in the exported data.

How to Export

↑ Back to top
  1. Open Manager โ†’ Statistics for the product (and event date, if applicable).
  2. Click Export Bookings in the toolbar.
  3. Select the columns you want.
  4. Click Export Bookings in the modal footer. Bookings are loaded, then a CSV file downloads. The file name includes todayโ€™s date and, when exporting a specific event, the selected date.

If there are no bookings for the product or date, youโ€™ll see a message and no file will be downloaded.

Summary

↑ Back to top
  • Manager โ†’ Product โ†’ Statistics โ†’ Export Bookings.
  • Scoped to the event date on the Statistics page (dated products) or the whole product (no dates).
  • Choose columns, then download CSV. Only completed orders are included.

Settings

↑ Back to top

The Settings page configures global Seat Planner behavior: reservations, cart redirects, Best available, QR/PDF, reports, colors, and Android app access. Click Save settings at the bottom after changes.

Where to Find It

↑ Back to top

Seat Planner โ†’ Settings in the admin sidebar.

Settings general tab

General

↑ Back to top
  • Seat reservation time – Minutes a seat stays reserved in the cart during checkout (minimum 5; default 15).
  • Seat selector tooltip – When to show the seat tooltip: Disabled, Desktop only, Mobile only, or Always.
  • Enable “Best available” feature – Lets customers use Best available on the front end to auto-pick seats using the desirability heat map from the editor.
  • Strategy (when Best available is on) – Quality first (conservative), Balanced, or Together first (aggressive). Customers can also filter by price range when seats have different prices.
  • Force Auto-Complete Orders – Orders that contain only auditorium seat tickets already move to Completed after payment. Enable this to also auto-complete orders paid via Cash on Delivery and mixed orders (seats plus other products, e.g. merchandise).
  • Enable “Select seat” button in product loop – Show the button on shop/archive pages, not only the single product page.
  • Show adjacent months in date picker – Show previous/next month in the front-end date picker for dated products.
  • Compatibility mode – Enable if cache or JS optimization plugins (WP Rocket, LiteSpeed, etc.) break the seat selector.
  • Compatibility calc totals – Recalculate cart totals when the cart loads from session; use if totals are wrong with some themes.

Cart Behavior

↑ Back to top
  • Redirect customers after successful addition – After adding seats: Disabled, Redirect to Cart, Redirect to Checkout, or Redirect to Custom Page.
  • Custom Redirect URL – Full URL when using custom redirect (e.g. a thank-you or upsell page).
  • Show redirect message – Inform customers they are being redirected.
  • Custom Redirect Message Text – Optional override of the default message.
  • Enable cart timer – Countdown in the cart for each reserved seat.

Attachments

↑ Back to top
  • Enable QR code – Include QR codes in order emails (disable to hide QR on tickets).
  • Enable PDF attachments – Attach PDF tickets (with QR when enabled) to order emails.
  • Enable PDF in My Account downloads – Let customers download tickets under My Account.
  • PDF filename – Custom download name without .pdf; blank uses default.

Colors

↑ Back to top
  • Accent color – Buttons, links, date picker, and cart timer on the front end.
  • Front-end appearance – Dark Mode applies a dark theme to the date/time picker, seat selector fields, and cart timer.

Report

↑ Back to top
  • Enable report – Email when a product is fully booked or past its cut-off.
  • Report e-mail – Recipient; empty uses the site admin email.
  • Check interval – Every 15 minutes, Hourly, Twice daily, or Daily.
  • Fields to include – Columns for the report body and optional CSV.
  • Include CSV attachment – Attach booking CSV to the email.
  • Include Seat Map Image (Beta) – Attach a color-coded PNG snapshot of the layout (booked, available, blocked). Beta: may not match the editor pixel-perfect.

Integrations

↑ Back to top

The Integrations tab includes the Android scanner app and script embed.

Android app

  • Android app – Download link for on-site scanning.
  • Enable app access – Allow the app to validate tickets via your REST API.
  • REST API base URL – Copy into the app.
  • App secret key – Generate (min. 8 characters) and enter in the app.

For script embed on external sites, see the dedicated Script Embed guide (canonical setup steps).

Settings Integrations tab

Summary

↑ Back to top
  • Settings cover reservations, Best available, auto-complete, redirects (including custom URL), QR/PDF, dark mode, reports (with optional seat map image), and Android app access.
  • Embed setup: Script Embed.

Script Embed

↑ Back to top

Script embed lets customers select seats on an external website (partner site, landing page) while checkout still completes on your WooCommerce store.

Where to Configure It

↑ Back to top

Seat Planner โ†’ Settings โ†’ Integrations tab. Enable embed, set allowed origins, and copy the generated script and placeholder HTML.

Settings Integrations Embed

Step-by-step setup

↑ Back to top
  1. Enable Script Embed and click Save settings.
  2. Under Allowed Embed Origins, add one full origin per line (scheme + host), for example https://partner-site.com. Only listed origins may load the widget; this is required for security.
  3. Copy the Embed script snippet and paste it once in the partner page <head> or before </body>. Add ?lang=fr_FR to the script URL if you need a fixed locale for all placeholders on that page.
  4. For each auditorium product, enter the Auditorium product ID and optional Preset date and time, then copy the generated Embed HTML (<div> placeholder) into the partner page where the widget should appear. One script can power multiple placeholders.
  5. On the partner site, the customer selects seats in the embedded widget, then is redirected to your store to complete payment; the cart is updated on your WordPress site.

Android app (same tab)

↑ Back to top

The Integrations tab also configures the Android ticket scanner: download link, Enable app access, REST API base URL, and App secret key (minimum 8 characters; use Generate then enter the key in the app). See also Scanner.

Summary

↑ Back to top
  • Whitelist partner origins, paste one embed script, add per-product placeholder divs.
  • Checkout always happens on your WooCommerce site after seat selection.
  • Global reservation, PDF, and cart settings still apply from Settings.

Manager

↑ Back to top

The Manager is your control room for auditorium products: availability per date, overrides, manual orders, analytics, and exports. Open it from Seat Planner โ†’ Manager.

Manager product list

Flow

↑ Back to top
  1. Product listing – Search and select an auditorium product.
  2. Dates and times – For dated products, pick a slot or open product-wide views.
  3. Availability or Statistics – Manage seats or view analytics.

Availability

↑ Back to top

The seat map shows sold, available, and overridden seats for the selected product and date.

  • Edit seat – Click a seat to change status override, linked order, discount, or custom fields. Status override takes precedence over default product settings.
  • Scanned filter – Use the Scanned toggle to show only seats whose QR ticket was checked in.
  • Unscan ticket – On the edit-seat screen, view scan details and clear scan status if a ticket was scanned by mistake.
Manager availability seat map

Bulk actions

↑ Back to top

Select multiple seats on the availability map, then choose a bulk action:

  • Set status to – Apply a status override to selected seats (seats with existing orders may be skipped).
  • Create Order – Create one WooCommerce order for multiple selected seats: enter customer details, per-seat discounts, and custom fields, then confirm.
  • Move to Date (multi-date products only) – Move bookings and status overrides to another date/time. Optionally re-send order notifications to customers.

Statistics

↑ Back to top

From the productโ€™s dates screen, open Statistics for analytics (optionally per event date):

Manager statistics dashboard
  • Summary cards – Seats sold, occupancy, revenue, order count.
  • Charts – Revenue and sales over time (by event date or order date).
  • Tables – Sales by order and by date with CSV export.
  • Velocity projection – Projected sales based on recent trends.
  • Seat status breakdown – Distribution of available, sold, and other states.

For a simple CSV of completed bookings from the product edit screen, use Export Bookings on the product. Manager statistics adds dashboards and filters for ongoing operations.

Summary

↑ Back to top
  • Manager: products โ†’ dates โ†’ Availability (edit, scan filter, bulk actions) or Statistics (reports and CSV).
  • Use with Tools for integrity checks and Scanner for door check-in.

Scanner

↑ Back to top

The Scanner validates QR codes from Seat Planner tickets (email PDF or on-screen) and records check-in at your venue.

Where to Find It

↑ Back to top

Seat Planner โ†’ Scanner. Also available from Overview โ†’ Ticket Scanner.

Scanner page

How to scan

↑ Back to top
  1. Click to open the scanner (camera modal).
  2. If prompted, choose a camera device (useful on laptops with multiple cameras or when the wrong camera is selected). An automatic option picks the best available camera.
  3. Allow browser camera permission.
  4. Point at the ticket QR code. On success you see order and seat details; on failure you see an error (invalid code, wrong site, already scanned, etc.).
  5. Close the modal and scan the next guest.
Scanner success result

Admin scanner vs Android app

↑ Back to top
  • Browser Scanner (this page) – Quick check-in from a laptop or tablet with a camera; no app install.
  • Android app – Better for staff at the door on phones. Download from Settings โ†’ Integrations, enable app access, and set the secret key. Same QR codes as PDF/email tickets.

To clear a mistaken scan, use Manager โ†’ Availability โ†’ edit seat โ†’ Unscan Ticket.

Requirements

↑ Back to top
  • QR codes must be generated by Seat Planner (order email or PDF).
  • HTTPS is recommended so browsers allow camera access.

Summary

↑ Back to top
  • Scanner: open camera, select device if needed, scan QR, view result.
  • For high-volume entry, prefer the Android app configured in Settings.

Tools

↑ Back to top

Theย Toolsย page provides utility tools for managing bookings and tickets: check for double bookings, ghost bookings, or orphan taken seats; preview PDF tickets; dry-run verify order QR codes; and edit order item data (seat, date, discount, custom fields) for existing orders.

Where to Find It

↑ Back to top

Seat Planner โ†’ Tools in the admin sidebar. You can also open it from the Overview quick action “Tools”.

Booking Integrity

↑ Back to top

Runs checks across your auditorium products to find:

  • Double booking – The same seat (and date, for dated products) appearing in more than one order. This can indicate a data or process issue.
  • Ghost bookingย – A seat marked as taken in product meta but with no matching order item (e.g. after a failed or partial cleanup). The tool can often fix these by syncing meta with actual orders.
  • Orphan taken seatย – A seat marked as taken in product meta that does not resolve through the normal order lookup. Results show one of two statuses:

Select the check type, run the check, and review the results per product. Ghost bookings and orphan taken seats can be fixed from the results screen. Re-run after fixes to confirm.

PDF Preview

↑ Back to top

Preview how the PDF ticket (attached to order emails) will look. You typically select a product and optionally an order or sample data so the PDF is rendered with realistic content (seat, date, QR placeholder, etc.). Useful to verify layout and text before sending to customers.

QR Verify

↑ Back to top

Dry-run check that seat QR codes on an order will validate at the doorโ€”without marking tickets as scanned.

  1. Open theย QR Verifyย tab.
  2. Enter a WooCommerceย order IDย that contains auditorium seats.
  3. Clickย Verify QR Codes.

Results show a summary (valid, invalid, already scanned) and a card per seat with the QR image (when available), seat ID, product, date, and status:

  • Validย – Payload decodes correctly and the ticket is ready to scan.
  • Already usedย – QR is valid but already checked in (scan time and author shown when available).
  • Invalidย – Payload does not decode (ticket would fail at the door).
  • Image missingย – No QR image could be loaded or regenerated for that seat.

Missing QR images are regenerated during verification when possible. If the order is not Completed, a notice appears: the door scanner may still reject the ticket until the order status is completed. Use this before an event to confirm tickets for a specific order.

For live check-in at the venue, use theย Scannerย (or Android app)โ€”QR Verify only tests readiness.

Edit Order

↑ Back to top

Find an order by ID (or number) and open its seat planner line items. For each seat line item you can edit:

  • Seat (change to another seat ID if the product allows it).
  • Date/time (for dated products).
  • Discount.
  • Custom field values.

Changes update the order and item meta. Use this to correct mistakes (wrong seat, wrong date, wrong custom field) without deleting and re-creating the order. Validate that the new seat/date/discount are valid for the product.

Booking integrity check results

Summary

↑ Back to top
  • Tools: Booking Integrity (double booking, ghost booking, and stalled-orders checks; optional fix for ghost bookings only), PDF Preview (preview ticket PDF), and Edit Order (edit seat, date, discount, custom fields on existing order items).

PDF Ticket Templates

↑ Back to top

Seat Planner generates printable PDF tickets with a unique QR code per seat. You can customize layout, branding, and content with theme overrides, placeholders, and WordPress filtersโ€”without editing the plugin files.

How PDF Tickets Work

↑ Back to top

Each completed order that contains auditorium seats can produce one PDF. The PDF has:

  • Body templateย โ€” Cover / wrapper page (thank-you message, logo, instructions) and aย {template_loop}ย slot where all ticket pages are inserted.
  • Loop templateย โ€” One full ticket page per seat (product title, seat, customer, price/date, QR code).

PDFs are rendered with Dompdf (HTML + CSS โ†’ PDF). Prefer inline styles and simple table layouts; complex CSS (flexbox, grid, external stylesheets) is unreliable in Dompdf.

Enable PDF Tickets

↑ Back to top

Under Seat Planner โ†’ Settings โ†’ Attachments:

  • Enable PDF attachmentsย โ€” Attach the PDF to completed-order emails (and manual โ€œResend order detailsโ€ for completed orders).
  • Enable PDF in My Account downloadsย โ€” Let customers download tickets from My Account โ†’ Downloads.
  • PDF filenameย โ€” Optional custom name (withoutย .pdf).
  • Enable QR codeย โ€” Include QR images on tickets (required for scanning).

Accent colors on the default templates come from Settings โ†’ Colors โ†’ Accent color.

Full settings reference:ย Settings.

Theme Overrides (Recommended)

↑ Back to top

Copy the plugin defaults into your active theme (or child theme) root and rename them:

Plugin defaultTheme override filename
includes/pdf/templates/pdf-body.phpstachesepl-pdf-body.php
includes/pdf/templates/pdf-loop.phpstachesepl-pdf-loop.php

Place both files in the theme root, for example:

wp-content/themes/your-child-theme/stachesepl-pdf-body.php
wp-content/themes/your-child-theme/stachesepl-pdf-loop.php

Resolution order:

  1. Child theme override
  2. Parent theme override

Placeholders

↑ Back to top

Templates are HTML/PHP files. Dynamic values use {placeholder} tokens that the plugin replaces before rendering.

Body placeholders

PlaceholderDescription
{template_loop}All seat ticket pages concatenated (required for tickets to appear).
{logo}Site logo HTML (WordPress custom logo as an embedded image, or site name text).
{accent_color}Accent color hex from Settings.
{accent_color_20}Accent color at 20% opacity (RGBA), for soft backgrounds.

Loop placeholders (per seat)

PlaceholderDescription
{product_title}Order item / product name.
{order_id}WooCommerce order ID.
{customer_name}Billing first + last name.
{seat_id}Seat identifier (e.g. A-12).
{seat_price}Formatted price HTML (includes tax when applicable).
{selected_date}Formatted event date/time, or empty if the product has no dates.
{prominent_date_html}Ready-made date block HTML when a date exists; empty otherwise.
{price_row_html}Ready-made price table row HTML.
{date_or_price_row}Legacy helper row (date if present, otherwise price). Prefer {prominent_date_html} + {price_row_html} for new templates.
{qrcode}QR image as a data URIโ€”use as <img src="{qrcode}" />.
{logo} / {logo_small}Full-size and compact logo HTML.
{accent_color} / {accent_color_20}Same accent tokens as the body template.

Custom field values are not included by default. Add them with the placeholder filters below.

Minimal Loop Example

↑ Back to top
<div style="width: 595.28pt; height: 841.89pt; padding: 40pt; font-family: DejaVu Sans, sans-serif;">
    <h1 style="font-size: 18pt; color: {accent_color};">{product_title}</h1>
    <p>Order #{order_id} โ€” {customer_name}</p>
    <p>Seat: <strong>{seat_id}</strong></p>
    {prominent_date_html}
    <p>{seat_price}</p>
    <img src="{qrcode}" style="width: 120pt; height: 120pt;" />
</div>

Developer Hooks

↑ Back to top

Add filters in your themeโ€™s functions.php or a small custom plugin.

Change template file paths

add_filter('stachesepl_pdf_template_body', function ($path, $order) {
    // Must resolve inside the plugin templates dir or an active theme dir,
    // and use an allowed basename (e.g. stachesepl-pdf-body.php).
    return get_stylesheet_directory() . '/stachesepl-pdf-body.php';
}, 10, 2);

add_filter('stachesepl_pdf_template_loop', function ($path, $order) {
    return get_stylesheet_directory() . '/stachesepl-pdf-loop.php';
}, 10, 2);

Add or change placeholders

// Cover / body tokens
add_filter('stachesepl_pdf_template_body_placeholders', function ($placeholders, $order) {
    $placeholders['{venue_name}'] = esc_html('Grand Hall');
    return $placeholders;
}, 10, 2);

// Per-seat tokens (includes access to the order item)
add_filter('stachesepl_pdf_template_loop_placeholders', function ($placeholders, $item, $order) {
    $seat_data = \Stachethemes\SeatPlanner\Utils::normalize_seat_data_meta(
        $item->get_meta('seat_data')
    );
    $custom_fields = $seat_data['customFields'] ?? [];

    // Example: show an "Attendee Name" custom field
    $attendee = isset($custom_fields['Attendee Name'])
        ? (string) $custom_fields['Attendee Name']
        : '';

    $placeholders['{attendee_name}'] = esc_html($attendee);

    return $placeholders;
}, 10, 3);

Then use {attendee_name} (and any other custom tokens) in your theme override templates.

Logo

// Use a specific Media Library attachment as the PDF logo
add_filter('stachesepl_pdf_logo_attachment_id', function ($attachment_id, $order) {
    return 123; // media attachment ID
}, 10, 2);

// Or replace the logo HTML entirely
add_filter('stachesepl_pdf_logo_html', function ($html, $order) {
    return '<img src="..." style="max-height: 60pt;" />';
}, 10, 2);

add_filter('stachesepl_pdf_logo_small_html', function ($html, $order) {
    return '<img src="..." style="max-height: 20pt;" />';
}, 10, 2);

By default the plugin uses the WordPress Custom Logo (Customizer). Images are embedded as data URIs so Dompdf can render them reliably.

Custom CSS in the PDF

The default body template fires stachesepl_pdf_body_style inside a <style> block. If you keep that action in your override (or use the default body), you can inject CSS:

add_action('stachesepl_pdf_body_style', function () {
    echo '
        @font-face {
            font-family: "MyFont";
            src: url("' . esc_url(get_stylesheet_directory_uri() . '/fonts/MyFont.ttf') . '") format("truetype");
        }
        body { font-family: "MyFont", DejaVu Sans, sans-serif; }
    ';
});

Font embedding in Dompdf can be pickyโ€”test thoroughly. DejaVu Sans is the default and supports a wide character set.

Filename, emails, and Dompdf options

add_filter('stachesepl_pdf_file_name', function ($filename, $order_id) {
    return 'tickets-order-' . $order_id . '.pdf';
}, 10, 2);

// Which WooCommerce emails receive the PDF (default: completed order + invoice/resend)
add_filter('stachesepl_pdf_attachment_email_ids', function ($email_ids) {
    $email_ids[] = 'customer_processing_order'; // example only
    return $email_ids;
});

add_filter('stachesepl_dompdf_options', function ($options) {
    $options['defaultPaperSize'] = 'A4';
    $options['defaultPaperOrientation'] = 'portrait';
    return $options;
});

RTL Sites

↑ Back to top

When the site language is RTL and you have no theme overrides, Seat Planner uses pdf-body-rtl.php and pdf-loop-rtl.php, with text shaping helpers for Dompdf. Theme overrides skip that automatic RTL pathโ€”design your override for RTL if needed.

Preview Before Going Live

↑ Back to top
  1. Place a completed test order with at least one auditorium seat.
  2. Openย Seat Planner โ†’ Tools โ†’ PDF Preview.
  3. Enter the order ID and clickย Preview PDF.

The PDF opens in a new tab. Iterate on your theme templates, refresh the preview, then confirm a real order email attachment. See alsoย Tools.

Practical Tips

↑ Back to top
  • Start from the plugin defaults and change incrementallyโ€”layout bugs in Dompdf are easier to spot that way.
  • Useย ptย units and fixed widths close to A4 for predictable pagination.
  • Prefer tables for columns; avoid flexbox/grid.
  • Always escape custom placeholder values withย esc_html()ย /ย esc_attr().
  • Refunded seat line items are skipped and do not appear in the PDF.
  • Do not edit files inside the pluginโ€”updates will overwrite them. Use theme overrides or filters.

Summary

↑ Back to top
  • Override templates withย stachesepl-pdf-body.phpย andย stachesepl-pdf-loop.phpย in your theme root.
  • Use built-in placeholders for seat, order, logo, accent color, and QR; add custom tokens viaย stachesepl_pdf_template_*_placeholders.
  • Customize logo, filename, email IDs, CSS, and Dompdf options with the filters above.
  • Preview fromย Tools โ†’ PDF Previewย before sending tickets to customers.

Shortcodes

↑ Back to top

The plugin provides two shortcodes: one to output the “Select seat” / add-to-cart button for an auditorium product, and one to display a count of seats (e.g. available or sold) for given product(s).

If you use Elementor, the same options are available as widgets – see Elementor.

Select seat / Add to cart button

↑ Back to top

Renders the Select seat button for a specific auditorium product. Clicking it opens the seat selector (and date picker if the product has dates). Use it on a custom page or post when you donโ€™t want to use the single product template.

Shortcode: [stachesepl_add_to_cart]

Parameters:

  • product_id (required) – The WooCommerce product ID of the auditorium product. You can use p as a shorthand.
  • date (optional) – For products with dates: the event date/time in YYYY-MM-DDTHH:mm format (e.g. 2026-12-31T10:00). Shorthand: d. Omit to let the customer choose the date.
  • class (optional) – Extra CSS class(es) on the container. Shorthand: c.

Examples:

[stachesepl_add_to_cart product_id=123]

[stachesepl_add_to_cart product_id=123 date=2026-12-31T10:00]

[stachesepl_add_to_cart p=123 d=2026-12-31T10:00 class=my-button]

If product_id is missing or invalid, or the product is not an auditorium product, the shortcode outputs nothing.

Seat count

↑ Back to top

Outputs the number of seats that match the given product(s), date(s), and status. Useful for text like “42 seats available” or “10 sold”. The result is wrapped in a spandiv, or p with the class stachesepl-count (plus any custom class you set).

Shortcode: [stachesepl_count]

Parameters:

  • product_id – One product ID or comma-separated list (e.g. 123 or 123,456). Shorthand: p.
  • date – Event date(s) in YYYY-MM-DDTHH:mm format. Comma-separated for multiple dates. Empty: for dated products the first available date is used; for no-dates products leave empty. Shorthand: d.
  • status – Which seat statuses to count. Comma-separated. Values: availableunavailablesold-outon-site. Default: available,on-site. Shorthand: s.
  • class – Extra CSS class(es) on the wrapper. Shorthand: c.
  • wrapper – HTML wrapper: spandiv, or p. Default: span. Shorthand: w.

Examples:

[stachesepl_count product_id=123]
[stachesepl_count product_id=123,456]
[stachesepl_count p=123]
[stachesepl_count product_id=123 status=available date=2026-03-15T19:00]
[stachesepl_count p=123,456 s=sold-out d=2026-03-15T19:00,2026-03-16T19:00] [stachesepl_count product_id=123 wrapper=div class=seat-total]

Only auditorium products are included. Seats are counted from the seat plan data for the given product(s) and date(s); status is the seatโ€™s current state (e.g. from orders or manager overrides).

Summary

↑ Back to top
  • stachesepl_add_to_cart – Show the Select seat button; product_id required; optional date (YYYY-MM-DDTHH:mm) and class. Invalid or non-auditorium IDs output nothing.
  • stachesepl_count – Display a seat count; optional datestatusclass, and wrapper.
  • Page builders: Elementor widgets wrap the same behavior.

Elementor

↑ Back to top

If you use Elementor, Seat Planner provides two widgets under the Stachethemes Seat Planner category in the widget panel.

Requirements

↑ Back to top
  • Elementor (or Elementor Pro) active on your site.
  • Stachethemes Seat Planner plugin active.
  • At least one published Auditorium Product.

Select Seat Button

↑ Back to top

Embeds the same flow as the [stachesepl_add_to_cart] shortcode: a Select seat button that opens the seat selector (and date picker when the product has dates).

Widget controls:

  • Auditorium product (required) – Choose a published auditorium product.
  • Event date (optional) – Preset date/time; leave empty so the customer chooses.
  • CSS class (optional) – Extra class on the button wrapper.

Equivalent shortcode example: [stachesepl_add_to_cart product_id=123]. See Shortcodes.

Seat Count

↑ Back to top

Displays a number of seats matching the selected product(s), optional date, and status filter – same logic as [stachesepl_count].

Widget controls:

  • Auditorium product(s) (required) – One or more products.
  • Event date (optional) – For dated products; empty uses the first available date.
  • Seat status – Which statuses to count (e.g. Available, Sold out). Default includes available and on-site.
  • CSS class and HTML wrapper (span, div, or p) – For styling.

How to add a widget

↑ Back to top
  1. Edit a page with Elementor.
  2. Search for Stachethemes or Seat Planner in the widget list.
  3. Drag Select Seat Button or Seat Count onto the page.
  4. Select the product and options, then update the page.

Summary

↑ Back to top
  • Elementor widgets mirror shortcode behavior; use whichever fits your page builder workflow.
  • Invalid or missing product IDs render nothing on the live site (preview may show a placeholder in the editor).

WooCommerce Coupons (Seat Limits)

↑ Back to top

Standard WooCommerce coupons can be extended with auditorium seat limits: the coupon applies only when the cart contains a minimum and/or maximum number of auditorium seats.

Where to Find It

↑ Back to top
  1. Go to Marketing โ†’ Coupons (or WooCommerce โ†’ Coupons, depending on your WooCommerce version).
  2. Create or edit a coupon.
  3. Open the Usage restriction tab.
  4. Find the Auditorium Product Options section.

Options

↑ Back to top
  • Minimum seats required – Coupon is valid only if the cart has at least this many auditorium seat line items. Leave empty or 0 for no minimum.
  • Maximum seats allowed – Coupon is valid only if the cart has at most this many auditorium seats. Leave empty or 0 for no maximum.

Only seats sold as Auditorium Product line items count toward these limits (not unrelated products in a mixed cart).

Example

↑ Back to top

A “Group of 4” coupon might set Minimum seats required to 4 so it applies only when four or more seats are in the cart. A “Single seat promo” might set Maximum seats allowed to 1.

Relation to product discounts

↑ Back to top

Product discounts (on the auditorium productโ€™s Discounts tab) apply per seat during selection. WooCommerce coupons apply at cart/checkout and can be combined with your storeโ€™s other coupon rules, subject to WooCommerce validation.

Summary

↑ Back to top
  • Configure min/max auditorium seats on the coupon Usage restriction tab.
  • Useful for group offers, single-ticket promos, and cart-level campaigns.

Google Sheets Live Sync

↑ Back to top

Google Sheets Live Sync keeps a live Google spreadsheet of completed bookings for each auditorium product and event date. Connect Google once, enable sync per event from the Manager, and rows update automatically when completed orders change โ€” no manual CSV exports.

Spreadsheet columns use the same fields as your report CSV (Settings โ†’ Report โ†’ Fields to include).

What You Get

↑ Back to top
  • One spreadsheet per event โ€” For dated products, each event date gets its own spreadsheet. Products without dates use a single spreadsheet for the product.
  • Bookings tab โ€” Completed-order rows with the same columns as your CSV export and email reports.
  • About tab โ€” Product ID, name, event date, front-end and edit links, and last sync time.
  • Automatic updates โ€” Sync runs when completed orders change, when orders are refunded, or when booking data is edited in the Manager or Tools.
  • Manual sync โ€” Use Sync now from Manager โ†’ Statistics at any time.

Requirements

↑ Back to top
  • Stachethemes Seat Planner and WooCommerce active.
  • A Google account with permission to create and edit spreadsheets.
  • Google OAuth credentials added to wp-config.php by your site developer (see below).
  • Enable Google Sheets Sync turned on under Seat Planner โ†’ Settings โ†’ Integrations.

Developer Setup (One-Time)

↑ Back to top

Google Sheets uses OAuth 2.0. The plugin reads credentials from wp-config.php; they are not stored in the WordPress database.

1. Google Cloud project

  1. Open Google Cloud Console and create or select a project.
  2. Enable the Google Sheets API (APIs & Services โ†’ Library).
  3. Configure the OAuth consent screen and add these scopes:
    • https://www.googleapis.com/auth/spreadsheets
    • https://www.googleapis.com/auth/userinfo.email
  4. Create an OAuth 2.0 Client ID of type Web application.

2. Authorized redirect URI

Under Authorized redirect URIs, add the exact URL WordPress uses for the OAuth callback. It must match character for character (scheme, host, path, and query string):

https://YOUR-SITE.com/wp-admin/admin.php?page=stachesepl&stachesepl_google_oauth=callback

Replace YOUR-SITE.com with your real domain. If WordPress runs in a subdirectory (e.g. /wordpress/), include that path. Use the same http vs https and www variant as your admin URL. Do not add a trailing slash after callback.

If you see Error 400: redirect_uri_mismatch when connecting, the redirect URI in Google Cloud does not match the site URL.

3. wp-config.php constants

Add these lines to wp-config.php (above the โ€œThatโ€™s all, stop editing!โ€ line):

define('STACHESEPL_GOOGLE_CLIENT_ID', 'your-client-id.apps.googleusercontent.com');
define('STACHESEPL_GOOGLE_CLIENT_SECRET', 'your-client-secret');

After saving, wait a minute for Google Cloud changes to propagate, then connect from the plugin.

Site Administrator Setup

↑ Back to top

Seat Planner โ†’ Settings โ†’ Integrations โ†’ Google Sheets Live Sync

  1. Enable Google Sheets Sync โ€” Master switch for the whole site. When off, no spreadsheets sync.
  2. Connect Google Account โ€” Sign in with the Google account that should own site-wide spreadsheets. Approve spreadsheet access when prompted.
  3. Sync new events (optional) โ€” When enabled, new event dates on auditorium products automatically get Google Sheets sync turned on for the site admin account. You can still enable or disable sync per event from the Manager.
  4. Click Save settings at the bottom of the Settings page.

If credentials are missing, the Integrations tab shows the wp-config.php snippet your developer needs. If the account is connected but spreadsheet access was not granted, disconnect and connect again, making sure to approve Google Sheets permission.

Google Sheets settings

Enable Sync for an Event

↑ Back to top
  1. Go to Seat Planner โ†’ Manager.
  2. Select an auditorium product. For dated products, open Statistics for the event date you want.
  3. Click the Google Sheets button in the toolbar.
  4. Turn on Enable sync for this event and click Save.
  5. The first sync creates a spreadsheet in the connected Google account. A link to open it appears in the modal.

Use Sync now to push the latest data immediately. Last synced shows when the sheet was last updated. Sync is rate-limited to once per minute per user and event when using Sync now; automatic sync is debounced (about 60 seconds after the last change).

Google Sheets manager modal button

For more on the Manager statistics screen, see Manager.

Spreadsheet Contents

↑ Back to top

Bookings tab

Contains one row per completed booking (one row per seat line item), plus a header row. Columns follow Settings โ†’ Report โ†’ Fields to include โ€” for example order ID, customer name, seat ID, date/time, seat price, and custom fields. Only orders with status Completed are included.

When bookings are removed (e.g. after a refund moves an order out of completed), extra rows are cleared from the sheet so it stays aligned with current data.

About tab

Summary metadata: product ID, product name, formatted event date, product URL, WordPress edit link, and last sync timestamp.

Spreadsheet title

New spreadsheets are named (Product ID) Product Name, or (Product ID) Product Name - Event Date for dated events.

When Sync Runs Automatically

↑ Back to top

After sync is enabled for an event, the plugin schedules a background sync when:

  • An order becomes completed (e.g. payment received).
  • A completed order leaves completed status.
  • An order is refunded.
  • Booking data changes from Manager or Tools (seat moves, edits, bulk actions, etc.).

Changes are debounced so rapid updates result in one sync, not many. The first sync after enabling an event runs within a few seconds.

Troubleshooting

↑ Back to top
  • โ€œGoogle Sheets is not set up on this site yetโ€ โ€” Add STACHESEPL_GOOGLE_CLIENT_ID and STACHESEPL_GOOGLE_CLIENT_SECRET to wp-config.php.
  • redirect_uri_mismatch โ€” Fix the authorized redirect URI in Google Cloud (see Developer Setup above).
  • Spreadsheet access was not granted โ€” Disconnect, reconnect, and approve Google Sheets. Confirm both scopes are on the OAuth consent screen.
  • Google authorization has expired or was revoked โ€” Disconnect and reconnect the Google account.
  • Enable Google Sheets sync under Settings โ†’ Integrations โ€” Turn on the global sync toggle (admin only).
  • Connect a Google account first โ€” Connect under Settings โ†’ Integrations before enabling sync for an event.
  • A sync is already running โ€” Wait a few seconds and try Sync now again.
  • Please wait before syncing again โ€” Manual sync is limited to once per minute per user and event.
  • Wrong or missing columns โ€” Update Settings โ†’ Report โ†’ Fields to include, then run Sync now.

Relation to CSV Export and Reports

↑ Back to top
  • Google Sheets โ€” Live spreadsheet, same columns as report CSV, updated automatically. Configure per event in Manager โ†’ Statistics.
  • CSV export โ€” One-time download from Manager โ†’ Statistics. See Export Bookings.
  • Email reports โ€” Scheduled or manual reports from Settings and Manager; same underlying booking data. See Settings โ†’ Report.

Summary

↑ Back to top
  • Developer: Google Cloud OAuth client, redirect URI, and wp-config.php constants.
  • Admin: Settings โ†’ Integrations โ€” enable sync, connect Google, optional auto-enable for new events.
  • Per event: Manager โ†’ Statistics โ†’ Google Sheets โ€” enable sync, save, open spreadsheet, or sync now.
  • Data: completed orders only; columns from Settings โ†’ Report โ†’ Fields to include.

Questions and support

↑ Back to top

Something missing from this documentation? Still have questions and need assistance?

  • If you have a question about a specific extension or theme youโ€™d like to purchase, contact us to get answers.
  • If you already purchased this product and need some assistance, get in touch with a Happiness Engineer via our support page and select this product’s name from the Product dropdown.
Use of your personal data
We and our partners process your personal data (such as browsing data, IP Addresses, cookie information, and other unique identifiers) based on your consent and/or our legitimate interest to optimize our website, marketing activities, and your user experience.