# User Guide for maca Restu Pro

**Version:** 1.14.6

### About maca Restu Pro

maca Restu Pro is a WordPress plugin for restaurants and cafés. You can display your menu in two ways:

1. **PDF/image menus** – categories with uploaded PDF or image files, scheduling, and QR codes (same core features as the free plugin on WordPress.org)
2. **Online menu (Pro)** – register individual dishes with categories, prices, images, and allergens; guest ratings, table ordering, and more (requires an active subscription)

**Author:** Maca Development (web@maca.se)  
**Website:** [https://maca.se](https://maca.se)

### Installation

1. **Deactivate and delete** the free *maca Restu* plugin if installed (do not run both)
2. Upload the `maca-restu-pro` folder to `/wp-content/plugins/`
3. Activate **maca Restu Pro** under **Plugins**
4. Database tables are created automatically on activation
5. Accept **Terms & Privacy** under **maca Restu → Terms & Privacy**
6. Follow the **Getting started** wizard (step by step — pause anytime; resume under **maca Restu → Getting started**)

**Important:**

- Set **WordPress Address** and **Site Address** to `https://` under **Settings → General** when using SSL
- Set the correct **Timezone** under **Settings → General** – scheduling in PDF/image mode uses it

### Getting started (wizard)

After accepting Terms & Privacy, the **Getting started** wizard runs automatically on a fresh install. It helps you:

1. Choose **PDF/image** or **online menu (Pro)**
2. Enter **restaurant details** (name, address, phone, email, etc.)
3. Set **opening hours** per weekday (optional)
4. Create your **first category** or **first dish**
5. Pick **optional Pro features** (table ordering, reservations) — skippable
6. Learn how to **publish** the menu (shortcode, QR)

**Pause anytime:** click **Save and continue later**. Reopen under **maca Restu → Getting started** until you finish or dismiss the wizard. Other admin screens are not blocked.

**Turn off the wizard:** click **Dismiss wizard** in the wizard, or uncheck **Show getting started wizard** under **Settings → Restaurant**. Re-enable with the same checkbox.

### Subscription (Pro)

Pro features (online menu, guest ratings, table ordering, etc.) require an active license:

1. Go to **maca Restu → Subscription**
2. Subscribe via Stripe at [maca.se/restu-pro/](https://maca.se/restu-pro/) or paste a license key (`ML-PRO-…`)
3. Demo/development: request an **ML-COMP-…** key from maca.se and activate under **Subscription** (validated on the license server)

**Pricing (June 2026):** **annual license only** — **499 SEK/year** through **31 August 2026**, then **799 SEK/year** from **1 September 2026**. Lifetime is not sold at this time.

Free-tier features (PDF/image, scheduling, QR, shortcode) work **without** a license. **Backup** is included in the Pro plugin and does **not** require a subscription.

### Pro features (subscription)

| Feature | Description |
|---------|-------------|
| **Online menu** | Categories, dishes, allergens, drag-and-drop sorting |
| **Category filters** | Optional filter buttons on website and QR |
| **Clickable images** | Lightbox when guests tap a dish image |
| **Guest ratings** | 1–5 stars per dish |
| **Table ordering** | Guest cart, waiter/kitchen pages, staff PIN |
| **Table Reservation** | Guest reservations, opening hours block, email workflow, admin **Floor overview** |
| **Order status** | Live progress for guests; add-on orders during visit |
| **Guest payments** | Stripe Checkout, tips, optional email order confirmation, pay at order or after meal |
| **Campaign menus** | Scheduled campaign menus with selected dishes and optional exclusive campaign mode |
| **QR per table** | Table number in QR link (`?bord=`) |
| **Menu footer** | Allergy, VAT (rates, VAT number), contact (website, QR, print) |
| **Print menu** | Paper-ready menu from database (**Dishes → Print menu**) |
| **Default allergens** | Ten EU allergens pre-installed (Swedish and English in database) |

See **maca Restu → Subscription** for the full list.

### Choose menu type

Go to **maca Restu → Settings** and select **Menu Content Type**:

| Mode | Description |
|------|-------------|
| **Upload PDF/image menus** | Default – categories, menu files, scheduling |
| **Register dishes in the plugin (Pro)** | Dish categories, allergens, and dishes |

The admin menu adapts to your choice. You can switch modes anytime; stored data is kept.

---

## PDF and image menus

*Applies when **Menu Content Type** = Upload PDF/image menus.*

### Creating categories

1. Go to **maca Restu → Categories**
2. Click **Add New Category**
3. Fill in **Category Name**, optional **Thumbnail**, **Description**, **Sort Order**
4. Save

### Adding menu files

1. Go to **maca Restu → Menus**
2. Click **Add New Menu**
3. Fill in **Category**, **Menu Title**, **File Type**, upload or **File URL**
4. Optional: **Start/End Date**, **Days of week**, **Daily start/end time**, **Active**
5. Save

### Scheduling

Each category can have **multiple menus**. The plugin picks **one** menu for **right now**:

1. Menu is **active**
2. Within **start/end date** (if set)
3. Correct **weekday** (if selected)
4. Within **time of day** (if set)

If several menus match, the **most recently created** wins.

#### Examples

- **Weekday lunch:** Mon–Fri, 11:00–14:00  
- **Dinner:** All days, 17:00–22:00  
- **Overnight:** 22:00–02:00  

#### Empty fields

| Field | Empty means |
|-------|-------------|
| Start/end date | No date limit |
| Days of week | Every day |
| Start/end time | All day |

### Menu status in admin

- **Active now**, **Outside hours**, **Scheduled**, **Expired**, **Inactive**

---

## Online menu (Pro)

*Applies when **Menu Content Type** = Register dishes (Pro) and license is active.*

### Demo user (optional)

For training or a sandbox, create a user with the **maca Restu demo** role under **Users → Add New**. That user:

- only sees **maca Restu** in wp-admin (not Posts, Plugins, Settings, etc.)
- can edit dishes, categories, campaigns, and most menu settings
- **cannot** change secrets (payment keys, staff PIN, Meta app secret, captcha secret, etc.)
- can **view** payments and import/export screens but **cannot** save, import, or export
- has **no** access to backup, license/subscription, or legal acceptance pages

Regular **Administrators** keep full access.

### Recommended setup order

1. **Settings** – enable dish mode and set **Price Currency** (e.g. `kr`)
2. **Dish Categories** – e.g. Appetizer, Main course, Dessert, Drinks (one menu — food and drinks as categories)
3. **Allergens** – default set is pre-installed; add custom labels if needed
4. **Dishes** – add dishes, check allergens, and set **VAT code** (food / alcohol)
5. **Settings → Restaurant** – name, contact, **service type** (dine-in or takeaway), **VAT rates** (current + upcoming with own date per category), and VAT registration number
6. **Settings → Online menu & footer** – menu footer and price/VAT text (optional)

### Dish categories

1. **maca Restu → Dish Categories**
2. **Add New Dish Category**
3. Fields:
   - **Name** and **Sort Order** (lower = first on menu)
   - **Active** – show/hide the whole category
   - **Schedule** – optional start/end date, weekdays, and daily time:
     - **QR menu** (`/qrmeny/`) uses the **full** schedule (date, weekday, time)
     - **Website menu** and shortcode follow **start/end dates** only (weekdays and daily times are ignored)

Tip: use separate categories for **Lunch** (Mon–Fri 11:00–14:00) and **Dinner** (daily 17:00–22:00) instead of scheduling each dish.

### Allergens

On **first install**, **ten standard EU allergens** are created automatically with Swedish and English names in the database:

| Swedish | English |
|---------|---------|
| Gluten | Gluten |
| Mjölk | Milk |
| Ägg | Egg |
| Fisk | Fish |
| Skaldjur | Shellfish |
| Jordnötter | Peanuts |
| Nötter | Nuts |
| Soja | Soy |
| Selleri | Celery |
| Senap | Mustard |

Allergy labels on the **guest menu** follow the guest's selected language (local or English). See **Menu language** below.

1. **maca Restu → Allergens**
2. Edit existing entries or **Add New Allergen**
3. Fields: **Name (Swedish)**, **Name (English)**, and **Sort Order**
4. Check allergens on each dish under **Dishes**

You can add custom allergens or change the default labels at any time.

### Dishes

1. **maca Restu → Dishes → Add New Dish**
2. Fields:
   - **Category** – required
   - **Title**, **Description**
   - **Allergens** – check all that apply (optional, multiple allowed)
   - **Price** – optional; currency from Settings (prices **include VAT**)
   - **VAT code** – *Food / non-alcoholic* (follows service type rate) or *Alcohol* (alcohol VAT rate)
   - **Image** – optional (media library)
   - **Active** – show/hide on menu

### Search dishes

1. **maca Restu → Dishes**
2. Use the **Search dishes** field above the table
3. Filters as you type on title, category, description, price, and dish ID

### Menu preview

1. **maca Restu → Menu preview** (under **Menus** in PDF/image mode, under **Dishes** in online menu mode)
2. Pick a date and time (or **Use current time**)
3. Compare **QR menu** (left) and **Website menu** (right) side by side
4. The **Category visibility at this time** table explains why each category is shown or hidden

**PDF/image menus:** category lists with menu titles; QR uses the full schedule, the website shows categories within date range. In the **Menus** list, use **Duplicate** to copy a menu (file + schedule), and open **Preview** for schedule testing.

**Online menu:** dish and campaign preview; exclusive campaign mode may hide regular categories.

### Reorder dishes

1. **maca Restu → Dishes → Reorder dishes**
2. Drag dishes up or down **within each category** (≡ handle)
3. Order saves automatically – no manual sort numbers
4. New dishes are added at the end of their category

### Import from PDF

*Requires Pro subscription and dish mode.*

1. **maca Restu → Import from PDF** (or **Dishes → Import from PDF**)
2. Choose an existing menu PDF or upload a new file
3. Click **Analyze PDF** — the plugin tries to read title, description, and price
4. Review and edit rows; uncheck anything you do not want
5. Check **Create missing dish categories** if the PDF has new category names
6. Click **Import selected dishes**

Works best with PDFs that have selectable text. Scanned image menus are not supported.

### Import and export CSV

*Requires Pro subscription and dish mode.*

**Export**

1. **maca Restu → Import/export CSV** (or **Dishes → Import/export CSV**)
2. Click **Download CSV** — all dishes are saved as `maca-dishes-YYYY-MM-DD.csv` (UTF-8, semicolon-separated for Excel)

**Import**

1. Upload a CSV with a header row (semicolon delimiter)
2. Preview, edit if needed, select rows
3. Check **Create missing dish categories** and/or **Update existing dishes when id is set**
4. Click **Import selected rows**

**Columns (English headers):** `id`, `category`, `title`, `title_en`, `description`, `description_en`, `price`, `price_takeaway`, `takeaway_active`, `vat_code`, `image_url`, `is_active`, `allergens` (semicolon-separated names, e.g. `Gluten; Milk`), `sort_order`.

**VAT code (`vat_code`):** `food` or `alcohol`, or labels *Food / non-alcoholic* / *Alcohol*. VAT code is shown in the import preview.

**Schedule** (weekdays, times) is set on **dish categories** in admin — not per dish in CSV.

Swedish column names also work (`kategori`, `titel`, `pris`, `moms_kod`, `allergener`, etc.). Empty `id` = new dish; existing `id` updates the dish on re-import when **Update existing dishes when id is set** is checked. **Upload another file** clears the preview.

### Print menu (paper)

1. **maca Restu → Dishes → Print menu**
2. A print-friendly page opens with all **active** dishes grouped by category (titles, descriptions, prices, allergens)
3. Click **Print / Save as PDF** in the browser
4. The **menu footer** (allergy, VAT, contact, etc.) is included at the bottom when enabled under Settings

Update dishes in the database — print again when the menu changes.

### Restaurant, VAT, and service type

Under **Settings → Restaurant**:

| Field | Description |
|-------|-------------|
| **Restaurant name, address, phone, email, website** | Contact details in menu footer, print, and booking emails |
| **VAT number** | e.g. `SE123456789001` — shown in menu footer and print menu |
| **Service type** | *Dine-in* or *Takeaway* — sets the **food VAT rate** for dishes marked *Food / non-alcoholic* |
| **VAT rates** | Percentages for dine-in, takeaway, and alcohol (Sweden 2026: often 12% / 6% / 25%) |

Rates are used in the default **Price information** footer text (when no custom text is set) and in the **email order confirmation** after online payment.

### Menu footer (recommended)

At the bottom of the online menu (website, QR, and print) a **menu footer** can show legal and contact information.

Under **maca Restu → Settings** (dish mode):

| Field | Description |
|-------|-------------|
| **Menu footer** | Enable/disable (on by default) |
| **Restaurant name** | Shown in the contact block |
| **Address** | Multiple lines allowed |
| **Phone** | Clickable `tel:` link on screen, with phone icon |
| **Email** | Clickable `mailto:` link on screen, with email icon |
| **Website** | Clickable link with globe icon; empty = WordPress site URL |
| **Allergy information** | Default text or custom |
| **Price information** | e.g. *All prices include VAT.* |
| **Alcohol service** | Shows age-limit notice |
| **Print menu title** | Title on paper menu (default: restaurant name or *Our menu*) |

**Default copy (English; Swedish when site locale is `sv_SE`):**

- *Do you have allergies or special dietary requirements? Please ask our staff — we are happy to help.*
- *All prices include VAT.*
- *ID may be required when purchasing alcohol.* (when alcohol service is enabled)

### Pro settings (dish mode)

Under **maca Restu → Settings** (when dish mode is active):

| Setting | Description |
|---------|-------------|
| **Price currency** | e.g. `kr`, `SEK` |
| **Category filters** | Compact filter buttons on menu and QR page |
| **Language switcher** | Flag buttons (local / English) on menu and QR – hidden when site language is English |
| **Dual-language menus** | Show both languages at once (e.g. `Beef / Biff`) without switcher |
| **Clickable dish images** | Larger image on tap |
| **Guest dish ratings** | 1–5 stars per dish |
| **Guest order list** | Let guests mark dishes with quantity |
| **Delivery mode** | Guest screen only, waiter page, kitchen page, or both |
| **Staff PIN** | Required for waiter/kitchen pages |
| **Order status for guests** | Show progress after order is sent |
| **Exclusive campaign mode** | If an active campaign exists, show campaign dishes only |

### Campaign menus (Pro)

Use **maca Restu → Campaign menus** to create campaign periods such as *Summer menu* or *Quiz night*.

1. Set campaign name (local + English), active/inactive, and optional schedule (start/end date, weekdays, start/end time).
2. Select dishes included in the campaign (you can also assign campaigns from each dish edit page).
3. Optional: enable **Exclusive campaign mode** in Settings to show only active campaign dishes on website and QR.

When exclusive mode is active, campaign dishes are still shown inside their normal dish categories, and category filters are automatically limited to categories present in active campaign dishes.

Waiter and kitchen pages have their own URLs (slugs configurable in Settings).

**Kitchen page (KDS):** Dark **Kanban board** for **laptop and iPad** with three columns:

| Column | Order status | Actions |
|--------|--------------|---------|
| **New orders** | `new` | Accept |
| **In progress** | `accepted`, `preparing` | Start preparing |
| **Ready** | `ready` | Ready in X min (ETA) |

Each card shows table, lines, notes, **elapsed time**, and **Paid** if the guest paid online. Sidebar: clock, average time, orders today. Same staff PIN as before.

**Waiter page:** Each line shows **unit price** and **line sum** (e.g. 2×50 kr → 50 kr + 100 kr) when prices are enabled. **Mark paid** is hidden when the guest already paid online — use **Guest left** when the order is served and paid.

### How dishes appear to guests

- Dish categories in sort order
- Each dish: **image on the left** (if set), **title and description**, **price with currency on the right**
- **Allergens in italics** below the description, comma-separated (e.g. *Gluten, Lactose*)
- Only **active** dishes in **active** categories are shown
- On the **website** and shortcode, categories follow **start/end dates** (weekdays and daily times are ignored)
- On the **QR menu**, the **full category schedule** applies (date, weekday, and time); individual dishes can still be hidden with **Active**

### Table ordering (Pro)

1. Enable **Guest order list** under **Settings**
2. Guests tap **Add** on dishes → **View order** → send
3. Choose **Delivery mode:**
   - **Guest screen only** – show the order to staff on the device
   - **Waiter / Kitchen / Both** – orders go to PIN-protected staff pages
4. Optional: **Order status for guests** – progress from kitchen through served
5. Guests can **order more** during the visit (appends while order status is still *new*)

**Guest session (localStorage):** After submitting an order, a **guest token** is saved in the browser’s localStorage so the guest can follow order status on the same device. The token remains until the order is closed or deleted — it is **not** a time-limited cookie. In **private/incognito** mode, the session is lost when the tab is closed.

**Guest QR (staff):** On the **waiter page** and **kitchen view** (when order status for guests is enabled and the order is not closed), the **Guest QR** button opens a QR code for the guest to scan. The link opens the QR menu with `?maca_order=` and **restores order status** on the guest’s device — useful if localStorage was cleared, the browser changed, or the guest opened the menu in private mode. Only show the QR to the guest at the correct table.

**Change table number (staff):** If a guest ordered from the wrong table (e.g. Table 4 but is seated at Table 3), staff can correct the table on the order card on the waiter page and kitchen view — pick the new table from the dropdown (PIN required). Applies to open dine-in orders, not takeaway, and is blocked after payment is complete. The guest order status screen updates on the next poll; guests still cannot change table after submitting an order.

**QR with table:** Enter a table number under **QR Codes** before printing – guests do not need to type the table manually.

### Guest payments (Stripe & pay at table)

After submitting an order (or when it is served — per your setting), guests can pay:

| Option | Description |
|--------|-------------|
| **Pay online** | Stripe Checkout (cards, Apple/Google Pay; often Swish via Stripe) |
| **Pay with server** | Guest selects this; staff tap **Mark paid** on the waiter page |
| **Email confirmation** | Optional: guest checks *Email order confirmation* before paying online — line spec and VAT breakdown sent after payment (**not stored** in the plugin database) |
| **Split bill** | Optional: guest splits the total among several people and pays their share online (Stripe). Form fields keep split count and email while order status updates |

**Receipts:** The email is **not** an official tax receipt. Stripe processes payment; your **POS/cash register** issues the legal receipt when needed. See [PAYMENTS-GUIDE-en.md](PAYMENTS-GUIDE-en.md).

**Settings** under **maca Restu → Payments**:

1. **Pay at table** — allow manual payment (works without Stripe)
2. **When guests can pay** — *At order* or *After meal*
3. **Tips** — preset percentages or fixed amounts; optional custom amount and “no tip”
4. **Staff payment info** — show amount/time/payment ID on waiter, kitchen, or both
5. **Enable Stripe checkout** — keys + webhook (see setup guide)
6. **Setup guide (Stripe & Swish)** tab — full Stripe Dashboard steps
7. **Payment history** — submenu under Payments: filters, summary, **Export CSV** (Stripe reconciliation)

**Requirements:** table ordering with **prices** on dishes and preferably **guest order status**.

> **Note:** Your Pro license on maca.se (**Subscription**) is **not** guest payments. Use separate Stripe keys under **Payments**.

**International guests:** **Stripe** cards often work for foreign visitors. **Swish** is mainly for Swedish Swish users.

See **maca Restu → Terms & Privacy** and [docs/PAYMENTS-GUIDE-en.md](PAYMENTS-GUIDE-en.md).

---

## Table Reservation (Pro)

*Table **booking** (reserve a table in advance) is separate from table **ordering** (order food at the table).*

1. Enable **Table Reservation** under **Settings** (Pro subscription required)
2. Set **Booking button** and **Booking form title** (local + English) under **Settings → Table Reservation** – empty = default (e.g. *Book a table* / *Boka bord*)
3. Choose **Table assignment**: **Standard** (guest picks a table) or **Best-fit** (automatic assignment)
4. Configure under **maca Restu → Table Reservations**:
   - **Bookings** – pending requests, **waitlist**, confirmed by date, review/cancel; **Edit booking** on detail (name, phone, email, date, time, party size, note)
   - **Floor overview** – visual overview: all tables at a chosen time (green = free, red = occupied), time slider, drag booking to a free table
   - **Seat matrix** – all bookable seats per time slot (columns per table/part)
   - **Availability** – capacity and max bookable seats per day
   - **Tables** – numbers, seats, splittable tables
   - **Activity log** – audit trail for guest disputes: who changed what and when; filter by booking ID; browse older pages (50–500 per page)
   - **Table settings** – slot duration, booking email, **waitlist** (on/off), CAPTCHA, table assignment, **staff access** (*Booking host* role)
   - **Opening hours** and **exceptions** – weekly schedule and closed/special days (tabs here, or separate menu item for booking hosts)
5. Add to your page:
   - `[maca_table_booking]` or the **maca Table Reservation** block
   - `[maca_opening_hours]` or the **maca Opening hours** block (shows weekly hours)
6. Guest fills in the form (name, email, phone, date, time, party size) and sends a **request**
7. In **best-fit** mode the smallest free table is assigned automatically; in **standard** mode the guest picks a table
8. You confirm or cancel under **Table Reservations → Bookings** – guest receives email on receipt, confirmation, and cancellation
9. Guest can cancel via link in the confirmation email (waitlist entries too)

**Waitlist (guest):** When no table is free at the chosen time — or the day is marked *fully booked* but the restaurant is open — guests see **Join waitlist**. They enter date, time, name, **email**, and phone (no table). Guest and restaurant receive email; it is **not** a confirmed booking until staff assign a table and confirm.

**Admin – Bookings:** Pending requests appear first. **Waitlist** has its own section. Confirmed bookings filter by date. The **Floor overview** button opens the same day in the floor view. On booking detail: **Edit booking** form and **View activity log** link for that booking.

**Admin – Floor overview:** Pick date and time (slider). Each table is a card with seats in green (free) or red (occupied for the configured booking slot length). Drag the booking block (guest name) onto a green table to move the booking. **View bookings for this day** and **View booking** on each card link to the list and detail. **Change table** is also available on the booking detail screen. Under **Add booking**: check **Save as waitlist** for phone/walk-in without a table; optional **Send waitlist email**.

**Admin – Waitlist:** Open an entry → choose table → **Confirm booking** → status becomes confirmed and the guest receives a confirmation email.

**Admin – Activity log:** List of all logged events. Enter a **booking ID** to filter one booking. Choose **per page** and use **Older** / **Last** to go further back in time.

**Staff access (booking host):** Create users under **Users → Add New** and assign the **Booking host** role (described under **Table settings**). They sign in to wp-admin and see **Table Reservations** with the tabs above except **Table settings**, plus **Opening hours & exceptions** as its own submenu.

**Admin – Other:** The **Availability** tab loads on demand (AJAX) and shows capacity per day. Shortcuts to **Floor overview** appear on the **Overview** dashboard and in quick actions.

**CAPTCHA:** Optional under **Table settings** (reCAPTCHA or Cloudflare Turnstile).

**Gutenberg:** All maca blocks are under category **maca Restu**: **maca Restu menu list**, **maca Table Reservation**, **maca Opening hours**.

---

## QR code (guest menu)

1. **maca Restu → QR Codes**
2. Configure slug (default `qrmeny`), title, subtitle, logo, print size
3. **Table number** (optional, dish mode + table ordering) – e.g. `4` for table 4
4. Generate and print (one QR per table when using table numbers)

URL: `https://yoursite.com/qrmeny/`

### PDF/image mode

- Guests see **category buttons** for categories with an active menu **right now**
- Tap → PDF or image opens
- Close button returns to categories
- Nothing active → *“No menu is available right now”*
- Single category: `https://yoursite.com/qrmeny/3/` (category ID)

### Online menu mode (Pro)

- Guests see the **full dish list** immediately (grouped by dish category)
- Same layout as the website (image, title, description, price, allergens in italics)
- **Menu footer** at the bottom (allergy, VAT, contact with icons for phone, email, website, etc.)
- Category selection and scheduling are not used

---

## Info hub (Pro)

*Requires an active subscription.*

The info hub publishes **news** and **events** on your site — bilingual (local + English fields).

1. **maca Restu → Info hub** (menu item is directly after **QR Codes**)
2. Enable the module under the **Settings** tab
3. Create items under **News** and **Events**
4. Place on any page with blocks or shortcodes:
   - `[maca_info_news]` — news list or banner
   - `[maca_info_events]` — events (list or month view)
   - `[maca_info_calendar_subscribe]` — iCal subscribe buttons
5. Public calendar feed (events only): `https://yoursite.com/maca-events.ics` — works with Apple Calendar and other apps (subscribe via the block or `webcal://` link)
6. Optional — **Facebook & Instagram:**
   - **Settings** tab → **Setup guide: Facebook & Instagram** (step-by-step Meta app setup)
   - **Social media** tab — App ID/Secret, OAuth, test post, and publish log
   - Check Facebook/Instagram under **Publishing** when saving news/events (Instagram requires an image)
   - **Title** and **content** are sent as the caption; fill **Excerpt** for shorter social text
   - Already published? Check **Publish again to Facebook/Instagram** when editing

**Events:** single dates, daily/weekly/monthly recurrence, series end date, and per-occurrence exceptions (reschedule or cancel). Social posts only on the **first occurrence** of a recurring series.

**Backup:** news, events, and social log are included in ZIP export. Meta tokens restore on the same domain; after a domain move you may need to reconnect OAuth.

You can also enable the module in **Getting started → Optional Pro features**.

---

## Site chatbot / Chatt (Pro)

*Requires an active subscription.*

The chatbot answers guests from **indexed restaurant content** on your site — using your own **OpenAI API key** (BYOK). It does not replace staff, live bookings, or allergen verification.

1. **maca Restu → Chatt** (menu item is directly after **Info hub**)
2. Enable the module and enter your **OpenAI API key**
3. Build or refresh the **index** (menu/dishes, opening hours, campaigns, news/events, booking rules, menu footer, optional WordPress pages)
4. Optional: custom chat **name** and **avatar**
5. Publishing:
   - **Floating widget** on all pages (default), or
   - Shortcode `[maca_site_chat]` or Gutenberg block **maca Chatt** on selected pages

**Answers:** the chat retrieves relevant text from the index and sends the question to OpenAI (your account). Indexing and chat costs bill to your OpenAI account.

**Booking button:** when guests ask about table reservation, the chat may show a button that opens the booking form or links to the booking page.

**Source links:** up to three clickable links may appear under the answer (e.g. menu page, events/news with in-page anchors, selected WordPress pages).

**Test:** use the admin test chat before enabling for guests.

**Privacy:** inform guests that questions may be processed by OpenAI under your account — see the privacy policy.

You can also enable the module in **Getting started → Optional Pro features**.

---

## Backup (Pro plugin)

*Does **not** require a subscription – included with maca Restu Pro.*

1. **maca Restu → Backup**
2. **Create and download backup** – ZIP with all plugin data and uploaded images
3. Optional: **Daily automatic backup**, time, and **retention days**
4. **Import** – upload a backup ZIP to restore (replaces existing plugin data)

Useful when moving servers or before major changes.

---

## Menu language

Site language is set under **WordPress → Settings → General → Site Language**. maca Restu uses that as the **local language** on the menu.

### Language switcher (flags)

When the site language is **not** English, guests can switch between local language and English via small flag buttons on the **website menu** and **QR page**.

- Enable under **Settings → Menu & content → Language switcher** (on by default)
- Choice is stored in the browser (cookie)

The switcher is **hidden** when the site language is English, **Dual-language menus** is enabled, or the switcher is turned off.

### Dual-language menus

Under **Settings → Menu & content** you can enable **Dual-language menus** – both local and English text appear at once (e.g. `Beef / Biff`) without flag buttons.

### Admin – one or two languages

- **Non-English site:** Fill in both local fields and **English** fields for categories, dishes, allergens, menu footer, and table reservation
- **English site:** One field per text – English duplicate fields are hidden automatically

---

## Settings

**maca Restu → Settings**

Settings are split into **tabs** at the top of the page:

| Tab | Contents |
|-----|----------|
| **Restaurant** | Name, address, phone, email, website, VAT number, service type, VAT rates |
| **Menu & language** | Content type (PDF/image or dishes), language switcher, dual-language menus |
| **Online menu & footer** | Currency, filters, images, ratings, menu footer, print menu (dish mode only) |
| **Table ordering** | Guest order list, waiter/kitchen pages, PIN (dish mode only) |
| **Table Reservation** | Enable booking, CAPTCHA, labels, table assignment |
| **PDF menus** | Display mode, button layout, serving hours (PDF/image mode only) |

Click **Save Settings** once — all tabs are saved in the same form.

| Setting | Mode | Description |
|---------|------|-------------|
| **Menu Content Type** | All | PDF/image or dishes (Pro) |
| **Price Currency** | Dish | e.g. `kr`, `SEK`, `€` |
| **Category filters** | Dish | Compact filter buttons on menu and QR |
| **Language switcher** | Dish | Local / English flags (hidden on English sites) |
| **Dual-language menus** | Dish | Show both languages at once |
| **Clickable dish images** | Dish | Lightbox on tap |
| **Guest dish ratings** | Dish | 1–5 stars |
| **Guest order list** | Dish | Table ordering |
| **Table Reservation** | Pro | Guests book tables via shortcode/block |
| **Booking button / form title** | Pro | Button label and popup title per language |
| **Table assignment** | Pro | Standard or best-fit |
| **Menu footer** | Dish | Allergy, VAT, contact (phone, email, website), age limit |
| **Menu title** | PDF/image | Show title above file |
| **Serving hours on website** | PDF/image | Note when menu is not live |
| **Menu Display Mode** | PDF/image | Inline, popup, or new tab |
| **Button Layout** | PDF/image | Horizontal, vertical, responsive |
| **PDF Display Mode** | PDF/image | Full page or full width |

---

## Shortcode and block

All Gutenberg blocks are under category **maca Restu**.

| Block | Shortcode | Description |
|-------|-----------|-------------|
| **maca Restu menu list** | `[maca_menu_list]` | Menu (PDF/image or dish mode) |
| **maca Table Reservation** | `[maca_table_booking]` | Booking form (Pro) |
| **maca Opening hours** | `[maca_opening_hours]` | Weekly opening hours (no subscription) |
| **maca Chatt** | `[maca_site_chat]` | Guest AI chat (Pro) |

### Elementor

The menu works in **Elementor** without a dedicated widget: add the **Shortcode** widget and paste a shortcode (e.g. `[maca_menu_list]`). The same shortcodes in the table above apply to table reservation and opening hours. The **QR menu** (`/qrmeny/` or your slug) is a separate URL and is not affected by Elementor.

### PDF/image mode

```
[maca_menu_list]
```
Category buttons – click shows menu (live or latest published with serving hours).

```
[maca_menu_list buttons="false"]
```
Vertical list.

```
[maca_menu_list category="Lunch"]
```
Single category (exact name from admin).

In the **maca Restu menu list** Gutenberg block (PDF/image mode) you can pick **All categories** or a single category in the block settings.

**Website vs QR:** Website shows published menus even outside live schedule. QR shows only what is **live right now**.

### Online menu mode (Pro)

```
[maca_menu_list]
```
Shows the **full online menu** directly – no category click needed. Shortcode attributes (`category`, `buttons`) are ignored in dish mode.

The **maca Restu menu list** block behaves the same way.

### Opening hours

```
[maca_opening_hours]
```
Shows weekly opening hours from **Settings → Opening hours** (no subscription). Attributes: `title`, `show_title`, `highlight_today`, `monday_first`.

### Table Reservation (Pro)

```
[maca_table_booking]
```
Button that opens the booking form. Configure tables under **Table Reservations**; opening hours control which times are offered.

Only **times with at least one free suitable table** are shown in best-fit mode. In **standard** mode the guest picks a table.

---

## How it works (overview)

**PDF/image:** Categories → menu files → schedule → shortcode/QR picks the right menu by time.

**Online menu (Pro):** Dish categories → allergens (defaults pre-installed) → dishes → reorder → menu footer → shortcode/QR/print.

**Mobile:** Built-in PDF rendering; online menu is responsive (price aligned right of title on small screens).

---

## File upload (PDF/image)

- Drag & drop, browse, or media library  
- Formats: JPG, JPEG, PNG, GIF, PDF (WebP in many cases)

---

## Troubleshooting

| Issue | Fix |
|-------|-----|
| Cannot select dish mode | Activate Pro license under **Subscription** |
| No dishes on page | Ensure dishes are **Active** and dish mode is selected |
| Allergens not showing | Check allergens on the dish; create labels under **Allergens** |
| Wrong dish order | Use **Dishes → Reorder dishes** |
| Table order not sending | Check delivery mode; ensure dish mode and guest order list are enabled |
| Payments menu missing | Dish mode + active Pro license + **Guest order list** enabled |
| Stripe webhook errors | Verify `whsec_` and URL under **Payments**; see setup guide |
| Must accept Terms again | New legal version (e.g. 1.2) — open **Terms & Privacy** after update |
| Table Reservation not visible | Enable **Table Reservation** under Settings and activate Pro license |
| Booking CAPTCHA error | Check reCAPTCHA/Turnstile keys under Settings |
| No available booking times | Check opening hours, exceptions, and tables under **Table Reservations** |
| QR shows only order buttons | Update to latest version; hard refresh (cache) |
| QR shows no buttons (PDF) | No menu matches schedule – check time, weekday, active flag |
| PDF missing on mobile | Use HTTPS; avoid `http://` file URLs |
| `/qrmeny/` 404 | Save QR settings or **Settings → Permalinks → Save** |
| Wrong menu (PDF) | Overlapping schedules – newest menu wins |

---

### Support

Maca Development: support@maca.se
