Setup Guide

Documentation

Install Seat Planner, create your first auditorium product, and run events with QR tickets and the Manager.

Quick Start WooCommerce Guide Setup & Operations

Installation

Requirements

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

  • WordPress 7
  • WooCommerce 10.8 or newer
  • PHP 8.2 or newer

Install from WooCommerce.com

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 Stachethemes Seat Planner.
  3. Follow the instructions on the screen; the product will be added to your store automatically.
  4. In Plugins, activate Stachethemes Seat Planner.
Install on store button

More information: WooCommerce.com subscriptions.

Manual installation (ZIP)

If you received a ZIP from WooCommerce.com or your agency:

  1. Go to Plugins → Add New → Upload Plugin.
  2. Choose the plugin ZIP and click Install Now, then Activate.
  3. Ensure WooCommerce is active.

After installation

Continue with the Quick Start checklist to create your first auditorium product and test a booking.

Quick Start

Use this checklist to go from a fresh install to a test booking. Each step links to the detailed section below.

Setup checklist

  1. Install and activate the plugin (and WooCommerce if needed).
  2. Open Seat Planner → Overview to confirm the dashboard loads.
  3. Create an Auditorium product and build a simple seat layout in the Seat Planner editor.
  4. Configure the General tab (optional min/max seats, tax).
  5. Add dates if the product is for scheduled events; skip for a single undated event.
  6. Review Settings: set Seat reservation time, enable QR/PDF if you want tickets, and save.
  7. Publish the product and open it on the front end (or use the live demo pattern on your site).
  8. Select a seat, add to cart, and complete a test checkout.
  9. Confirm the order in WooCommerce and, if enabled, the PDF/QR in the order email.
  10. Optional: scan the ticket in Seat Planner → Scanner or the Android app.

Lite vs full version

The Lite plugin on WordPress.org is free and suitable for trying the seat selector. The full version on WooCommerce.com adds dates and showtimes, PDF tickets, Best Available, script embed, unlimited layout size, and more. Get Pro from WooCommerce.com, or see the features page for a full list.

What to read next

Overview

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

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

Overview

Stats

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

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

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

Summary

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

General (Auditorium Product)

The General tab appears in the product data panel for every Auditorium Product. Use it for purchase limits, tax, stock behavior, and rules that apply to the whole product before customers select individual seats.

Where to Find It

  1. Edit a product of type Auditorium Product.
  2. In Product data, open the General tab (first Seat Planner tab).
Auditorium product data tabs including General

Options

  • SKU - Standard WooCommerce SKU when SKU is enabled in your store.
  • Out of stock - Marks the entire auditorium product as not purchasable on the front end, regardless of individual seat availability.
  • Stop date - Optional date/time after which the product can no longer be sold (product-wide; separate from per-event cutoffs on the Dates tab).
  • Minimum seats per purchase - Customers must select at least this many seats in one order. Leave empty or 0 for no minimum.
  • Maximum seats per purchase - Limits how many seats one customer can buy in a single order. Leave empty or 0 for no maximum.
  • Tax status / Tax class - When WooCommerce taxes are enabled, configure how seat tickets are taxed (same as other WooCommerce products).
  • Prevent single empty seats - Optional grouping rules so customers cannot leave an isolated empty seat. See Prevent single empty seats below.

Prevent single empty seats

Many theaters block bookings that would leave a single empty seat at a row edge or between booked seats. Enable this on the General tab, then choose a Rule type that matches your venue policy:

  • Strict - Blocks any selection that would leave one empty seat at a row edge or between booked seats. The most restrictive option.
  • Lenient near sold seats - Same as Strict, but allows one empty seat next to sold or unavailable seats. Permits choosing either seat from a remaining pair before a sold block, and still blocks aisle-side orphan seats when another same-size selection would leave a single empty seat next to sold inventory.
  • Middle gaps only - Only blocks a single empty seat trapped between two booked or selected seats. Orphans at row edges or next to aisles are allowed.

