=== Flavor – Restaurant Menu & Table Reservations ===
Contributors: flavorstudio
Tags: restaurant menu, food menu, table reservation, allergens, digital menu
Requires at least: 6.0
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 2.4
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

A modern restaurant menu plugin with online table reservations. Card Grid layout, category filter, dark theme, all page builders.

== Description ==

= 🎉 Flavor 2.0 is here =

**The biggest release so far — a workspace of its own, and online table reservations.**

* **Flavor now opens in its own admin panel.** No more hunting through WordPress submenus: one Flavor entry leads to a proper workspace with a fixed two-level navigation, a dashboard, a streamlined dish editor and a setup checklist that ticks itself off as you go. Light and dark mode included.
* **Take table bookings on your own website.** Guests request a table from a booking form; you approve or decline straight from the e-mail or from the panel. Opening hours and closed days, a capacity limit, turn time, confirmation e-mails with a calendar file and a one-click cancellation link, an approval inbox, search by name, phone or e-mail — and old bookings are deleted automatically.
* **Nothing you built is lost.** Every dish, category, setting and shortcode carries over untouched. Only the interface around them is new.

Upgrading is the normal one-click update. If you use Flavor Pro, update both plugins.

= What Flavor does =

**Flavor – Restaurant Menu & Table Reservations** is a modern WordPress restaurant menu plugin for restaurants, cafés and bars. Create mobile-friendly food menus with categories, images, prices and a responsive card grid — then display them anywhere with a shortcode, Gutenberg block, Elementor widget or WPBakery element. Take table bookings from your own website with the built-in reservation form. No WooCommerce required. QR code table stands, EU allergen labels and multiple layouts are available in Flavor Pro.

= What you get for free =

**The workspace**

* **Standalone admin panel** — One Flavor entry in the sidebar opens a proper workspace: fixed two-level navigation, dashboard, dedicated dish editor, light and dark mode, and a setup checklist that ticks itself off from the real state of your site
* **Unlimited dishes** — No cap, no trial. Categories, price, description, featured image and sort order
* **Categories** — Hierarchical, with drag & drop ordering, renaming and deleting on one screen

**The menu on your site**

* **Card Grid layout** — Responsive image cards with the built-in Elegant Dark theme
* **Category filter** — Animated filtering on the frontend, optionally sticky while scrolling
* **Subcategories** — Shown as section headings when a parent category is filtered
* **Currency** — Any symbol, placed before or after the amount; the side is detected automatically, so `$32.00` but `32.00 €`
* **All page builders** — Gutenberg block, Elementor widget and WPBakery element, plus the `[flavor_menu]` shortcode for everything else

**Table reservations**

* **A booking form on your own website** — `[flavor_reservation]` or the matching block, widget and element. Nine fields, spam honeypot, rate limit, works without JavaScript
* **You decide on every request** — Approve or decline from the notification e-mail or from the panel; the guest is informed either way
* **Opening hours that match reality** — Per weekday, closed days, lead time, how far ahead guests may book, a capacity limit and a turn time that can grow with party size. Hours past midnight are handled as one business day
* **E-mails that do the work** — Confirmation with a calendar file and a one-click cancellation link for the guest, a notification with occupancy context for you
* **Daily service board** — Today's bookings with the day's covers and the busiest moment, an approval inbox, search by name, phone or e-mail, an overdue marker and a nudge for past bookings nobody closed
* **Tables free up when guests leave** — One click on "Guest left" and the seats count as free again straight away, instead of when the usual time is up
* **Data protection built in** — Consent checkbox, and old bookings are deleted automatically after a number of days you choose

= Flavor Pro =

