{"id":399473,"date":"2026-11-05T19:14:01","date_gmt":"2026-11-05T19:14:01","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/andreadesign-table-booking\/"},"modified":"2026-11-05T19:35:39","modified_gmt":"2026-11-05T19:35:39","slug":"andreadesign-table-booking","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/andreadesign-table-booking\/","author":13767450,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.5","stable_tag":"1.2.5","tested":"7.1.4","requires":"6.4","requires_php":"7.4","requires_plugins":null,"header_name":"AndreaDesign Table Booking","header_author":"Andrea Salardi","header_description":"Restaurant reservation requests, table availability, schedules and a focused booking dashboard.","assets_banners_color":"","last_updated":"2026-11-05 19:35:39","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/andreadesign.it\/servizi\/plugin-wordpress","header_author_uri":"https:\/\/andreadesign.it\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":140,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.4":{"tag":"1.2.4","author":"saland","date":"2026-11-05 19:13:36","revision":3786610},"1.2.5":{"tag":"1.2.5","author":"saland","date":"2026-11-05 19:35:39","revision":3786651}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3786651,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3786651,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.4","1.2.5"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3786651,"resolution":"1","location":"assets","locale":"","width":969,"height":1110},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3786651,"resolution":"2","location":"assets","locale":"","width":1600,"height":532},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3786651,"resolution":"3","location":"assets","locale":"","width":1600,"height":701},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3786651,"resolution":"4","location":"assets","locale":"","width":1600,"height":855},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3786651,"resolution":"5","location":"assets","locale":"","width":1600,"height":687}},"screenshots":{"1":"The booking form that guests see on the page where you place the shortcode.","2":"Tables: the table layout and the form to add a table.","3":"Schedule: weekly opening hours.","4":"Notifications: restaurant email and optional Twilio SMS reminders.","5":"Settings: booking interval, table occupancy, party size, privacy policy and data options."}},"plugin_section":[],"plugin_tags":[8125,1475,20710,145602,34016],"plugin_category":[39,40],"plugin_contributors":[290308],"plugin_business_model":[],"class_list":["post-399473","plugin","type-plugin","status-publish","hentry","plugin_tags-booking-form","plugin_tags-reservations","plugin_tags-restaurant","plugin_tags-restaurant-booking","plugin_tags-table-booking","plugin_category-business","plugin_category-calendar-and-events","plugin_contributors-saland","plugin_committers-saland"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/andreadesign-table-booking\/assets\/icon-128x128.png?rev=3786651","icon_2x":"https:\/\/ps.w.org\/andreadesign-table-booking\/assets\/icon-256x256.png?rev=3786651","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/andreadesign-table-booking\/assets\/screenshot-1.png?rev=3786651","caption":"The booking form that guests see on the page where you place the shortcode."},{"src":"https:\/\/ps.w.org\/andreadesign-table-booking\/assets\/screenshot-2.png?rev=3786651","caption":"Tables: the table layout and the form to add a table."},{"src":"https:\/\/ps.w.org\/andreadesign-table-booking\/assets\/screenshot-3.png?rev=3786651","caption":"Schedule: weekly opening hours."},{"src":"https:\/\/ps.w.org\/andreadesign-table-booking\/assets\/screenshot-4.png?rev=3786651","caption":"Notifications: restaurant email and optional Twilio SMS reminders."},{"src":"https:\/\/ps.w.org\/andreadesign-table-booking\/assets\/screenshot-5.png?rev=3786651","caption":"Settings: booking interval, table occupancy, party size, privacy policy and data options."}],"raw_content":"<!--section=description-->\n<p><strong>AndreaDesign Table Booking<\/strong> lets a restaurant take table reservation requests directly from its own WordPress site, without a monthly fee, third-party booking service or locked features. Guests fill in a responsive form; the staff manages everything from a focused dashboard inside the WordPress admin.<\/p>\n\n<p>Plugin page and more plugins by the author: <a href=\"https:\/\/andreadesign.it\/servizi\/plugin-wordpress\">andreadesign.it\/servizi\/plugin-wordpress<\/a>. Author website: <a href=\"https:\/\/andreadesign.it\/\">andreadesign.it<\/a>.<\/p>\n\n<h4>What guests see<\/h4>\n\n<ul>\n<li>A booking form added to any page with the <code>[andreadesign_table_booking]<\/code> shortcode: date, number of guests, time, name, email, phone, optional notes and an explicit consent checkbox.<\/li>\n<li>Only times that are really available are offered, based on confirmed reservations, active tables, the opening schedule and the site's timezone.<\/li>\n<li>Optional emails that describe the request or its confirmation.<\/li>\n<\/ul>\n\n<h4>What the staff can do<\/h4>\n\n<ul>\n<li>Review <strong>Reservations<\/strong> with their status: pending, confirmed, cancelled or completed.<\/li>\n<li>See the day at a glance in the <strong>Dashboard<\/strong>, the <strong>Calendar<\/strong> and the table layout.<\/li>\n<li>Add manual reservations, for example phone bookings.<\/li>\n<li>Define <strong>Tables<\/strong> with their seats and shape (round, square, rectangular or oval) and disable a table that is out of service.<\/li>\n<li>Set weekly opening hours in <strong>Schedule<\/strong>, with one or more ranges per day.<\/li>\n<li>Export reservations to CSV.<\/li>\n<li>Choose whether bookings are confirmed automatically when a table is free, or stay pending until the staff confirms them.<\/li>\n<li>Optionally send SMS reminders to guests who agreed to them, through your own Twilio account.<\/li>\n<\/ul>\n\n<h4>How availability works<\/h4>\n\n<p>Confirmed reservations hold one table for the configured occupancy duration (90 minutes by default). Pending requests do not hold a table. When staff confirms a request, availability is checked again. To preserve existing table assignments, the occupancy duration cannot be changed while there are future pending or confirmed reservations, and a table with future confirmed reservations cannot be disabled. Schedule and interval changes are rejected when they would place existing confirmed reservations outside the booking times. A confirmed reservation can be marked complete after its occupancy period ends. An administrator can permanently delete a single reservation after cancelling it.<\/p>\n\n<h4>Privacy and data<\/h4>\n\n<p>No tracking, no advertisements, no external assets and no telemetry. Data stays in your own database. The plugin integrates with the WordPress personal data exporter and eraser. See the Privacy section below.<\/p>\n\n<h4>Not included<\/h4>\n\n<p>Online changes or cancellations by guests, deposits and payments, combined tables, more than one restaurant, and drag-and-drop floor-plan editing.<\/p>\n\n<h4>More information<\/h4>\n\n<ul>\n<li>Plugin page: https:\/\/andreadesign.it\/servizi\/plugin-wordpress<\/li>\n<li>Author website: https:\/\/andreadesign.it\/<\/li>\n<\/ul>\n\n<h3>Privacy<\/h3>\n\n<p>The guest form collects name, email, telephone, date, time, party size, optional notes and explicit consent. Data is stored in the site's database and may be emailed to the restaurant and guest using WordPress <code>wp_mail()<\/code>. With optional SMS enabled and separate guest consent, the phone number and reminder text are sent to Twilio. Twilio credentials are stored in WordPress options. A hashed request identifier is kept transiently for one hour for rate limiting. There is no plugin-author telemetry or external asset request. WordPress Privacy Tools can export or anonymize bookings by email; anonymization preserves table occupancy data. The site owner is responsible for the privacy notice and retention policy. Set a privacy policy URL in plugin settings.<\/p>\n\n<!--section=installation-->\n<h4>Install<\/h4>\n\n<ol>\n<li>In WordPress go to <strong>Plugins &gt; Add New<\/strong>, search for \"AndreaDesign Table Booking\", click <strong>Install Now<\/strong> and then <strong>Activate<\/strong>. Alternatively upload the plugin ZIP through <strong>Plugins &gt; Add New &gt; Upload Plugin<\/strong>.<\/li>\n<li>A new <strong>Restaurant Booking<\/strong> menu appears in the admin sidebar, with the sections Dashboard, Reservations, Tables, Schedule, Notifications, Settings, Add-ons and Calendar.<\/li>\n<\/ol>\n\n<h4>Configure, step by step<\/h4>\n\n<ol>\n<li><strong>Check the site timezone.<\/strong> Go to <strong>Settings &gt; General<\/strong> in WordPress and make sure Timezone is your city. Available times are calculated from it.<\/li>\n<li><strong>Add your tables.<\/strong> Open <strong>Restaurant Booking &gt; Tables<\/strong>. In \"Add a table\" enter a name (for example T1), the number of seats and the shape, then click <strong>Add table<\/strong>. Repeat for every table. You can change the shape later or disable a table.<\/li>\n<li><strong>Set your opening hours.<\/strong> Open <strong>Restaurant Booking &gt; Schedule<\/strong>. For each day write the time ranges in 24-hour notation, for example <code>12:00-15:00,18:00-23:00<\/code>. Leave a day blank to close it. Click <strong>Save schedule<\/strong>.<\/li>\n<li><strong>Choose the booking rules.<\/strong> Open <strong>Restaurant Booking &gt; Settings<\/strong>:\n\n<ul>\n<li>Booking interval: the step between available times (30 minutes by default).<\/li>\n<li>Table occupancy: how many minutes a confirmed reservation keeps a table (90 by default).<\/li>\n<li>Maximum party size (10 by default) and days bookable ahead (60 by default).<\/li>\n<li>Restaurant notification email: the address that receives new requests.<\/li>\n<li>Privacy policy URL: shown to guests next to the consent checkbox. Add yours.<\/li>\n<li>Automatic confirmation: leave it off if you want to approve each request, or turn it on to confirm when a table is free.<\/li>\n<li>Email guests about requests and confirmations: on by default.<\/li>\n<li>Permanently delete all plugin data on uninstall: off by default, so data is kept if you remove the plugin.\nClick <strong>Save settings<\/strong>.<\/li>\n<\/ul><\/li>\n<li><strong>Publish the form.<\/strong> Create or edit a page, add a Shortcode block (or a text block) containing <code>[andreadesign_table_booking]<\/code> and publish it. Link the page from your menu.<\/li>\n<li><strong>Make a test reservation<\/strong> from the public page, then open <strong>Reservations<\/strong> and confirm it. Check that the notification email arrives; delivery depends on your WordPress email setup, so an SMTP plugin is recommended on many hosts.<\/li>\n<li><strong>Optional, SMS reminders.<\/strong> Open <strong>Restaurant Booking &gt; Notifications<\/strong>. Enter your Twilio Account SID, API key SID, API key secret and sender number (E.164 format, for example +12345678901), choose how many minutes before the reservation the SMS is sent, and turn on SMS Reminders. SMS stays disabled until you enable it and provide valid credentials. Guests receive SMS only if they select the SMS consent option, and their phone number must include the country code.<\/li>\n<\/ol>\n\n<h4>Day-to-day use<\/h4>\n\n<p>Open <strong>Reservations<\/strong> to confirm or cancel requests, use <strong>Dashboard<\/strong> and <strong>Calendar<\/strong> to see the day, and use the CSV export when you need a list outside WordPress.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"are%20reservations%20automatically%20confirmed%3F\"><h3>Are reservations automatically confirmed?<\/h3><\/dt>\n<dd><p>By default they remain pending. You can enable automatic confirmation in Settings. Pending requests do not reserve a table.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20support%20more%20than%20one%20restaurant%20or%20combining%20tables%3F\"><h3>Does the plugin support more than one restaurant or combining tables?<\/h3><\/dt>\n<dd><p>This version is for one restaurant and assigns each confirmed party to one table.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20data%20when%20i%20uninstall%3F\"><h3>What happens to data when I uninstall?<\/h3><\/dt>\n<dd><p>Reservation data and settings are retained by default. The owner can choose permanent deletion on uninstall in the plugin settings before uninstalling.<\/p><\/dd>\n<dt id=\"are%20email%20messages%20guaranteed%20to%20arrive%3F\"><h3>Are email messages guaranteed to arrive?<\/h3><\/dt>\n<dd><p>Delivery depends on the site's WordPress email configuration. Test email delivery on your site.<\/p><\/dd>\n<dt id=\"how%20do%20sms%20reminders%20work%3F\"><h3>How do SMS reminders work?<\/h3><\/dt>\n<dd><p>SMS is optional and uses <a href=\"https:\/\/www.twilio.com\/docs\/messaging\/api\/message-resource\">Twilio Programmable Messaging<\/a>. You need your own Twilio account, sender number, Account SID and API key credentials. Twilio's <a href=\"https:\/\/www.twilio.com\/en-us\/legal\/tos\">Terms of Service<\/a> and <a href=\"https:\/\/www.twilio.com\/en-us\/legal\/privacy\">Privacy Notice<\/a> apply. The plugin sends a phone number and reminder text to Twilio only when the restaurant enables the feature and the guest opts in; manual reservations require staff to record that consent. Twilio may charge for messages. The reminder is scheduled using WP-Cron, which runs on site visits and can be delayed on low-traffic sites. A real server cron is recommended for precise timing. Phone numbers must be entered in E.164 format.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.5<\/h4>\n\n<ul>\n<li>Add the plugin icon and screenshots to the plugin page.<\/li>\n<li>Expand the readme with a full installation and configuration guide.<\/li>\n<li>Add the Plugin URI header linking to andreadesign.it.<\/li>\n<li>Add the andreadesign.it name to the plugin's own admin header as plain text. It is not shown on the public site.<\/li>\n<\/ul>\n\n<h4>1.2.4<\/h4>\n\n<ul>\n<li>Return HTTP 403 when a user without permission uses a staff action.<\/li>\n<li>Load the public stylesheet and script only on pages that contain the booking form.<\/li>\n<li>Add the adtb_client_ip filter so sites behind a proxy or CDN can rate limit by the real visitor address.<\/li>\n<li>Remove the promotional block from the admin header.<\/li>\n<\/ul>\n\n<h4>1.2.3<\/h4>\n\n<ul>\n<li>Document each necessary custom-table database call for Plugin Check, with scoped coding-standard exceptions for real-time reads, writes and uninstall.<\/li>\n<li>Keep reservation availability and staff actions based on current database state.<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>Prepare identifiers in custom-table queries for WordPress 6.4 and newer, including privacy tools and uninstall.<\/li>\n<li>Validate schedule input more defensively and preserve safe CSV streaming.<\/li>\n<li>Remove the unused translation directory header.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Set the CSV escape argument explicitly for PHP 8.4 compatibility and standards-compliant CSV output.<\/li>\n<li>Reject malformed table-shape input without triggering a PHP type error.<\/li>\n<li>Document the WordPress version used for compatibility checks.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Let administrators choose round, square, rectangular or oval shapes for new and existing tables, with a matching layout preview.<\/li>\n<li>Migrate existing table drawings to stored shapes without changing their reservations.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Add a nonce-protected, individually targeted deletion action for cancelled reservations.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Add dashboard layout and navigation matching the restaurant reference, calendar, quick settings and optional opt-in SMS reminders.<\/li>\n<li>Add database upgrade for SMS consent, notification settings and privacy export.<\/li>\n<li>Protect future reservations when editing hours and intervals, refresh cached form dates and prevent duplicate scheduled reminders.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Load booking assets when a page builder renders the form, support multiple forms and refresh nonces on cached pages.<\/li>\n<li>Show valid time slots in the manual booking form and prevent early table release.<\/li>\n<li>Separate schedule and settings saves, validate opening ranges and improve table and booking error handling.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: reservations, capacity checks, table and schedule management, privacy tools.<\/li>\n<\/ul>","raw_excerpt":"Manage restaurant table reservation requests and available tables on your own WordPress site.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/399473","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=399473"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/saland"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=399473"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=399473"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=399473"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=399473"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=399473"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=399473"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}