When the rule is enabled, you can also fine-tune Layout detection (default values work for most seat plans):

  • Row vertical tolerance - How much vertical misalignment is allowed for seats to be considered in the same row (pixels). Use a small value for perfectly aligned rows; increase slightly for uneven layouts.
  • Seat group threshold - Multiplier for splitting a row into separate seat groups. Lower values (0.5–1.0) keep seats grouped more strictly; higher values (2.0–5.0) allow larger gaps before a new group starts. The single-seat rule applies only within each group. Default 1.0 works for most layouts.

See the tutorial video on the home page for a walkthrough of complex layouts.

Summary

  • Use General for SKU, out-of-stock, stop date, min/max seats per order, tax, and prevent-single-empty-seat rules (with rule type and layout detection).
  • Per-seat pricing and layout are configured in the Seat Planner editor; event schedules on Dates.

Creating an Auditorium Product

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

Steps

  1. Go to Products → Add New. Enter Title, Description, and a Product image.
  2. In Product data, choose Auditorium Product from the product type dropdown.
  3. Review the General tab (min/max seats, tax, etc.) if needed.
  4. Open the Seat Planner tab and click Open Seat Planner.
  5. Place a Screen, then add seats: drag Seat objects, use Auto-fill for grids, or Table Templates for round/square/rectangular tables. Set each seat’s Label, unique Seat ID, and Price. Use Auto Increment to number many seats quickly.
  6. Click the back arrow to return to the product page and Publish.
Product edit with Auditorium type and Seat Planner tab Empty Seat Planner editor

For multiple seating layouts (e.g. Stalls and Balcony), Table Templates, Map Regions, seat statuses, groups, desirability, CSV import/export, and transform tools, see Seat Planner Editor.

Next steps

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

Seat Planner Editor

After you create an auditorium product, open Seat Planner → Open Seat Planner for the full visual editor. This section covers multiple layouts, Table Templates, Map Regions, advanced layout tools, seat statuses, and import/export.

Multiple seating layouts

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

  • Screen - Marks the screen or stage direction.
  • Seat - Purchasable seat; requires a unique Seat ID.
  • Object - Static decoration (table bodies, walls, etc.).
  • Text - Static labels (section names, row letters).
  • Region - Named jump target for the front seat map. Visible only while Map Regions mode is on; customers never see the rectangle.
Seat Planner editor with seats on canvas

Table Templates

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.

Map Regions

Map Regions let you name areas of a large seat map (for example Orchestra, Balcony, Left aisle) so customers can jump there without panning the whole canvas. You draw rectangles in the editor; those rectangles stay invisible on the storefront. Customers see chips above the zoom controls instead.

Regions belong to the current layout. If the product has multiple seating layouts, add regions on each layout that needs them.

How to place a region

  1. In the editor toolbar, click Region to enter region mode. Existing regions appear on the canvas only while this mode is on.
  2. Drag Place Region (shown under the mode button) onto the canvas.
  3. Move and resize the rectangle so it covers that section of seats. The default size is large enough to start; use the handles or the Size fields.
  4. Set the Label in the properties panel. This is the name customers see on the jump chip (for example Balcony). The rectangle itself is never shown to visitors.
  5. Optionally change Color so you can tell regions apart in the editor. Color is editor-only.
  6. Place more regions the same way. Region mode stays on until you click Region again or press Esc.
Seat Planner editor in Region mode with Front, Center, and Rear regions

Editing regions

Enter Region mode first. Regions appear on the canvas only in this mode. Seats and other objects stay visible, but the marquee selects only regions.

  • Label - Chip name on the front seat map. If you leave it empty, the storefront falls back to “Region” plus the object ID.
  • Color - Editor fill and border so you can distinguish overlapping areas.
  • Move / Size / Z-index - Position, dimensions, and stack order in the editor.
  • Copy and paste - Pasting a region turns region mode on so the copy is visible.
  • Delete - Select the region and delete it like any other object.

How customers use regions

On the storefront, if the active layout has at least one region, chips appear above the zoom controls:

  • All - Fits the whole layout in view (the default).
  • Named chips - One per region, using the labels you set. Clicking a chip pans and zooms to that rectangle.
  • While a region is focused, zoom in/out stays centered on that region.
  • Switching layout clears region focus. If a layout has no regions, the chips are hidden.