Pro is a **separate plugin** available at [flavor-menu.com](https://flavor-menu.com). Install it alongside this one and every Pro feature unlocks automatically — nothing is migrated, nothing is re-entered.

* **Multiple prices** — Unlimited price variants per dish with labels (e.g. Small / Large, 0.2 l / 0.75 l)
* **7 Layouts** — Card Grid, Price List, Table, Horizontal Card, Featured, Compact List, Sectioned List
* **6 Design Themes** — Elegant Dark, Clean Light, Warm Earth + 3 fully configurable Custom Themes with 7 color pickers each
* **40 Google Fonts** — Curated Serif, Sans-Serif and Display fonts under Design → Typography. Optional local self-hosting for GDPR-compliant delivery
* **Allergens & Nutrition** — 14 EU mandatory allergens (Regulation 1169/2011) + nutritional values per 100 g. Layout-specific display: 180° flip (cards), floating popup (lists), abbreviation chips (table)
* **Guest Ratings** — 1–5 star ratings in the Card Grid layout. No login required. Duplicate protection via localStorage + server-side IP hash
* **Room planner & seating** — Draw your restaurant once — rooms, walls, doors, decor and tables to scale — then seat guests at real tables instead of guessing from a list: live room view, table suggestions, moving guests between tables, walk-ins and a per-table timeline
* **Reservation analytics** — Covers per day and per hour, no-show rate and average party size over 7, 30 or 90 days
* **Multiple Locations** — Assign dishes to one or more branches and filter per location in the shortcode. Each branch keeps its own opening hours, capacity, floor plan and reservation inbox
* **Badge System** — New, Popular, Chef's Choice, Seasonal, Spicy and more
* **QR Code / Table Stand** — Print-ready table stands as PDF. 3 styles (Minimal, Elegant, Branded), DIN A5/A6, logo upload, background image, 4 color pickers, live preview
* **CSV Import / Export** — Import dishes from CSV (Excel/Google Sheets compatible). Supports all dish fields: title, description, subtitle, categories (incl. subcategories via `Food > Starters`), prices with labels, badges, locations, allergens, nutrition values. Missing categories are auto-created. Existing dishes (matched by title) are updated. Configurable delimiter (comma or semicolon). Preview before import, per-row result report. Export all dishes as CSV. Downloadable empty template.
* **SEO / Schema.org markup** — Every menu outputs Schema.org structured data (JSON-LD): `Menu`, `MenuSection` and `MenuItem` with prices (`Offer`) and nutrition (`NutritionInformation`), so search engines and AI assistants can read your menu. No configuration required, works in every layout
* **Columns & Image Ratio** — 2/3/4 columns, 4:3/1:1/16:9 image ratio
* **Subcategory Support** — Hierarchical categories with parent and sub-headings in all layouts

= Page Builder Support =

* Gutenberg (native block, live preview in editor)
* Elementor Free 3.5+
* WPBakery Page Builder

= Shortcode =

`[flavor_menu title="Our Menu"]`

Available parameters: `title`, `description`, `category`, `limit`, `show_filter`, `sticky_filter`, `hide_all_btn`, `default_category`, `currency`, `currency_position`, `el_class`

`[flavor_reservation title="Book a table"]`

Available parameters: `title`, `intro`, `style` (light / dark), `el_class`

== External Services ==

Your menu and your reservations never leave your server. All assets (CSS, JavaScript, fonts) are bundled with the plugin and served from your own site, and no menu, dish, guest or booking data is ever sent anywhere.

The plugin does use one external service, and only if you choose it:

= Freemius (opt-in, disabled by default) =

Flavor uses Freemius to deliver update notices and security warnings, and to handle license activation for the separate Flavor Pro plugin. **Nothing is transmitted until you click "Allow & Continue" on the opt-in screen.** If you skip it, the plugin works exactly the same and no connection is made.

If you do opt in, the following is sent to freemius.com and refreshed periodically:

* Your WordPress user's first name, last name and e-mail address
* Your site's homepage URL and title, WordPress and PHP versions, and site language
* The Flavor plugin and SDK versions, and whether the plugin is active or was uninstalled
* The names, slugs, versions and active state of your installed plugins and themes

You can withdraw consent at any time — open **Flavor → Account** and choose *Disconnect*, or use the opt-out link on the plugin's row under **Plugins**. Transmission stops immediately, and the plugin keeps working.

What is collected and why: [freemius.com/product/opt-in/27618/flavor-restaurant-menu/](https://freemius.com/product/opt-in/27618/flavor-restaurant-menu/) — Terms of Service: [freemius.com/terms/](https://freemius.com/terms/) — Privacy Policy: [freemius.com/privacy/](https://freemius.com/privacy/)

= Table reservations =

Reservation e-mails to you and your guests are sent with WordPress' own `wp_mail()`, so they travel through whatever mail setup your site already uses. No booking data is sent to us or to any third party.

== Installation ==

= Install =

1. Install from **Plugins → Add New** and search for "Flavor", or upload the `flavor-restaurant-menu` folder to `/wp-content/plugins/` via **Plugins → Add New → Upload Plugin**.
2. Activate the plugin through the **Plugins** menu.
3. A new **Flavor** entry appears in the WordPress sidebar. Everything lives there.

= Quick Start =

Open **Flavor** and follow the setup checklist behind the icon in the top right — it tracks these steps for you:

1. **Create categories** — *Menu → Categories*, e.g. "Food" with the subcategories "Starters" and "Main Courses". Drag them into the order you want; the same screen renames and deletes them.
2. **Add dishes** — *Menu → Dishes → Add dish*: name, description, price, photo and sort order.
3. **Put the menu on a page** — add the **Menu Card** block (Gutenberg), the Elementor widget or the WPBakery element, all under the category **Flavor Restaurant** — or paste the shortcode `[flavor_menu]`. The checklist can create a ready-made page for you in one click.

= Optional: take table bookings =

1. Set your opening hours, capacity and turn time under **Flavor → Reservations → Settings**, and enter the address that should receive requests.
2. Put the **Reservation Form** element — or the shortcode `[flavor_reservation]` — on a page.
3. New requests land under **Flavor → Reservations → Service**, with a counter on the menu entry. Approve or decline there or straight from the notification e-mail; the guest is informed either way.

= Upgrading from 1.5.x =

Just run the update. Dishes, categories, settings and shortcodes are untouched — the admin interface is what changed. The old submenus are gone; everything they held now sits inside the Flavor panel.

== Frequently Asked Questions ==

= Do I need Elementor or WPBakery? =

No. The plugin works with the Gutenberg block editor that comes built into WordPress. Elementor and WPBakery are optional.

= Does the plugin load any external scripts or services? =

No external scripts: every stylesheet, script and font ships with the plugin and is served from your own site. Your menu, dishes and reservations stay on your server and are never sent anywhere.

The one exception is Freemius, which handles update notices and license activation — and only after you accept its opt-in screen. Skip it and no connection is made at all. See **External Services** above for exactly what is transmitted if you accept.

= How do I reorder categories? =

Go to **Flavor → Menu → Categories** and drag the categories into the desired order. The same screen lets you rename and delete them.

= Can I display subcategories? =

Yes. When filtering by a parent category in the Card Grid, subcategories are shown as section headings. Create subcategories by picking a parent under Flavor → Menu → Categories.

= Do the table reservations cost extra? =

No. The booking form, the approval flow, the e-mails, the opening hours and the service board are all in the free version. Pro adds the visual floor plan with table assignment and walk-ins, the analytics, and per-branch settings for restaurants with several locations.

= Do guests need an account to book a table? =

No. A guest fills in the form and receives a confirmation e-mail with a calendar file and a link to cancel. Nothing is stored beyond the booking itself, and old bookings are deleted automatically after a period you set.

= I updated to 2.0 and my Flavor submenus are gone. Where is everything? =

It all moved into the new Flavor panel. Click **Flavor** in the sidebar: dishes and categories under *Menu*, the design and add-on screens in their own sections, and reservations under *Reservations*. No data or setting was changed — only where you reach it.

= Where can I find allergens, multiple layouts and other Pro features? =

These are available in **Flavor Pro**, a separate plugin at [flavor-menu.com](https://flavor-menu.com). Installing Flavor Pro alongside this plugin automatically unlocks all Pro features.

== Screenshots ==

1. The Flavor panel — your menu, reservations and settings in one workspace, without hunting through WordPress submenus
2. Dishes — filter by category or status, sort, and page through the whole menu
3. The dish editor — name, description, photo, subtitle, price and sort order on one screen, no block editor needed
4. Categories — create, rename, delete and drag into order, subcategories included
5. Reservations — the day at a glance, with open requests waiting to be approved right at the top
6. Reservation settings — slot interval, lead time, party size cap, capacity, turn time and opening hours
7. Card Grid on the frontend — the Elegant Dark theme with the animated category filter
8. The guest booking form — nine fields, no guest account needed, confirmed by e-mail

== Changelog ==

= 2.4 =
* New: "Guest left" frees the seats the moment a guest leaves, so availability is right again straight away. Pressed by mistake? "Back at the table" undoes it.
* Improved: "Create menu page for me" in the setup checklist now adds a Menu Card block, so the menu's settings are right there in the block sidebar.
* Fixed: the menu and reservation blocks looked unstyled in the block editor preview. Published pages were not affected.
* Fixed: after adding a reservation, the list now shows the day of that booking.
* **In Pro:** a new room editor with rooms, walls, decor and tables to scale, moving guests between tables, and a warning when a walk-in's table is needed again soon.

= 2.3.2 =
* Changed: the plugin is now called "Flavor – Restaurant Menu & Table Reservations", so the name says what it does.
* Fixed: the menu and the reservation form looked unstyled in the Elementor editor preview. Published pages were not affected.
* Fixed: with block themes such as Twenty Twenty-Five, the booking form said every day was closed.
* Fixed: the booking form offered times that had already passed today. It now only shows times that can still be booked, and a day whose times are over no longer claims to be closed.
* Fixed: when a booking could not be sent, the form now says under each field what is wrong.
* **In Pro:** the CSV import shows its progress indicator again, and adding a second location before any reservation had been made no longer costs the first location its floor plan and current opening hours and capacity.

= 2.3.1 =
* Fixed: the settings of the menu and reservation blocks in the block editor were always shown in English.
* Changed: the menu block in the block editor is now called "Menu Card", like the Elementor and WPBakery elements.
* Improved: the admin panel's styles are better isolated from icon fonts that some themes and plugins load.
* Fixed: renaming or deleting a category showed no confirmation, or repeated an earlier one.
* **In Pro:** fixes for the Menu Card block preview in the block editor and a few mislabelled fields in the badge editor, and a preselected location in the "Add reservation" dialog.

= 2.3 =
* Fixed: a display glitch in the admin panel that could show up with some themes.

= 2.2 =
* Fixed (Pro): the dish form in the admin panel had no location picker since 2.0. The card is back; in the free plugin it explains what locations do.
* New: the dishes list has a trash view. Trashed dishes used to disappear from the panel with no way back — you can now find, restore and permanently delete them.
* New: bulk actions on the dishes list. Tick any number of dishes and publish them, set them to draft, move them to the trash, or add and remove a category in one go.

= 2.1 =
* Fixed: admin styles and scripts are versioned per file again, so a correction reaches the browser without a hard refresh instead of being served from the cache.
* Maintenance: the shared reservation code is back in line with the Pro release.

= 2.0 =
* **New: standalone admin panel** — Flavor now opens in its own modern, app-like workspace instead of being scattered across WordPress submenus. A fixed two-level navigation groups everything (Menu, Reservations, Design, Add-ons, Tools, Locations, Settings), dishes get their own streamlined editor, and a "Get Started" checklist tracks your setup. Every existing setting is preserved.
* **New: online table reservations** — Guests request a table from a booking form (`[flavor_reservation]` shortcode plus Gutenberg, Elementor and WPBakery elements); you approve or decline each one straight from the e-mail or from the panel. Includes opening hours and closed days (also across midnight), a capacity limit, turn time, confirmation e-mails with a calendar file and a one-click cancellation link, an approval inbox, search by name, phone or e-mail, and automatic deletion of old bookings.
* **Categories** can now be renamed and deleted directly on the category screen. Renaming keeps the slug, so existing shortcodes and page-builder elements keep working.
* New in Pro: floor plan with drag-and-drop table assignment, walk-ins, reservation analytics and per-branch reservation settings.
* **Sticky category bar is now off by default** — The category filter bar introduced in 1.5.12 was pinned to the top on every menu, which changed how existing menus looked after updating and does not display correctly in every theme. It is now opt-in: switch it on per menu with the "Sticky Category Bar" control in the shortcode and in the Gutenberg, Elementor and WPBakery elements.
* Maintenance, translations and minor improvements.

= 1.5.13 =
* **Fix: currency symbol position** — Currency symbols that belong before the amount (e.g. $, £, ¥) are now placed correctly — "$32.00" instead of "32.00 $". The side is detected automatically from the symbol, and a new "Currency Position" control (Automatic / After amount / Before amount) lets you override it per menu in the shortcode and the Gutenberg, Elementor and WPBakery controls.

= 1.5.12 =
* **Sticky category bar** — The category filter bar can now stay pinned to the top of the screen while visitors scroll through a long menu. On by default; toggle it per menu with the new `sticky_filter` option in the shortcode and in the Gutenberg, Elementor and WPBakery controls.
* **More dishes per menu** — The maximum number of dishes shown in one menu is raised from 200 to 999, and the default is now 150 (previously 12).
* Maintenance and minor improvements.

= 1.5.11 =
* **Onboarding: page-builder guidance** — The "Get Started" checklist now detects Elementor and WPBakery and points you to the native "Menu Card" widget/element instead of the shortcode, plus a Documentation link to the shortcode reference.
* Maintenance and minor improvements.

= 1.5.10 =
* Maintenance and minor improvements.

= 1.5.9 =
* **Guided setup** — A new "Get Started" checklist walks you from your first category to a live menu. Steps tick off automatically as you go, and one click can create a menu page for you.
* Maintenance and minor improvements.

= 1.5.8 =
* **Fix: menu colors overridden by the theme** — Some themes styled headings inside their layout wrappers (e.g. `.vc_row h3`) with higher CSS specificity, so the Card Grid dish titles and text did not use the selected Flavor theme colors. The plugin now enforces its own palette. Colors stay fully customizable via the theme selector.
* **New in Pro: Schema.org structured data (SEO)** — Flavor Pro now outputs `Menu` / `MenuSection` / `MenuItem` JSON-LD (prices, nutrition) so search engines can read your menu.
* **New in Pro: full 40-font Typography library** — Five more curated Google Fonts added to the Pro Typography picker (now 40 fonts total).

= 1.5.7 =
* **Fix: German umlauts displayed as escape sequences** — The 1.5.6 `.mo` file contained literal `\xc3\x9f` byte-escape sequences instead of UTF-8 characters, causing garbled output for umlauts (ä, ö, ü, ß), special characters (€, →, —) in the WordPress admin. Now using proper UTF-8 encoding.

= 1.5.6 =
* **German translation** — Complete German (de_DE) translation added with correctly named `.po` / `.mo` files (`flavor-restaurant-menu-de_DE.mo`) so WordPress auto-loads them on German sites.
* **WordPress 7.0 compatibility** — Tested up to WordPress 7.0.

= 1.5.5 =
* **Documentation links in admin** — Category Sort page now shows a "Documentation ↗" link next to the heading.
* **Plugin list link** — A "Documentation" link is added to the plugin entry in wp-admin → Plugins.
* **Informational Pro pages** — Admin menu shows informational pages for Badges, Custom Themes, Typography, Ratings, Table Stand and Import/Export — linking to the separate Flavor Pro plugin.

= 1.5.4 =
* **General improvements** — Maintenance and minor improvements.
* **Security hardening** — Nonce sanitization improved throughout. CSS output re-validates all values. Redirects use `wp_safe_redirect()`.

= 1.0.0 =
* Initial release.

== Upgrade Notice ==

= 2.4 =
Adds "Guest left" to free a table early and shows the right day after adding a reservation.

= 2.3.2 =
Renames the plugin and fixes the booking form and the Elementor preview. Nothing changes for your menu or bookings.

= 2.3.1 =
Translates the block settings in the block editor and renames the menu block to "Menu Card".

= 2.3 =
Fixes a display glitch in the admin panel that could show up with some themes.

= 2.2 =
Adds bulk actions and a trash view to the dishes list. No action required.

= 2.1 =
Maintenance release. No action required.

= 2.0 =
Flavor moves into its own admin panel and gains online table reservations. All existing dishes, categories and settings are kept.

= 1.5.13 =
Fixes the position of currency symbols such as $, £ and ¥ (now shown before the amount). No action required.

= 1.5.12 =
New sticky category bar (on by default) and a higher dish limit — up to 999, default 150. No action required.

= 1.5.11 =
The Get Started checklist now guides Elementor and WPBakery users to the native widget. No action required.

= 1.5.10 =
Maintenance and minor improvements. Recommended for all users.

= 1.5.9 =
Adds a guided "Get Started" setup checklist. No action required.

= 1.5.8 =
Fixes Card Grid titles and text taking the surrounding theme's colors instead of the selected Flavor theme. No action required.

= 1.5.7 =
Fixes garbled German umlauts in the admin (1.5.6 .mo file had broken UTF-8 encoding). Recommended for all German installations.

= 1.5.6 =
Complete German translation and WordPress 7.0 compatibility.

= 1.5.5 =
Documentation links added to admin pages and plugin list.

= 1.5.3 =
New Pro feature: CSV Import / Export for dishes. Import from Excel/Google Sheets CSV, export all dishes, download empty template.

= 1.5.2 =
New "Download Fonts Locally" feature in Menu → Typography for GDPR-compliant font delivery without external requests to Google.

= 1.5.1 =
Vendor scripts are now bundled locally. If you previously saw console errors about blocked CDN requests, this update resolves them.
