| 开发者 | macvej |
|---|---|
| 更新时间 | 2026年9月18日 00:25 |
| PHP版本: | 8.1 及以上 |
| WordPress版本: | 7.1 |
| 版权: | GPLv2 or later |
| 版权网址: | 版权信息 |
/table-check-in/, a full-screen scanner page built into
the plugin, restricted to a "Scanner" role that can check guests in and nothing else. The
scanner has a flashlight toggle and a type-in field for a desk without a camera.
The same check-in also works over a REST API, so a third-party scanner app - a phone app, a
handheld reader, whatever the door already uses - can call it too. The API is off by default;
a shop owner turns it on under Seats & Tables > Settings > Scanner / API, and a scanner app
authenticates with a WordPress Application Password over HTTPS, the same mechanism WordPress
ships for any external app that needs to act as a user.
Compatibility
.pot file.inc/product-type/js/lib/, as published on npm (fabric/dist/index.min.js,
https://www.npmjs.com/package/fabric/v/7.4.0). Unminified source (the project tags this
release v740): https://github.com/fabricjs/fabric.js/tree/v740
Also bundles endroid/qr-code 5.1.0 (MIT) for generating check-in QR codes, together with its
dependencies bacon/bacon-qr-code 3.0.1 (https://github.com/Bacon/BaconQrCode) and dasprid/enum
1.0.6 (https://github.com/DASPRiD/Enum), both BSD-2-Clause, installed with Composer,
unmodified, in inc/qr/lib/qrcodegen/. The MIT licence applies to endroid/qr-code itself only.
Source: https://github.com/endroid/qr-code
And jsQR 1.4.0 (Apache-2.0) for decoding QR codes in the check-in scanner, in
inc/scanner/js/jsqr.js. Source: https://github.com/cozmo/jsQR
No other minified or compiled code is shipped, and no assets are loaded from a CDN.
External services
None. This 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.
/wp-content/plugins/ and activate it, or install it from
Plugins > Add New.STBK_REMOVE_ALL_DATA is defined as true in wp-config.php before deleting, which
also drops the database tables and the generated QR images. Deactivating it removes nothing.Yes. The plugin declares HPOS compatibility and reads and writes orders only through the WooCommerce order API, so it works with both order storage modes.
Yes, and with the classic shortcode cart and checkout.
Yes. Every Booking venue product is its own floor plan with its own timeslots, prices and settings, and one order can hold tables at several venues.
The site's timezone, as set under Settings > General. Timeslots, booking dates, the "booking notice" cut-off and the check-in window all use it.
The hold expires after the configured number of minutes (15 by default) and the table becomes bookable again. If the customer returns 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.
The booking is released, its QR code is cancelled and the table is immediately bookable again. Trashing or deleting an order does the same.
Its tables are released after the window set in 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.
No. A unique index on unit, date and timeslot makes that impossible at the database level.
No. Expired holds are treated as free the moment they expire; a five-minute WP-Cron event only
tidies the rows up. The unpaid-order release also runs on that event, so on a site where
WP-Cron is disabled it runs whenever the system cron calls wp-cron.php.
Yes. Seats & Tables > Bookings, pick the venue and the date, then press "+ Block" in the empty cell for that sitting. The table disappears from the floor plan for that sitting until the block is released.
Open /table-check-in/ on a phone or tablet logged in as a user with the "Scanner" role and
point the camera at the guest's QR code. A valid, unused code within its check-in window is
admitted and marked used; a cancelled, already-used or out-of-window code is refused, with the
reason shown on screen.
Check guests in and nothing else. A Scanner user cannot see orders, products or the dashboard. Shop managers and administrators can scan as well.
Yes, once a shop owner turns 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 page does. The settings page
documents every response.
An Application Password is required; 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 one. The
built-in scanner page is unaffected either way - it uses the staff member's own login session.
Staff can resend it from the Bookings screen. The code is also shown on the WooCommerce thank-you page and in the order details under My Account, so a signed-in customer can pull it up there without waiting on an email at all.
Its settings, the Scanner role and its scheduled event. Bookings, floor plans and QR data stay
unless STBK_REMOVE_ALL_DATA is defined as true in wp-config.php first.
sanitize_hex_color(); everything else is dropped.
The tab's own save path stores through the same callback.absint() and (int) answer 1 for an
array instead of refusing it, so a crafted request could turn a product id, a guest count, an
attachment id or a hold duration into a valid 1. The previous round fixed this inside the floor
plan payload; it now covers every request handler in the plugin.esc_url() rather than
esc_url_raw(), which is a sanitizer for storage and redirects rather than an escaper for
output. The link that reaches the inbox is byte for byte the same.absint()
answers 1 for one of those rather than refusing it - which on the id field pointed a row at
whichever unit happened to be id 1.?add-to-cart=, a draft or private venue is bookable only by users who can edit it, and a
crafted request can no longer hold several tables at once under one party size.stbk literally, as the wordpress.org prefix scanner requires.<div> more than they
opened, which could push the admin footer out of place.#abc) silently produced no
QR image at all./table-check-in/ scanner page and a "Scanner" role for door staff.STBK_REMOVE_ALL_DATA is defined as true before deleting.