Front seat map with All, Front, Center, and Rear region chips above the zoom controls

Customers still select seats as usual. Regions do not reserve seats, change prices, or appear on tickets.

Seat properties

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: Available, Unavailable, Sold out, Purchasable 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

  • Table Templates - Place round, square, or rectangular tables with 4–12 seats in one click (see Table Templates).
  • Map Regions - Enter region mode, then place named rectangles customers can jump to on the front seat map (see Map Regions).
  • Auto Increment - Pattern builder for labels or seat IDs (e.g. 1, 2, 3…).
  • 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)

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). Region objects are included (type region). 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

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

  • Use the editor for one or more seating layouts, per-seat price/status/groups, and desirability for Best available.
  • Use Table Templates for restaurant-style layouts; customers still book seats one by one.
  • Use Map Regions so customers can jump to named areas on large maps; the rectangles stay invisible on the storefront.
  • Import/export CSV for backups (including multi-layout files); use General and Dates for product-wide rules.

Adding Dates to a Product

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. You can also choose how the date picker looks on the storefront (calendar or list). If you leave dates empty, the product is treated as a single "no-dates" event.

Where to Add Dates

  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", choose the date picker layout, and add date/time slots.
Dates tab

Stop Sales Before the Event

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.

Date picker layout

Below the cutoff settings, Date picker layout controls how customers choose a date on the storefront. This is a per-product setting; it does not change how you add dates in admin.

  • Calendar (default) - A month calendar. Best when most days have showtimes, or when customers expect to browse by month.
  • List - A list of available dates only (grouped by month when dates span more than one month). Best for sparse schedules, such as once a month or a handful of shows.
Dates tab: Date picker layout with Calendar and List

The time picker is the same in both layouts: after the customer picks a date, they choose one of the times you added for that day.

Storefront date picker: Calendar layout on the left, List layout on the right

Left: Calendar. Right: List. Same date and time selected in both.

Show adjacent months in date picker in Settings → General applies only to Calendar. List never shows empty days.

The product-page button, the Select seat shortcode, the Elementor Select Seat Button, and script embed all use this product setting automatically. You do not configure the layout again on those embeds.

Manage Dates and Times

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

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

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.
  • The date step uses the layout you chose: a Calendar, or a List titled Available dates (only dates that have showtimes).
  • 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.
Calendar date and time picker on front-end

Summary

  • Open Product data → Dates.
  • Optionally set Stop sales before the event (days, hours, minutes) so sales are blocked shortly before each event.
  • Choose Date picker layout: Calendar for dense schedules, List for a few dates.
  • 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

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

  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

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

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

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

  • Add discounts under Product data → Discounts.
  • Set a unique name, type (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

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

  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

  • 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)

  • 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

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

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

  • 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

  • Add and manage fields under Product data → Custom Fields. Use unique labels and drag to reorder.
  • Use Text, Textarea, Checkbox, Select, or Number for customer input; optionally set Required, Visible, 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

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

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

What You See

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

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 bookings or orphan taken seats if the same seat still appears wrong after release.

Summary

  • 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.

Settings

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

Seat Planner → Settings in the admin sidebar.

Settings general tab

General

  • 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. Applies only when the product uses the Calendar layout.
  • 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

  • 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

  • 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.

To change ticket layout, branding, or placeholders (theme overrides and filters), see PDF Ticket Templates.

Colors

  • 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

  • Enable report - Email when an event date has passed or its cut-off time has passed.
  • 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

The Integrations tab includes the Android scanner app, script embed, and Google Sheets Live Sync.

Google Sheets Live Sync

  • Enable Google Sheets Sync — Master switch for live spreadsheet sync across the site.
  • Connect Google Account — OAuth sign-in for the site admin Google account that owns spreadsheets.
  • Sync new events — Optionally auto-enable sync when new event dates are added to products.

Per-event setup (enable sync, open spreadsheet, sync now) is in Manager → Statistics. Full setup steps and Google Cloud configuration: Google Sheets Live Sync.

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

  • 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.
  • PDF layout customization: PDF Ticket Templates.
  • Embed setup: Script Embed.

