{"id":351679,"date":"2026-08-12T07:22:48","date_gmt":"2026-08-12T07:22:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/seatlayer-seating-charts\/"},"modified":"2026-08-12T07:43:48","modified_gmt":"2026-08-12T07:43:48","slug":"seatlayer-seating-charts","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/seatlayer-seating-charts\/","author":23545925,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.2.0","stable_tag":"0.2.0","tested":"7.0.3","requires":"6.3","requires_php":"7.4","requires_plugins":null,"header_name":"SeatLayer Seating Charts","header_author":"SeatLayer","header_description":"Embed interactive reserved-seating charts and sell tickets from WordPress. Buyers pick seats on your page and pay through your own Stripe or Razorpay account.","assets_banners_color":"473d3d","last_updated":"2026-08-12 07:43:48","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/seatlayer.io\/integrations\/wordpress","header_author_uri":"https:\/\/seatlayer.io","rating":0,"author_block_rating":0,"active_installs":0,"downloads":17,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.2.0":{"tag":"0.2.0","author":"navincse","date":"2026-08-12 07:43:48"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3642987,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3642987,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3642987,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3642987,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"seatlayer\/chart":{"name":"seatlayer\/chart","title":"SeatLayer seating chart"}},"tagged_versions":["0.2.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[27824,188413,275299,126872,4772],"plugin_category":[40],"plugin_contributors":[275300],"plugin_business_model":[],"class_list":["post-351679","plugin","type-plugin","status-publish","hentry","plugin_tags-event-tickets","plugin_tags-reserved-seating","plugin_tags-seat-selection","plugin_tags-seating-chart","plugin_tags-ticketing","plugin_category-calendar-and-events","plugin_contributors-navincse","plugin_committers-navincse"],"banners":{"banner":"https:\/\/ps.w.org\/seatlayer-seating-charts\/assets\/banner-772x250.png?rev=3642987","banner_2x":"https:\/\/ps.w.org\/seatlayer-seating-charts\/assets\/banner-1544x500.png?rev=3642987","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/seatlayer-seating-charts\/assets\/icon-128x128.png?rev=3642987","icon_2x":"https:\/\/ps.w.org\/seatlayer-seating-charts\/assets\/icon-256x256.png?rev=3642987","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Turn a WordPress page into a complete reserved-seating experience. Buyers can\nexplore the venue, see live availability and prices, choose exact seats, and\ncontinue to checkout without calling, emailing, or guessing where they will sit.<\/p>\n\n<h4>A better seating experience for buyers<\/h4>\n\n<ul>\n<li><strong>Interactive venue maps<\/strong> for rows, tables, booths, general-admission areas,\naccessible seating, and multiple floors.<\/li>\n<li><strong>Live availability<\/strong> that updates while buyers are viewing the event.<\/li>\n<li><strong>Clear seat details and prices<\/strong> before a buyer makes a selection.<\/li>\n<li><strong>Ticket tiers and active event offers<\/strong> shown through the SeatLayer buyer\nexperience when configured for the event.<\/li>\n<li><strong>Temporary seat holds<\/strong> during checkout, with automatic release when a buyer\ndoes not finish.<\/li>\n<li><strong>Mobile-ready controls<\/strong> with touch selection, pinch-to-zoom, responsive\nsummaries, and a layout designed for smaller screens.<\/li>\n<li><strong>Best-available assistance<\/strong> when buyers want SeatLayer to find seats\ntogether.<\/li>\n<li><strong>Email confirmation<\/strong> with the seats purchased after successful payment.<\/li>\n<\/ul>\n\n<h4>Built for WordPress organizers<\/h4>\n\n<ul>\n<li>Add the <strong>SeatLayer seating chart<\/strong> block in the Gutenberg editor.<\/li>\n<li>Use <code>[seatlayer_chart event=\"your-event\"]<\/code> in classic content, builders, or\nshortcode-compatible areas.<\/li>\n<li>Choose an event from the editor when an optional SeatLayer secret key is\nconfigured, or paste an event key without storing a secret.<\/li>\n<li>Load the SeatLayer buyer SDK only on pages that contain a chart.<\/li>\n<li>Keep payments in the organizer's connected Stripe or Razorpay account.<\/li>\n<li>Manage venue design, event pricing, offers, orders, and ticket delivery from\nthe <a href=\"https:\/\/app.seatlayer.io\/\">SeatLayer dashboard<\/a>.<\/li>\n<\/ul>\n\n<h4>Choose the checkout experience<\/h4>\n\n<p><strong>Hosted checkout \u2014 the safe default<\/strong><\/p>\n\n<p>After choosing seats, the buyer continues to the SeatLayer-hosted event page to\npay. SeatLayer completes the Order and ticket-delivery flow through the payment\naccount connected by the organizer.<\/p>\n\n<p><strong>Checkout from your WordPress page \u2014 optional<\/strong><\/p>\n\n<p>Enable <strong>Let buyers pay without leaving this site<\/strong> under <strong>Settings \u2192\nSeatLayer<\/strong>. Razorpay opens on the page. Stripe opens its secure checkout and\nreturns the buyer to the WordPress page afterward. This option requires in-page\ncheckout access and the exact WordPress origin to be registered as a SeatLayer\nembed domain; otherwise the plugin safely keeps the hosted-checkout flow.<\/p>\n\n<h4>How it works<\/h4>\n\n<ol>\n<li><a href=\"https:\/\/app.seatlayer.io\/\">Create a SeatLayer account<\/a> and design or select\nyour venue.<\/li>\n<li>Create an event, set prices and offers, and connect Stripe or Razorpay.<\/li>\n<li>Add the SeatLayer block to a WordPress page and choose the event.<\/li>\n<li>Publish the page. Buyers can select seats and purchase through the configured\nSeatLayer checkout.<\/li>\n<\/ol>\n\n<h4>Requirements<\/h4>\n\n<p>This plugin connects WordPress to an existing SeatLayer account. Venue design,\nevents, pricing, offers, and managed checkout are configured in SeatLayer; the\nplugin is not a standalone seating designer or a WooCommerce checkout extension.<\/p>\n\n<p><a href=\"https:\/\/seatlayer.io\/integrations\/wordpress\">Learn about the WordPress integration<\/a> \u00b7\n<a href=\"https:\/\/docs.seatlayer.io\/start\/choose-an-integration\/\">Choose the right SeatLayer integration<\/a><\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin is a client for SeatLayer, a hosted seating and ticketing service. It\ndoes not work standalone, and using it means your site and your visitors talk to\nSeatLayer. This section explains each external service, when it is contacted, and\nwhat data is sent.<\/p>\n\n<p><strong>SeatLayer CDN (<code>cdn.seatlayer.io<\/code>)<\/strong> \u2014 loads the seating-chart renderer.<\/p>\n\n<ul>\n<li>When: only on pages that actually contain a chart. The browser loads\n  https:\/\/cdn.seatlayer.io\/seatlayer-js@0\/seatlayer.js.<\/li>\n<li>Sent: nothing the plugin adds. As with any script request, the browser sends\nits own IP address, user agent, and referring page.<\/li>\n<\/ul>\n\n<p><strong>SeatLayer API (<code>api.seatlayer.io<\/code>)<\/strong> \u2014 provides layouts, live\navailability, seat holds, and payment sessions.<\/p>\n\n<ul>\n<li>When (visitor): as soon as a chart renders, to fetch the seating layout and\nlive availability; then when a visitor selects seats, to hold them; then, if\nthey buy, to start a payment.<\/li>\n<li>Sent (visitor): the event key, the seats selected, and \u2014 at the payment step\nonly \u2014 the buyer's email address and, if given, their name. A payment is\nstarted with the hold identifier alone: the plugin never sends an amount, and\nthe SeatLayer server recomputes the total from its own records.<\/li>\n<li>Also sent for optional in-page checkout: the chart page's public URL, used only\nwhen it matches a pre-declared embed domain so Stripe can return the buyer.<\/li>\n<li>When (administrator): only if you save a secret key, and only inside the block\neditor, to list your events in a dropdown. Your server makes this call, not the\nbrowser, and the key is never sent to a browser.<\/li>\n<li>Sent (administrator): your secret key. No visitor data.<\/li>\n<\/ul>\n\n<p><strong><a href=\"https:\/\/app.seatlayer.io\/\">SeatLayer hosted buyer page<\/a><\/strong> \u2014 completes the\ndefault hosted-checkout journey.<\/p>\n\n<ul>\n<li>When: only if a buyer chooses to check out. Their browser is redirected to\n  https:\/\/app.seatlayer.io\/e\/EVENT?hold=HOLD_ID.<\/li>\n<li>Sent: the event key and the hold identifier, in the URL. No amount, and nothing\nabout the buyer.<\/li>\n<\/ul>\n\n<p><strong>Stripe or Razorpay<\/strong> \u2014 processes payment through the organizer's connected\ngateway account.<\/p>\n\n<ul>\n<li>When: after a buyer selects seats and presses pay. Razorpay opens its payment\nwindow on the page; Stripe redirects to its secure checkout.<\/li>\n<li>Sent by SeatLayer to the gateway: the authoritative amount, currency, and\nbuyer email needed to process payment.<\/li>\n<li>Privacy: <a href=\"https:\/\/stripe.com\/privacy\">Stripe Privacy Policy<\/a> \u00b7\n<a href=\"https:\/\/razorpay.com\/privacy\">Razorpay Privacy Policy<\/a><\/li>\n<\/ul>\n\n<p>Card details are handled by Stripe or Razorpay on the account <strong>you<\/strong> connected.\nThey never pass through this plugin, your WordPress site, or your database.<\/p>\n\n<p><a href=\"https:\/\/seatlayer.io\/terms\">SeatLayer Terms of Service<\/a> \u00b7\n<a href=\"https:\/\/seatlayer.io\/privacy\">SeatLayer Privacy Policy<\/a><\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin.<\/li>\n<li>Create your venue, chart, and event in the <a href=\"https:\/\/app.seatlayer.io\/\">SeatLayer dashboard<\/a>.<\/li>\n<li>Connect Stripe or Razorpay in the SeatLayer dashboard under Payments.<\/li>\n<li>Add the <strong>SeatLayer seating chart<\/strong> block to a page and choose your event.<\/li>\n<\/ol>\n\n<p>Optionally, add a SeatLayer secret key under <strong>Settings \u2192 SeatLayer<\/strong> so the block\neditor can list your events in a dropdown instead of you pasting event keys. The\nchart itself works without a key.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20a%20secret%20key%3F\"><h3>Do I need a secret key?<\/h3><\/dt>\n<dd><p>No. The seating chart works with just the event key, which is not a secret. A key\nonly makes the editor nicer, by listing your events in a dropdown.<\/p><\/dd>\n<dt id=\"where%20is%20my%20secret%20key%20stored%3F\"><h3>Where is my secret key stored?<\/h3><\/dt>\n<dd><p>In your WordPress database, like every other plugin setting. It can create and\nmodify events, so anyone with database or administrator access to this site can\nread it. If that is not acceptable for your setup, leave it blank and type event\nkeys by hand \u2014 nothing else needs it.<\/p><\/dd>\n<dt id=\"does%20this%20work%20with%20woocommerce%3F\"><h3>Does this work with WooCommerce?<\/h3><\/dt>\n<dd><p>Not yet. Today buyers pay through SeatLayer's checkout using your own Stripe or\nRazorpay account. A WooCommerce integration \u2014 seats as cart line items, paid\nthrough your existing Woo gateway \u2014 is planned separately.<\/p><\/dd>\n<dt id=\"can%20two%20people%20buy%20the%20same%20seat%3F\"><h3>Can two people buy the same seat?<\/h3><\/dt>\n<dd><p>No. A seat is held on SeatLayer's servers the moment a buyer selects it, and only\none hold can exist per seat. If they don't pay in time, the hold expires and the\nseat returns to sale.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20a%20payment%20succeeds%20but%20the%20seat%20is%20taken%3F\"><h3>What happens if a payment succeeds but the seat is taken?<\/h3><\/dt>\n<dd><p>The buyer is refunded automatically. This is rare \u2014 it needs the hold to expire\nduring payment \u2014 and the order is flagged in your SeatLayer dashboard so you can\ncheck it.<\/p><\/dd>\n<dt id=\"does%20it%20slow%20my%20site%20down%3F\"><h3>Does it slow my site down?<\/h3><\/dt>\n<dd><p>The chart's code only loads on pages that actually contain a chart.<\/p><\/dd>\n<dt id=\"can%20buyers%20pay%20without%20leaving%20my%20site%3F\"><h3>Can buyers pay without leaving my site?<\/h3><\/dt>\n<dd><p>It is optional and off by default. Enable <strong>Let buyers pay without leaving this\nsite<\/strong> under <strong>Settings \u2192 SeatLayer<\/strong>. Razorpay opens on the page; Stripe opens\nits secure checkout and returns the buyer afterward. Your SeatLayer account must\nhave in-page checkout enabled, and the exact WordPress origin must be registered\nas an embed domain. Otherwise buyers safely continue through hosted checkout.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>New: an optional Checkout setting that lets buyers pay on your page instead of\nbeing sent to SeatLayer. Off by default, and it falls back to the redirect on\nits own if your account does not have in-page checkout.<\/li>\n<li>With that setting on, a buyer paying by card now returns to the page they\nbought from instead of finishing on SeatLayer. Declare your site under embed\ndomains in your SeatLayer dashboard to switch it on; without it the buyer still\npays and still gets their tickets, just on SeatLayer's page.<\/li>\n<li>Deleting the plugin now removes its settings, including any saved secret key.<\/li>\n<li>The two messages a visitor can see if a chart fails to load are translatable.<\/li>\n<li>Documented every SeatLayer service the plugin talks to, and what is sent.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>First release: SeatLayer block and <code>[seatlayer_chart]<\/code> shortcode. Buyers are\nhanded to SeatLayer's buyer page to pay through your own Stripe or Razorpay\naccount.<\/li>\n<\/ul>","raw_excerpt":"Interactive reserved-seating charts on WordPress. Visitors pick their seats and pay through your own Stripe or Razorpay account.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/351679","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=351679"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/navincse"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=351679"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=351679"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=351679"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=351679"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=351679"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=351679"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}