Linux 软件免费装
Banner图

Seat & Table Booking for WooCommerce

开发者 macvej
更新时间 2026年10月5日 05:22
PHP版本: 8.0 及以上
WordPress版本: 7.1
版权: GPLv2 or later
版权网址: 版权信息

标签

woocommerce booking floor plan restaurant reservations table booking seating chart

下载

1.6.2 1.8.1 1.9.1

详情介绍:

Seat & Table Booking adds one product type to WooCommerce: Booking venue. One product is one floor plan. Customers pick a date, a timeslot and a table straight off a picture of your room, pay through your normal checkout, and get a QR code that staff scan at the door from a phone browser. Everything runs on your own site. There is no booking service to sign up for, no fee per reservation, and no account with anyone else. WooCommerce handles the payment, the order and the emails - there is no second checkout and no second dashboard. Built for restaurants, cafés, bars, cinemas, theatres, concert venues, wedding halls, co-working spaces and anyone who sells a place in a room with a layout. Who it is for Draw the room No double bookings Check-in at the door Running it from wp-admin What your customers get Customer files stay private QR code images are not reachable at a guessable public URL. They live in an uploads folder named from a site secret, closed to direct access, and are served only through a link signed for that exact code, to shop staff, or to the customer who placed the order. Reset on the Bookings screen changes the signature too, so it revokes a leaked link. Nothing to configure. Privacy The plugin keeps no customer details of its own. A booking records the venue, table, date, sitting, party size and the WooCommerce order it belongs to; the guest's name and email stay on the order, where WooCommerce's own personal data export and erasure cover them. External services None. The plugin makes no outbound requests, sends no analytics or telemetry, and needs no account anywhere. QR codes are generated on your own server by the bundled library, and every script and stylesheet is served from your own site. Nothing to maintain A booking is free again the moment its hold expires; nothing waits for a background job. A five-minute WP-Cron event tidies expired holds away and releases unpaid orders. Works with Requirements

安装:

1. Install and activate In wp-admin go to Plugins > Add New > Upload Plugin, choose the zip and click Install Now, or upload the unzipped folder to /wp-content/plugins/ over FTP. Activate from the Plugins screen with WooCommerce already active. Activation creates the plugin's database tables and refreshes permalinks, so the scanner URL works straight away. 2. Create a venue Products > Add New, then pick Booking venue from the Product data dropdown - the same dropdown that holds Simple and Variable. 3. Draw the floor plan On the Floor plan tab, upload a picture of the room and draw the tables or seats on it. Give each one a label, a price and a capacity. 4. Set the booking times On the Booking times tab, add the weekly timeslots and any closed dates. Publish, and customers can book from the product page. 5. Give door staff access Edit the user under Users and set their role to Scanner. They can then open /table-check-in/ on a phone and check guests in, and see nothing else in wp-admin. Administrators and Shop Managers already have access. Settings at a glance Settings live under Seats & Tables > Settings in three tabs. The defaults work; only change what you need.

屏幕截图:

  • The same room in the editor: lay out rows with the row tool, for a cinema or a theatre.
  • Tables on a picture of your room, and the customer picks the one they want.
  • Behind the scenes: drag the tables onto the floor plan and set what each one seats.
  • A day view of every booking, with staff blocks per sitting.
  • Appearance settings: colours and labels for the picker, without touching CSS.

升级注意事项:

1.9.1 Bookings-screen nonces (block, release, check-in, reset, resend) are now tied to the row they act on, and a QR preview or check-in email degrades gracefully instead of failing outright if its link cannot be signed. Recommended for everyone. 1.9.0 QR images now live in private storage and are served only through signed links. Images in emails sent before this update stop loading, but the codes still scan, and staff can resend from the Bookings screen. Recommended for everyone.

常见问题:

Does it need WooCommerce?

Yes. The plugin adds a WooCommerce product type and will not activate without WooCommerce active.

Are there any per-booking fees?

No. There is no external service and nothing to sign up for. You sell through your own WooCommerce checkout, and what you charge is what you keep.

Can one table be booked twice in the same timeslot?

No. Adding a table to the cart creates a short-lived hold on that exact table, date and timeslot, enforced by a unique index in the database, so the second of two racing customers is told the table has just gone. Holds that are never paid for expire on their own.