Script Embed

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

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

  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)

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

  • 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

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

  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

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

  • Filter by layout - For products with multiple seating layouts, narrow the map to one section or show All layouts with seat counts per layout.
  • 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

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

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.
  • Send report - Manually email the report for the selected product and date (uses the recipient, fields, CSV, and seat map options from Settings).
  • Google Sheets - Enable live sync to a Google spreadsheet for this event. Rows update automatically when completed orders change; columns follow Settings → Report → Fields to include. See Google Sheets Live Sync.
  • Export - Download a one-time CSV of completed bookings. See Export Bookings.

Manager statistics adds dashboards, filters, and exports for ongoing operations. For live spreadsheets, see Google Sheets Live Sync.

Summary

  • 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.

Export Bookings

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

  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

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

  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

  • 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.
  • For live spreadsheets that update automatically, see Google Sheets Live Sync.

Scanner

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

Seat Planner → Scanner. Also available from Overview → Ticket Scanner.

Scanner page

How to scan

  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

  • 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.

To test that an order’s QR codes will validate without checking guests in, use Tools → QR Verify.

Requirements

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

Summary

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

Tools

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

Seat Planner → Tools in the admin sidebar. You can also open it from the Overview quick action "Tools".

Tools page

Booking Integrity

Runs checks across your auditorium products to find:

  • Double booking - The same seat (and date, for dated products) appearing in more than one order.
  • Ghost booking - A seat that still has an order but appears free on the front end (taken-seat meta missing). You can Mark as Taken from the results to restore the meta.
  • 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:
    • No order found - Stale taken-seat meta with no matching order anywhere. Repair releases the seat so it becomes available again.
    • Order found, not indexed - An order does contain the seat (often when one order mixes multiple auditorium products), but the order-level index meta is out of sync. Repair resyncs that index so lookups work again.

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

Enter a WooCommerce order ID that contains at least one auditorium product, then click Preview PDF. The ticket PDF opens in a new tab with real seat, date, and QR data for that order. Use this to verify layout after enabling attachments or after customizing templates.

For theme overrides, placeholders, and developer filters, see PDF Ticket Templates.

QR Verify

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

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.

Summary

  • Tools: Booking Integrity (double booking, ghost booking, and orphan taken seat; optional repair for ghost and orphan issues), PDF Preview (see PDF Ticket Templates), QR Verify (dry-run QR validation per order), and Edit Order (edit seat, date, discount, custom fields on existing order items).

PDF Ticket Templates

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

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

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)

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

Plugin default Theme override filename
includes/pdf/templates/pdf-body.php stachesepl-pdf-body.php
includes/pdf/templates/pdf-loop.php stachesepl-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

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

Body placeholders

Placeholder Description
{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)

Placeholder Description
{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

<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

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

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

  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

  • 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

  • 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

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

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

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 span, div, 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: available, unavailable, sold-out, on-site. Default: available,on-site. Shorthand: s.
  • class - Extra CSS class(es) on the wrapper. Shorthand: c.
  • wrapper - HTML wrapper: span, div, or p. Default: span. Shorthand: w.

Examples:

[stachesepl_count product_id=123]

[stachesepl_count p=123]

[stachesepl_count product_id=123,456]

[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

  • 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 date, status, class, and wrapper.
  • Page builders: Elementor widgets wrap the same behavior.

Elementor

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

Requirements

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

Select Seat Button

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

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

  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

  • 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)

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

  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

  • 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

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

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

  • 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

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). See Settings for how to choose those columns.

What You Get

  • 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

  • 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)

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

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

  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
Google Sheets manager modal

For more on the Manager statistics screen, see Manager.

Spreadsheet Contents

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

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

  • “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

  • 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

  • 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 & Support

Missing information or need further help?

If you've already purchased this product, open a ticket on the WooCommerce.com Support page and select this product from the "Product" dropdown.

For general questions and assistance, you can also contact us at Stachethemes Support.

Get Started with Stachethemes Seat Planner

Add interactive seat selection to your WooCommerce store in minutes.