=== Wedding Party RSVP – Guest List, Invitation & Event Manager ===
Contributors: brelandr
Tags: wedding, rsvp, guest list, invitation, event management
Requires at least: 6.2
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 8.5.2
License: GPLv2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html

RSVP guest list for WordPress: Party ID sign-in, meals, guest hub summary, CSV export, capacity caps, dashboard filters—track replies in one place.

== Description ==

**[Live preview: Wedding Party RSVP Pro (Premium demo on InstaWP)](https://app.instawp.io/launch?s=wedding-rsvp-pro-demo&d=v2)** — open a temporary site with the full premium plugin pre-installed; no purchase required.

Stop chasing replies across group chats and reconciling spreadsheets the week before the wedding. Wedding Party RSVP gives planners and couples a single guest list inside WordPress—every RSVP, headcount, and meal note in one place from save-the-date to seating.

**Prefer a hosted wedding website?** The optional [Wedding RSVP site builder](https://weddingrsvp.pro) at weddingrsvp.pro provisions a branded subdomain with templates and this RSVP stack included. Self-hosted WordPress (this free plugin, with or without Pro) remains fully supported.

* **Less stress for your planning team** – Shared visibility in wp-admin replaces emailed spreadsheet copies.
* **Fewer last-minute surprises** – Clear statuses and follow-up help you confirm attendance earlier for catering and rentals.
* **Confidence at the venue** – One accurate count for who is attending, meals, and plus ones.
* **Faster setup** – Getting started checklist, Next steps for pending RSVPs, straggler filters (missing email, phone, or address), plus **Live demo** (WordPress Playground) and **Try Premium** (InstaWP) links on the Plugins screen.

**Companion apps (free):** The **Wedding RSVP** iOS/Android companion works with this free plugin—coordinators and guests connect from **Wedding RSVP → Mobile App** (site URL, connect link, hub join link, or **Connect to Wedding RSVP App Network** for a short join code). No Pro license is required for core dashboard, guest list, and Party ID RSVP. **Pro** adds reminders, push alerts, photo gallery uploads, seating, and AI. Android: [Google Play](https://play.google.com/store/apps/details?id=pro.weddingrsvp.companion). **iOS is pending Apple App Store approval** (available on TestFlight until then).

Guests sign in with a **Party ID** so households RSVP together. Collect adult entrée choices and dietary notes, set **event capacity limits**, and **export** the guest list when catering or your venue needs numbers.

**Gift registry links:** Under **Wedding RSVP → Settings → Frontend Display**, add registry URLs (Amazon, Zola, etc.). Guests see them on the public RSVP page after entering their Party ID.


== Try It Live - Preview This Plugin Instantly ==

Experience Wedding Party RSVP without installation: the blueprint installs the plugin from **WordPress.org**, creates sample guests (including dietary notes and dessert choices on **DAVIS-005**), sets event details for the **guest hub**, and sets the site homepage to a **Wedding RSVP** page with the `[wedding_rsvp_form]` shortcode. Log in as **admin** / **password** to explore wp-admin (e.g. **Wedding RSVP**).

[Preview on WordPress Playground](https://playground.wordpress.net/?blueprint-url=https://raw.githubusercontent.com/brelandr/wedding-party-rsvp/main/blueprint.json)

The same blueprint ships in the plugin package as `blueprint.json` (repository root) and `assets/blueprints/blueprint.json`. WordPress.org also serves a copy from the plugin SVN for directory integration. **Example Party IDs** in the demo: `SMITH-001`, `JONES-002`, `DAVIS-005`.

**Preview the premium plugin** — try Wedding Party RSVP Pro on a temporary demo site (no purchase required; hosted by InstaWP):

[Preview Wedding Party RSVP Pro on InstaWP](https://app.instawp.io/launch?s=wedding-rsvp-pro-demo&d=v2)

For a short visual overview of setup and the admin dashboard, see the walkthrough on the [plugin information page](https://landtechwebdesigns.com/wedding-party-rsvp-wordpress-plugin/).

== Screenshots ==

1. Public RSVP: guests enter their Party ID to open the form (works with any WordPress theme).
2. Public RSVP: meal choices and dietary options after signing in with Party ID.
3. Admin dashboard with guest statistics and quick filters.
4. General settings: RSVP page URL, welcome title, and deadline.
5. Free plugin: Email and SMS screens link to Pro for batch invites (Pro adds sending from WordPress).
6. Embedding the RSVP form with the shortcode on a page.
7. Mobile-friendly guest list and actions in wp-admin.

Key Features (Free Version):

Guest Management: Add, edit, and delete unlimited guests.

Adult Menu Choices: Create and manage entrée options for your reception.

Dietary Restrictions: Guests can note allergies (Gluten Free, Vegan, etc.).

Dashboard Statistics: View real-time stats on accepted, declined, and pending RSVPs.

Mobile Friendly: Fully responsive Admin Dashboard.

Companion Mobile Apps: Free iOS and Android Wedding RSVP apps connect to this plugin via **Wedding RSVP → Mobile App**—no Pro license and no separate app subscription. Coordinators use Sign in on website; guests use their Party ID. Android is on Google Play; **iOS is pending Apple App Store approval**.

Security: Built with WordPress best practices for data sanitization and escaping.

**Admin menu visibility:** On **Wedding RSVP → Settings**, administrators can turn individual tools on or off (paste import, menu editor, gifts/thank-you, client summary, vendor packet, follow-up & day-of, caterer portal, audit log, and more) for a cleaner wp-admin. Pro sites use Pro’s module settings when licensed.

**Magic links (caterer portal & client summary):** Shared read-only URLs use a long random token in the link, not a WordPress login or nonce. Protect them like passwords: use HTTPS only, avoid sharing in public channels, revoke or regenerate if a link leaks, and set an expiry when possible.

Pro Features:
Upgrade to the Pro version to unlock:

Child Management: Track children and assign specific child meals.

Full Menu Course: Add Appetizers, Hors d'oeuvres, and Desserts (Pro 2.2.4+) with customizable menu section labels on the public form.

Registry Setup Wizard: Guided steps on **Registry hub** to pick stores (Amazon, Target, Walmart, Zola, and more), open each store’s registry-creation page, paste the links back, and show them on your RSVP page.

On-site Wish List: Add individual gifts from any store (name/photo/price can auto-fill from the product page). Guests reserve or mark gifts purchased on the RSVP page so nobody double-gifts.

Stripe Cash Fund: Suggested cash tiers with optional Contribute buttons via the couple’s own Stripe Checkout keys.

Gift CSV Import: Record gifts bought elsewhere onto guest rows (with a dry-run preview).

Guest Photo Gallery: Guests signed in with a Party ID in the free Wedding RSVP companion app can take or choose photos and upload them to your wedding (or other event) albums on your WordPress site. Moderators approve photos under **Wedding RSVP → Photo Gallery**; approved images can appear on the frontend with `[wpr_pro_guest_gallery]`.

App Network short join codes & extras: With Pro, **Wedding RSVP → Mobile App → Connect to Wedding RSVP App Network** registers your site on weddingrsvp.pro for a short join code and directory listing; Pro also unlocks reminders, push, seating, and AI in the app.

Admin Notes & Table Numbers: Organize your seating chart and keep private notes.

Email & SMS Invites: Send invitations directly from the dashboard.

Customization: Toggle visibility of fields and customize colors/fonts.

In-admin help: **Wedding RSVP → Help** documents free gift registries and explains these Pro gift tools with clear “Available in Pro” notes (even before you upgrade).

== How to Purchase Pro ==

Go to https://landtechwebdesigns.com/wedding-party-rsvp-wordpress-plugin/

Purchase the license key to unlock the full suite of features.

== Installation ==

Upload the wedding-party-rsvp folder to the /wp-content/plugins/ directory.

Activate the plugin through the 'Plugins' menu in WordPress.

Create a new Page (e.g., "RSVP").

Add the shortcode [wedding_rsvp_form] to the page content.

Go to Wedding RSVP -> Settings and set the "RSVP Page URL" to the link of the page you just created.

== Frequently Asked Questions ==

= Can I use this for events other than weddings? =
Yes! While tailored for weddings, it works for any event requiring basic RSVP tracking.

= How do I reset the guest list? =
Go to Settings and scroll to the bottom danger zone. Click **Erase all data & reset plugin** (exports first if you need a backup).

= Do I need Wedding Party RSVP Pro to use the companion apps? =
No. The free **Wedding RSVP** iOS/Android apps work with this free plugin. Open **Wedding RSVP → Mobile App** for your site URL, connect link, hub join link, or **Connect to Wedding RSVP App Network** (short join code; hub labels the listing Free). Coordinators sign in on the website; guests use a Party ID. Android is on [Google Play](https://play.google.com/store/apps/details?id=pro.weddingrsvp.companion); **iOS is pending Apple App Store approval** (TestFlight until then). **Pro** is optional and adds photo gallery uploads, reminders, push alerts, seating, and AI.

= Is there a Pro version? =
Yes. [Wedding Party RSVP Pro](https://landtechwebdesigns.com/wedding-party-rsvp-wordpress-plugin/) adds child guests, full menu courses (appetizers, hors d'oeuvres, desserts), customizable menu labels, seating notes, batch email and SMS, deeper styling, guest photo galleries via the free Wedding RSVP companion apps, a registry setup wizard, an on-site wish list guests can reserve, Stripe cash fund tiers, and gift CSV import. The free plugin covers unlimited guests, adult entrées, dietary options, CSV import/export, guest hub summaries, gift registry links (with optional Amazon Associates / Skimlinks), and the public RSVP form. Open **Wedding RSVP → Help** in wp-admin for free guides plus plain-English Pro gift feature notes.

= Do guests need a WordPress account to RSVP? =
No. Guests use a Party ID (invite code) you assign—no user registration required.

= Does this work with the block editor? =
Yes. Add a Shortcode block (or the classic block) and paste `[wedding_rsvp_form]`. A block pattern is also available in the editor when the plugin is active.

= What PHP and WordPress versions do I need? =
Requires **WordPress 6.2** or later, **PHP 7.4** or later (aligned with WordPress 7 dropping PHP 7.2–7.3), and the plugin readme lists **Tested up to WordPress 7.1**. Use **PHP 8.x** on your host where possible—WordPress recommends current PHP releases for performance and security.

= Do you offer a hosted wedding website? =
Yes. If you prefer not to host WordPress yourself, the [Wedding RSVP site builder](https://weddingrsvp.pro) at **weddingrsvp.pro** can create a wedding site on a subdomain with templates and the RSVP plugins included. Couples and planners who already have WordPress can keep using this free plugin (and optional Pro) on their own site—the hosted builder is optional, not required.

= Can I use Wedding Party RSVP Pro together with the free plugin? =
Yes. Keep both plugins active: the free plugin provides the core guest list and RSVP form; Pro extends it with premium features when your license is valid.

= What guest data does Wedding Party RSVP store? =
Guest records live in your WordPress database (a custom table, usually `wp_wedding_rsvps` with your site prefix). Typical fields include Party ID, name, RSVP status, meal choice, and anything guests enter on the public form (for example email, phone, dietary notes, allergies, song request, message, address). Only users who can manage the plugin in wp-admin can view or edit that list.

= How can I export or erase a guest’s personal data? =
In wp-admin, use **Tools → Export Personal Data** and **Tools → Erase Personal Data** (WordPress 4.9.6+). This plugin registers an exporter and an eraser that match guest rows by **email address** stored on the guest record. Erasing removes all guest rows that use that email from the RSVP table—use only when appropriate for your jurisdiction and event.

= Can guests add the event to their calendar? =
Yes. In **Settings → Logistics**, set event title, start time, and optional venue; when enabled, guests who complete RSVP can download an **.ics** file (“Add to calendar”).

= How do I add gift registry links to the RSVP page? =
In **Wedding RSVP → Settings** (free) use **Frontend Display**; with **Pro**, use **Settings → Frontend text**. Enter an optional heading and one or more link labels with full **https** URLs (for example Amazon or Zola). Guests see them after signing in with their Party ID. For a step-by-step walkthrough (and notes on Pro tools), open **Wedding RSVP → Help**.

= Does Pro help me set up Amazon, Target, Walmart, and other registries? =
Yes — that is a **Pro** feature. Wedding Party RSVP Pro’s **Registry setup wizard** (on **Wedding RSVP → Registry hub**) walks you through picking stores, opening each store’s registry-creation page, pasting the share links back, and adding them to your RSVP page. The free plugin still lets you paste those links by hand under Settings. Read the wizard guide under **Wedding RSVP → Help** (marked Available in Pro), or the full manual under **Wedding RSVP → Documentation** when Pro is licensed.

= Can guests reserve gifts so nobody buys the same thing twice? =
That is a **Pro** feature called the **wish list** (on-site item registry). With Pro, you add individual gifts from any store on **Registry hub**; guests reserve or mark them purchased on the RSVP page. Free users can still list store registry links. See **Wedding RSVP → Help → Wish list** for the Pro guide (Available in Pro).

= Can I use my Amazon Associates (affiliate) tag on Amazon registry links? =
Yes, as an optional opt-in (off by default). Under the gift registry settings, check **Append my Amazon Associates tag** and enter your tracking ID (for example `yoursite-20`). Registry links that point to an Amazon site then get `?tag=your-id` appended so qualifying purchases credit your Associates account; links that already contain a `tag` parameter are left unchanged. **Affiliate disclosure:** whenever tagging is active, the plugin automatically displays “As an Amazon Associate I earn from qualifying purchases.” directly below the registry links, as required by the Amazon Associates Operating Agreement. **Your own ID is required on self-hosted sites:** if the checkbox is on but no tag is entered, tagging stays inactive (nothing is appended) and the settings screen shows a reminder with a sign-up link. Exception: on sites hosted on the plugin author’s **weddingrsvp.pro** network (sites the author owns and operates), the network’s Associates ID (`weddingrsvp-20`) is used automatically when the field is blank; this is stated next to the setting. The plugin itself contacts no Amazon API—the tag is only appended to outbound links you added.

= Can I earn commissions on non-Amazon registry links with Skimlinks? =
Yes, as an optional opt-in (off by default). Under the gift registry settings, check **Turn non-Amazon registry links into Skimlinks affiliate links** and enter your Skimlinks publisher ID (for example `123456X1234567`). Registry links pointing at stores in the Skimlinks merchant network (Target, Zola, Crate & Barrel, and thousands more — Amazon is not included) are then routed through the documented Skimlinks redirect (`go.skimresources.com`) so qualifying purchases credit your Skimlinks account. **No Skimlinks JavaScript is loaded** — only the outbound link URL changes. **Affiliate disclosure:** whenever wrapping is active, the plugin automatically displays an affiliate disclosure sentence below the registry links, as required by the FTC and Skimlinks publisher terms. **Your own publisher ID is required on self-hosted sites** and your domain must be registered in your Skimlinks account — commissions go to the account that owns the ID; if the checkbox is on but no ID is entered, wrapping stays inactive and the settings screen shows a reminder with a sign-up link. Exception: on sites hosted on the plugin author’s **weddingrsvp.pro** network (sites the author owns, operates, and has registered with Skimlinks), the network’s publisher ID is used automatically when the field is blank; this is stated next to the setting. Amazon links keep using the separate Amazon Associates option above.

= How do I paste a guest list instead of CSV? =
In **Wedding RSVP → Paste Guest List** (admin menu), paste names, emails, or phone lines, preview rows, then import. Imports are capped per request and require an administrator; see the on-screen notice after import.

= What is the Party ID preview on the RSVP page? =
When your site supports the Interactivity API, guests may see a short hint after typing a Party ID. The browser calls the read-only REST route `wgrsvp/v1/party-preview`, which returns only whether the party exists, a guest count, and up to three first-name tokens (not full PII). Requests are rate-limited per IP to reduce brute-force guessing; adjust with the `wgrsvp_party_preview_rate_limit_max` filter if needed.

= How do I use the DataViews guest table on the Wedding Dashboard? =
When the admin bundle is built (`npm run build` in the plugin directory), **Wedding RSVP → Wedding Dashboard** opens the **DataViews** read-only table by default. Use **Classic table** / **DataViews table** on the dashboard toolbar to switch views; your choice is saved per user. The classic list remains below for bulk actions and editing. Override once with `?wgrsvp_dataview=1` or `?wgrsvp_dataview=0`.

== External Services ==

This plugin does not call third-party APIs for core RSVP storage. Optional behaviors:

* **Party ID preview (public REST)** — The `wgrsvp/v1/party-preview` endpoint is served by your own WordPress site. It is rate-limited per visitor IP (default 40 requests per minute; filter `wgrsvp_party_preview_rate_limit_max`). No off-site service is contacted for this feature.

* **InstaWP (optional Pro preview)** — The readme **Try It Live** section and wp-admin may link to **InstaWP** (`app.instawp.io`) so administrators or visitors can open a **temporary** WordPress site preloaded with **Wedding Party RSVP Pro** to evaluate premium features. The user’s browser navigates to InstaWP; provisioning, session length, and data handling are governed by InstaWP, not by this plugin’s server-side code. See [InstaWP Terms of Service](https://instawp.com/terms/) and [InstaWP Privacy Policy](https://instawp.com/privacy-policy/).

* **WordPress AI Client (optional)** — **This feature is available on WordPress 7.0 and later** (the WordPress AI Client provides `wp_ai_client_prompt`; configure your provider under **Settings → Connectors** in WordPress). On older versions, AI wording controls are not shown. On **Wedding RSVP → General Settings**, “AI wording…” sends only the assistant instructions you trigger plus optional notes you type in the browser to the AI **provider configured in WordPress**. No guest list data is sent. Add your provider’s Terms and Privacy links to your site policies when you enable AI.

* **Guest Hub — Google Maps (optional link)** — After a successful RSVP (Interactivity flow) or on the thank-you page, the **Guest Hub** can show **Open in Google Maps** when **Settings → Logistics** includes an event location/venue. The plugin builds a standard `https://www.google.com/maps/search/?api=1&query=…` URL using that text; opening the link is done in the guest’s browser and sends the encoded venue string to **Google**. No server-to-server call is made by the plugin for this link. See [Google Maps Platform Terms of Service](https://developers.google.com/maps/terms) and [Google Privacy Policy](https://policies.google.com/privacy).

* **RSVP deadline reminder emails (optional)** — When enabled under **Settings → Logistics**, a daily scheduled task may send **wp_mail** reminders to guests with a pending RSVP (and optionally declined) on the days you configure before the **RSVP deadline**. Delivery uses your WordPress email configuration (SMTP plugin, host mail, etc.); no separate third-party API is required for email. **Wedding Party RSVP Pro** can optionally send the same guests an **SMS** via **Twilio** when that add-on is configured (see Pro readme External Services).

* **Multi-step drip journey emails (optional)** — When enabled under **Settings → Logistics**, an hourly scheduled task may send sequenced **wp_mail** follow-ups (up to a small fixed step count) to guests in a chosen segment. Delivery uses your WordPress email configuration; no separate third-party API is required for email. When the drip journey is enabled, it supersedes the legacy daily deadline reminder cron. SMS drip steps require **Wedding Party RSVP Pro** + Twilio (see Pro readme). Deleting the plugin drops drip tables/options; Erase Personal Data also removes drip rows for matching guest IDs.

* **Amazon Associates (optional, off by default)** — When the site owner enables Amazon Associates under gift registry settings and provides their Associate tag, Amazon registry links are rewritten in the guest’s browser to include the `tag=` query parameter. Opening such a link sends the guest’s browser to **Amazon**; standard request data is processed by Amazon under its policies. The plugin makes **no server-to-server calls** to Amazon for this feature. An Amazon Associates disclosure is shown automatically below the registry links while the tag is active. See the [Amazon Associates Operating Agreement](https://affiliate-program.amazon.com/help/operating/agreement) and [Amazon Privacy Notice](https://www.amazon.com/gp/help/customer/display.html?nodeId=468496).

* **Skimlinks affiliate links (optional, off by default)** — When the site owner enables the Skimlinks option under the gift registry settings and provides their Skimlinks publisher ID, non-Amazon registry links are rewritten to the documented Skimlinks redirect format (`https://go.skimresources.com/?id=…&url=…`). When a guest clicks such a link, their browser is sent to **Skimlinks** (Taboola), which records the click for commission attribution and redirects to the destination store; the destination URL and standard request data (such as IP address and user agent) are processed by Skimlinks at that time. The plugin makes **no server-to-server calls** to Skimlinks and loads **no Skimlinks JavaScript**. An affiliate disclosure is shown automatically below the registry links while the feature is active. See the [Skimlinks Publisher Terms](https://skimlinks.com/publisher-terms-and-conditions/) and [Skimlinks Privacy Policy](https://skimlinks.com/privacy-policies/).

* **Order prints partners (optional admin links)** — The guest list may show **Order prints** links to **Printful**, **Canva**, and **Gelato** so coordinators can order place cards and related stationery after exporting CSV/PDF. Opening a link is done in the administrator’s browser; the plugin makes **no server-to-server calls** and does **not** upload the guest list automatically. Links may include affiliate/referral tracking so **Land Tech Web Designs** can earn a commission at no extra cost to the site; an affiliate disclosure is shown with the panel. Destination URLs can be configured on the **weddingrsvp.pro** hub (Pro → Mobile App → hub settings). Site owners can hide the panel under **Settings → Frontend Display**. See [Printful Terms](https://www.printful.com/policies/terms-of-service), [Canva Terms](https://www.canva.com/policies/terms-of-use/), and [Gelato Terms](https://www.gelato.com/legal/terms).

* **Caterer portal (optional magic link)** — **Wedding RSVP → Caterer portal** lets administrators generate a secret URL that shows a **read-only** meal summary by table on your own site. No off-site API is called; anyone with the link can view the summary until you revoke or regenerate the token.

* **Client summary link (optional magic link)** — **Wedding RSVP → Client summary** lets administrators generate a secret URL that shows **aggregate** RSVP and meal/dietary **counts** on your own site (no guest names). No off-site API is called; anyone with the link can view the summary until you revoke or regenerate the token.

* **Wedding RSVP companion hub (optional)** — **Wedding RSVP → Mobile App** can **Connect to Wedding RSVP App Network**, which sends registration metadata to **https://weddingrsvp.pro** (`POST /wp-json/wpr-pro/v1/network/register`): site URL, wedding/party display name, optional partner names, optional logo URL, and optional city/state/ZIP. The hub verifies this site via `wgrsvp/v1/app-config`, stores directory metadata only (no guest list), and records tier **free**. Pairing without registration still works via site URL, connect link, or `/app/join?url=…`. When Pro is active, use Pro’s Mobile App Connect instead (hub records Pro). [Land Tech Privacy Policy](https://landtechwebdesigns.com/privacy-policy/)

* **Google reCAPTCHA v3 (optional guestbook)** — When reCAPTCHA v3 site and secret keys are available (Guestbook settings override, or inherited from **WSB Hub → Connection** on the same site), the public guestbook loads Google’s script from `https://www.google.com/recaptcha/api.js?render=…` and verifies submissions via `https://www.google.com/recaptcha/api/siteverify` (score + action `wgrsvp_guestbook`). Google may receive the captcha token and visitor IP at verify time. See [Google reCAPTCHA Terms](https://policies.google.com/terms) and [Google Privacy Policy](https://policies.google.com/privacy).

* **Cloudflare Turnstile (optional guestbook backup)** — When Turnstile site and secret keys are configured locally or on **WSB Hub → Connection** (used if Google is not set, or if reCAPTCHA fails to run), the guestbook loads `https://challenges.cloudflare.com/turnstile/v0/api.js` and verifies via `https://challenges.cloudflare.com/turnstile/v0/siteverify`. Cloudflare may receive the token and visitor IP at verify time. See [Cloudflare Terms](https://www.cloudflare.com/website-terms/) and [Cloudflare Privacy Policy](https://www.cloudflare.com/privacypolicy/).

== Third-party libraries ==

This plugin bundles **FPDF** (version 1.86, © Olivier Plathey) under `includes/lib/fpdf/` for optional **Export check-in PDF** in the guest list. FPDF is free software; see the header comment in `fpdf.php` for license terms.

== Changelog ==
= 8.5.2 =

* **Add: Connect to Wedding RSVP App Network** — Free sites can register on weddingrsvp.pro from **Wedding RSVP → Mobile App** for short join codes; the hub stores a verified Free tier from `wgrsvp/v1/app-config`.
* **Docs: Companion apps** — Clarify free pairing; note **iOS is pending Apple App Store approval** (Android on Google Play; TestFlight until App Store release).

= 8.5.1 =

* **Clarify: Companion apps work with the free plugin** — Readme, FAQ, and admin notice no longer imply Pro is required for the Wedding RSVP mobile apps. Core dashboard, guest list, and Party ID RSVP use `wgrsvp/v1`; Pro remains optional for gallery, reminders, push, seating, AI, and App Network short codes.

= 8.5.0 =

* **Add: Free companion mobile API** — `wgrsvp/v1` app-config, website connect + Application Password claim, coordinator dashboard/guests, guest Party ID session/RSVP, and account deletion for the Wedding RSVP companion app. Pro sites continue to use the richer `wpr-pro/v1` surface when licensed.
* **Add: Wedding RSVP → Mobile App** admin screen with join/connect instructions.

= 8.4.0 =

* **Add: SelfStorage-style Help documentation hub** — Wedding RSVP → Help opens card guides (Quick Start, Gutenberg Blocks, Shortcodes). Click a card to read full instructions; block overview links open per-block guides.
* **Add: Per-block documentation** for all free Gutenberg blocks (RSVP form, Guest Hub, Guestbook, Itinerary, Travel, Thank-you checklist).
* **Improve: Distribution zip** ships `admin-docs/` markdown for in-admin Help (developer `docs/` still excluded).

= 8.3.9 =

* **Fix: Redirect URL carries thank-you link parameters** — After RSVP, guests redirected to your custom thank-you page receive signed `party_id` / thank-you args so `[wgrsvp_guest_hub]` (and Pro `[wpr_pro_rsvp_status]`) can show their household status.

= 8.3.8 =

* **Add: Customizable travel UI labels** — Wedding RSVP → Travel (public) can set empty-state message, group-code / book-by labels, and Copy/Copied button text for `[wgrsvp_travel]`. Guest hub uses the configured book button and label strings.
* **Improve: Distribution zip scripts** — Hard-fail verification so Pro Dist zips never ship `companion/`, `docs/`, or `scripts/` (avoids WordPress “files could not be copied” update failures).

= 8.3.7 =

* **Compatibility** — Confirmed tested with WordPress 7.1 (readme `Tested up to: 7.1`).
* **Docs** — FAQ + Description note about the optional hosted wedding site builder at [weddingrsvp.pro](https://weddingrsvp.pro).

= 8.3.6 =

* **Add: Travel book CTA + copyable group code** — `[wgrsvp_travel]` shows a Book hotel button when a hotel URL is set, and a Copy code control for the group code. Filter `wgrsvp_public_party_rsvp_url` lets Pro rewrite guest invite links (e-invite).

= 8.3.5 =

* **Fix: Guestbook captcha uses reCAPTCHA v3** — Matches WSB Hub keys; empty Guestbook fields inherit `wsb_hub_recaptcha_*` / Turnstile keys from **WSB Hub → Connection**. Invisible v3 execute on submit; Turnstile remains the backup.

= 8.3.4 =

* **Add: Guestbook captcha** — Optional Google reCAPTCHA (primary) with Cloudflare Turnstile backup under Settings → Guestbook spam protection. Existing honeypot, rate limit, and moderation remain.

= 8.3.3 =

* **Fix: Itinerary punctuation** — `[wgrsvp_itinerary]` inserts `, ` between the time and location so lines read “4:00 pm, The Rose Garden…”.

= 8.3.2 =

* **Add: Admin menu approval badges** — Red pending counts on Guestbook (and top-level Wedding RSVP). Filter `wgrsvp_admin_menu_badges` lets Pro add Photo Gallery and other queues; collapsed group headers show summed counts.

= 8.3.1 =

* **Add: Collapsible admin menu groups** — Under Wedding RSVP, secondary screens fold into Guests & seating, Planning, and Guest experience & reports so Free+Pro sidebars stay usable without zooming. Core items stay pinned; open state persists in the browser; filter `wgrsvp_admin_menu_groups` for Pro/custom membership.

= 8.3.0 =

* **Add: Digital guestbook** — `[wgrsvp_guestbook]` shortcode/block with moderated public messages, admin approve/spam/delete, rate limit, and Pro hooks.
* **Add: Public itinerary & travel** — `[wgrsvp_itinerary]` and `[wgrsvp_travel]` shortcodes/blocks for marketing pages; Free travel settings; Pro can enrich via filters.
* **Privacy** — Suggested policy text covers guestbook storage.

= 8.2.15 =

* **Add: Affiliate hop helper** — `wgrsvp_affiliate_hop_url()` and Order prints links prefer `https://{wsb_platform_hostname}/wsb-aff/{vendor}` so product affiliate attribution stays on the weddingrsvp.pro subdomain when a custom domain is attached. Optional Amazon partner row when synced from the hub.

= 8.2.14 =

* **Fix: Mixed households** — Guest list health tile opens the guest list (grouped by party) instead of Follow-up & day-of, so it works when that menu is hidden.
* **Fix: Allergies health tile** — Counts and lists Accepted guests with notes in Allergies or Dietary restrictions.
* **Add: Song requests** — New **Wedding RSVP → Song requests** report (search + CSV) for DJ/band playlists from RSVP form submissions.
* **Compatibility** — Pairs with Wedding Party RSVP Pro **2.4.1** (dashboard cache bust + sub-event summary count fix).

= 8.2.13 =

* **Compatibility** — Documented pairing with Wedding Party RSVP Pro **2.4.0** (Registry setup wizard and on-site wish list on the Registry hub; Pro setup-guide steps and hub Order prints affiliate URLs).
* **Docs** — Description and Help pointers clarify free gift-registry links vs Pro registry tools.

= 8.2.12 =

* **Fix: Settings save buttons** — Automatic guest reminders no longer sit in the middle of the general Settings form with a primary Save button that looked like it saved gift registries / Amazon links. Reminder series moved below **Save Settings**, with an extra **Save Settings** control under Frontend Display (registries). Reminder fields save via their own button to `admin-post` (no nested-form breakage).
* **UX** — Plain-language “Automatic guest reminders” copy explains the feature for non-developers; clearer who/when/message labels.
* **Setup guide** — New **Wedding RSVP → Setup guide** checklist for first-time coordinators (RSVP page, menus, guests, testing, optional reminders).
* **Order prints** — Optional partner links (Printful, Canva, Gelato) after place-card export; documented under External Services / Help.
* **Guest table** — Dietary, allergy, and table filters use dropdowns fed from guest data.
* **Settings** — Configurable dietary / allergy option lists and labels for the public RSVP form.

= 8.2.11 =

* **Help & Documentation** — New **Wedding RSVP → Help** admin page: guides for free gift registry links, Amazon Associates, and Skimlinks, plus plain-English docs for Pro gift tools (registry setup wizard, wish list, Stripe cash fund, gift CSV import) clearly marked **Available in Pro**. When Pro Documentation is present, Help links to the full Pro manuals.
* **Settings** — Gift registry section links to Help and notes Pro wizard / wish list when Pro is not active.
* **Address focus** — Deep-link query args scroll the mailing address field into view on the public RSVP form (when Pro address campaign is not handling the same args).
* **Compliance** — Named REST permission callback for public party-preview; Interactivity / WP 7.0 AI helpers gated with `function_exists`; drip / uninstall / cache PHPCS hardening; External Services notes for affiliate registry options.
* **Docs** — FAQ and Pro Features list updated for the registry wizard and wish list.

= 8.2.10 =

* **Companion apps** — Updated dismissible admin notice: the free Wedding RSVP app is live on [Google Play](https://play.google.com/store/apps/details?id=pro.weddingrsvp.companion); iOS is available via TestFlight and should reach the Apple App Store soon. Coordinators and guests use the apps with Wedding Party RSVP Pro.
* **Docs** — Highlight Pro guest photo galleries: guests can capture photos in the companion app and upload them to event albums on the WordPress site for moderator review and optional frontend display.

= 8.2.9 =

* **Compatibility** — Confirmed tested with WordPress 7.0.x (readme `Tested up to: 7.0`).
* **Companion apps** — Dismissible admin notice: free iPhone (App Store) and Android (Google Play) companion apps are in beta and expected generally available in a couple of weeks; coordinators and guests use them with Wedding Party RSVP Pro.

= 8.2.8 =

* **Dashboard contrast** — Menu Breakdown meal filter chips use high-contrast dark text on light gray backgrounds (`#1d2327` on `#f0f0f1`). Fixes unreadable blue-on-blue labels under the Modern admin color scheme (`admin-color-modern`) until hover.

= 8.2.7 =

* **Dashboard contrast** — Menu Breakdown meal filter chips use high-contrast dark text on light gray backgrounds. Fixes unreadable blue-on-blue labels under the Modern admin color scheme (`admin-color-modern`) until hover.

= 8.2.6 =

* **Abilities API** — Register the `wedding-party-rsvp` ability category on `wp_abilities_api_categories_init` (required since WordPress 6.9) before registering `wedding-party-rsvp/ai-wording` on `wp_abilities_api_init`. Stops `_doing_it_wrong` notices when `WP_DEBUG` is on.

= 8.2.5 =

* **Guest table schema** — Adds optional `dessert_choice` column (used by Wedding Party RSVP Pro 2.2.4+ for dessert selections on the public RSVP form). Guest hub, dashboard inline meal display, CSV export, audit trail, and guest-rows REST allowlist updated accordingly.
* **Playground blueprint** — Demo seeds event details for the guest hub, sample dessert choices on Party ID **DAVIS-005**, and updated RSVP page copy describing the guest hub flow.

= 8.2.4 =

* **RSVP nonce refresh** — Fixes intermittent "Security check failed. Please open this page again and try once more" when guests enter their Party ID on hosts with full-page cache (GoDaddy Managed WordPress, Cloudflare, etc.). Public RSVP pages now fetch fresh form nonces via AJAX on load, when the tab becomes visible again, and when restored from back-forward cache; classic form submit waits for a fresh token if the page load was slow. Also refreshes nonces before Interactivity API RSVP submit. Works with free and Pro frontend forms. Filters: `wgrsvp_enable_rsvp_nonce_refresh`, `wgrsvp_rsvp_refresh_nonces`.

= 8.2.3 =

* **RSVP cache hardening** — Stronger no-cache for Cloudflare, GoDaddy gateway, and Elementor-built RSVP pages: flags `DONOTCACHEPAGE` on `init`, sends `CDN-Cache-Control` / `Cloudflare-CDN-Cache-Control: no-store` on `send_headers`, detects Elementor `_elementor_data` shortcode widgets, and matches common `/rsvp/` page paths when RSVP Page URL is unset. Filter: `wgrsvp_rsvp_page_path_slugs`.

= 8.2.2 =

* **RSVP cache fix** — Public RSVP pages (shortcode, block, or configured RSVP Page URL) now send no-cache headers and opt out of LiteSpeed Cache and other full-page cache plugins. Fixes intermittent "Security check failed." when hosts such as Hostinger or CDNs (e.g. Cloudflare) serve stale HTML with expired form nonces. Filter: `wgrsvp_should_nocache_rsvp_page`.

= 8.2.1 =

* **Security & standards hardening** — Global audit of inbound/outbound data handling: stricter input sanitization on settings saves, late escaping verified across all admin output, and the Ops Center confirm dialog moved from an inline handler to an enqueued script (`wgrsvp-confirm.js`).
* **Code quality** — WordPress Coding Standards pass: completed missing DocBlocks, prefixed all globals, and resolved all PHPCS errors repo-wide.

= 8.2.0 =

* **Magic-link RSVP URLs** — Reminder emails, invite `{rsvp_link}` tags, and admin **Copy link** now append a signed `wgrsvp_t` token (stateless HMAC, `wp_salt`-based). Guests landing with a valid token see a personalized "We found your invitation" state; plain `?party_id=` links keep working. Filter: `wgrsvp_magic_link_url`.
* **Send reminder now** — Follow-up & day-of → Follow-up queue gains a one-click reminder blast to all non-responders with email (recipient count preview, confirm dialog, `manage_options` + nonce, 6-hour throttle, per-guest dedupe separate from the scheduled nudges).
* **SMS reminder opt-in** — New `sms_opt_in` guest column (schema v4 via dbDelta), "Text me reminders" checkbox next to the RSVP form phone field, inline opt-in toggle on the admin guest list, and an **SMS opt-in** column in the CSV export. The free plugin stores consent only; sending requires Wedding Party RSVP Pro.
* **Guest table page** — The read-only DataViews guest table (and its quick filters) moved from the Wedding Dashboard to its own **Guest table** submenu page; the dashboard keeps the classic editable list and links to the new page. The per-user DataViews/classic toggle was removed.

= 8.1.1 =

* **Block inserter fix** — RSVP form, Guest Hub, and Thank-you checklist blocks now register a block editor script and appear under a **Wedding Party RSVP** inserter category (PHP-only blocks were not discoverable in Gutenberg without `editorScript`).
* **Block patterns** — Patterns tab adds **RSVP form (block)** and **Guest Hub (block)** under **Wedding Party RSVP** for faster page setup.

= 8.1.0 =

* **Abilities API** — Registers `wedding-party-rsvp/ai-wording` when WordPress 7.0+ Abilities API is available (AJAX paths remain primary).
* **Block registration** — Centralized `WGRSVP_Blocks` registers RSVP form, guest hub, and thank-you checklist dynamic blocks (PHP `render.php` only).
* **AI model preference** — Optional model slug on General Settings; passed to `using_model_preference()` when supported.

= Earlier releases =

See previous plugin tags (SVN/GitHub) for changelog entries before 8.1.0.