Which timezone are bookings in?

The site's timezone, as set under Settings > General. Timeslots, booking dates, the booking notice and the check-in window all use it.

What happens if a customer abandons the cart?

The hold expires after the configured number of minutes (15 by default) and the table is bookable again. If the customer comes back to a cart with an expired hold, the line is removed and they are told why. Removing a line and pressing "Undo" takes the hold again if the table is still free.

What happens to an order that is never paid for?

Its tables are released after the window set under Seats & Tables > Settings (60 minutes by default), the order is cancelled and a note is added to it. Orders on hold awaiting a bank transfer are never released automatically.

When are the check-in codes issued?

When the payment goes through, and when you mark an order Completed by hand. Processing on its own is not enough, because cash on delivery sets that status before anyone has paid. If your shop takes bank transfers and you set orders to Processing yourself once the money lands, add this to your theme's functions.php to issue the codes at that point too: add_filter( 'stbk_issue_codes_on_processing', '__return_true' ); Do not use it on a shop that also offers cash on delivery: those orders reach Processing unpaid, and the plugin cannot tell the two apart afterwards.

Does it depend on WP-Cron?

No. Expired holds are treated as free the moment they expire; the five-minute WP-Cron event only tidies the rows up. The unpaid-order release runs on that event too, so on a site where WP-Cron is disabled it runs whenever the system cron calls wp-cron.php.

Can staff hold a table back for a walk-in?

Yes. Open Seats & Tables > Bookings, pick the venue and the date, and press "+ Block" in the empty cell for that sitting. The table disappears from the floor plan for that sitting until the block is released.

Do door staff have to install an app?

No. The scanner is a web page that uses the phone camera. It needs a browser and HTTPS, which is what the camera API requires.

Who is allowed to check guests in?

Users with the Scanner role, and users with the manage_woocommerce capability, which covers Administrators and Shop Managers. A Scanner user cannot see orders, products or the dashboard.

What does the scanner refuse?

A cancelled code, a code already used, and a code scanned outside its check-in window. The reason is shown on screen.

Can I use my own scanner app instead?

Yes, once you turn on Enable API under Seats & Tables > Settings > Scanner / API - it is off by default. The app authenticates with a WordPress Application Password and calls stbk/v1/scanner/checkin/{id} the same way the built-in scanner does. The settings page documents every response. A real account password is not accepted, and the site must be on HTTPS, because that is what WordPress itself requires before it will accept an Application Password. The built-in scanner is unaffected either way; it uses the staff member's own login.

What if a guest loses the email with the QR code?

Staff can resend it from the Bookings screen. The code is also on the thank-you page and in the order details under My Account, so a signed-in customer can pull it up there.

My site is behind Cloudflare or a reverse proxy. Do the rate limits still work?

The add-to-cart and scanner-login limits count requests per visitor IP, taken from REMOTE_ADDR only. Forwarded headers are ignored, because any caller can forge them. Behind a proxy, configure the web server to put the real client address into REMOTE_ADDR (Apache mod_remoteip, nginx real_ip, or Cloudflare's own instructions), trusting only the proxy's addresses. Otherwise all visitors share one limit. If the server cannot be changed, the stbk_client_ip filter can return the verified address instead.

Does it work with HPOS and the block checkout?

Yes. The plugin declares compatibility with WooCommerce High-Performance Order Storage and reads and writes orders only through the WooCommerce order API. It works with the Cart and Checkout blocks and with the classic shortcode cart and checkout.

What happens to my data if I delete the plugin?

Settings, the Scanner role and the scheduled event are removed. Bookings, floor plans and QR data are kept, so removing the plugin to test a conflict cannot wipe your reservations. If you do want all of it gone, add this to wp-config.php before you delete the plugin: define( 'STBK_REMOVE_ALL_DATA', true ); That drops the plugin's database tables and deletes the generated QR images. It cannot be undone. Take a backup first.

Does deactivating remove anything?

No. Settings and bookings are left alone, and reactivating picks up where you left off.

更新日志:

The most recent releases are below. The full history is in changelog.txt in the plugin folder. 1.9.1 1.9.0