=== Wishlist Genius Pro ===
Tags: wishlist, woocommerce, save for later
Requires at least: 7.0
Tested up to: 7.1
Requires PHP: 8.2
Stable tag: 0.3.2
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Cart save-for-later, public discovery, organization, reporting, notifications and reviewed imports.

== Description ==
Wishlist Genius Pro is a separately distributed add-on for Wishlist Genius Free. It adds cart save-for-later, public wishlist sharing and discovery, multiple lists, product-demand and attributed-order reports, consent-based price, stock, reminder, campaign and followed-list notifications, quote requests, and reviewed YITH / TI / WPC imports. Keep the matching Free plugin active.

Public beta, version 0.3.2. Requires WordPress 7.0+, WooCommerce 10.0+, PHP 8.2+ and single-site WordPress; multisite is not supported. Test on a staging store before using this early release on a live store. Check your database setup, theme, product options, cart and other extensions. A direct upgrade from version 0.1 has not been verified.

The plugin does not send store or shopper data to the developer and has no required external license connection. Optional publisher update checks and merchant-configured workflow connections are described below; they start off. Its wishlist and reporting records stay in your store database. There is no time limit or developer-account requirement for the included features. Pro notification sending starts disabled. When the merchant enables it, messages are sent through WordPress wp_mail and the store's configured mail transport, only for notification categories the shopper has selected. Optional guest product alerts require specific saved selections, separate unchecked price, back-in-stock and low-stock choices, and email confirmation. Low-stock alerts use real positive managed inventory transitions, not urgency messages generated from elapsed time. Optional guest recovery sends a short sequence only after the guest separately requests reminders and confirms their email address; offers require a separate choice. Guest signup requires HTTPS and is unavailable while store email is paused. Saving or importing a product does not subscribe anyone. Shoppers can change Email preferences or use the unsubscribe link; disabling sending stops new delivery attempts. Test mail goes only to the requesting store manager's WordPress profile address. Confirm delivery with your mail setup before enabling shopper notifications.

== Privacy ==
Wishlist data is stored in your WordPress database. Configured products additionally retain chosen add-on text and options, component choices and booking dates, resources and person counts. Raw configuration is excluded from shared item views, included in private owner and personal-data exports, and removed with wishlist erasure or retention cleanup. Vendor price/cart tokens and file uploads are not stored as wishlist configuration. This includes saved products and variations, quantities, notes, list names, sharing choices, account or guest identifiers, wishlist activity, cart-operation records, and saved-item attribution on orders. For signed-in shoppers, it records paid purchases that match their existing saved selections so purchased products can be excluded from relevant notifications. Unrelated order products are not copied into the wishlist purchase records. Store staff with the relevant WooCommerce management permission can access administrative wishlist information.

Guest wishlists use the signed wgg_guest cookie to reconnect the browser with its saved list. Its default lifetime is 30 days, configurable from 1 to 365 days. Guest data is removed by scheduled cleanup after expiry. Wishlist activity and notification jobs use the configured retention period, 90 days by default. Cart-operation records expire after one day. Account wishlists are retained until deleted. Purchase-suppression records are removed by scheduled cleanup once no matching saved selection remains; order information follows your store's order-retention settings. Scheduled cleanup depends on WordPress cron running.

Lists start private. A shopper can choose link sharing or, if the merchant enables the directory, public sharing. Shared views exclude private notes and account details. The wishlist includes export and erase controls; registered-account data and saved-item order attribution also integrate with the WordPress personal-data export and erasure tools. Store owners should explain these features, their retention choices and any configured mail provider in their own privacy policy.

Pro also stores followed-list choices, quote requests, notification preferences and delivery jobs, import references, and generated coupon information. Notification emails contain the account email address and the relevant message and saved-product details; the store's configured mail service processes those messages. Importing a wishlist does not import or grant email consent.

Optional guest recovery stores the supplied email address, requested and confirmed reminder/offer choices, their dates, an expiring confirmation hash, and an encrypted browser-access capability. Confirmation needs an explicit action; merely opening the email link does not enroll or sign in anyone. Private return links require a separate action and must be kept private. Guest recovery expires within 30 days or the existing guest wishlist lifetime, whichever is sooner. Pending confirmation expires within 24 hours. Unsubscribing stops future guest messages and revokes email return links without deleting the wishlist in the original browser. Email changes require a new confirmation.

Recovery keeps bounded saved-product cohorts, reviewed message and offer snapshots, progression/suppression records and a record of previously enrolled selections to avoid repeating the same follow-up. Its sending cap uses a salted email hash. Before sending it checks current consent, saved products and relevant paid WooCommerce orders, including guest orders matched by their confirmed email. It does not claim that a recovered sale was caused by the email. WordPress personal-data export/erasure includes verified guest wishlist records; unverified email submissions cannot expose a guest wishlist. Keep Pro active when requesting export or erasure of its additional records.


Optional product alerts retain confirmed per-product consent, observed inventory transitions and salted email-hash attribution for retained delivery history. Changing a guest address or alert selection requires stopping the existing signup and confirming a new one. Alert consent never expands automatically. Removing a saved selection, withdrawing consent, expiry or a relevant recorded purchase prevents further eligible messages. These records participate in the same retention and personal-data controls described above.

== Optional external services ==

Pro update checks are off initially. An administrator with permission to update plugins can enable them under WooCommerce > Wishlist Pro updates, or choose Check once now. Requests go to https://wishlistgenius.com/api/plugin-updates/pro and verified installers to the same host's /downloads/ path. The service receives the connection IP and Pro version in the request; no site URL, account email, license key, wishlist or shopper details are included. Hosting and service providers may retain normal access logs. Signed release information and exact installer hashes are checked before installation. Turn off the preference to stop future publisher checks and downloads; installed functionality remains available. WordPress automatic installation is a separate administrator choice. Service privacy: https://wishlistgenius.com/privacy/ . Installations older than 0.3.0 need a manual update once to add the updater.

Optional workflow connections are configured and reviewed in Integrations. The merchant chooses the HTTPS webhook destination; its provider and privacy terms depend on that choice. With current account campaign consent, the connection sends the approved wishlist-saved event metadata, product/variation IDs, time, quantity and currency, without email, owner identifiers, private notes or access tokens. Your store's connection IP is also visible to the destination. Turning the connection off or withdrawing relevant consent cancels eligible queued delivery; data already received by the destination follows that provider's retention. Requests are signed, redirects and private-network destinations are refused, and retries are bounded. Do not configure a destination without reviewing its privacy terms and updating your store notice.

The optional AutomateWoo trigger runs inside WordPress using the installed AutomateWoo plugin. Any email, external service or other action configured in an AutomateWoo workflow follows that workflow's settings and provider policies. Keep delayed workflows off until validated with your installed AutomateWoo version; Wishlist Genius rechecks consent at its supported trigger boundary but does not replace the third-party workflow engine's controls.

== Product and language compatibility ==

Standard simple products and chosen variations remain supported. Optional product adapters require the relevant vendor APIs and current validation:

* Product Add-Ons: standard non-upload choices. Changed definitions or prices require reviewing the product again. Products with upload fields are excluded.
* Product Bundles and Composite Products: complete configured parents, including child quantities, through the vendor parser and cart APIs. Components cannot be saved independently.
* Subscriptions: ordinary new simple or selected-variable subscriptions. Renewal, switching, resubscribe and other subscription-plan metadata are excluded.
* Bookings: standard dates, times, resources, persons and duration. Availability and prices are checked again when adding to cart. Saving a wishlist does not reserve a booking.
* Cart save-for-later: extra configurations must have been captured and signed while this integration was active. Older or unknown metadata keeps the cart item and asks the shopper to reconfigure it.

Verify the actual versions of your paid product extensions on staging before enabling their workflow. These adapters do not imply certification by their vendors or support for arbitrary product-option extensions. Configured totals are recalculated in the cart; base-price alerts are not used as a substitute for add-on, bundle or booking totals. Guest alert selections require an eligible standard saved selection.

Optional language/currency support stores the context of new saves and integrates with documented WPML/WCML and Polylang interfaces. Install and configure the relevant vendor plugins separately. Missing translation or currency conversion support fails safely rather than relabeling an amount from another currency. Foreign-currency price alerts stay unavailable when WooCommerce tax calculation is enabled, because a shopper’s tax/location basis must not be compared with a different background-job basis. Language and cart mapping remain separate. It does not supply translated product content or new currencies, translate merchant-written message templates, or migrate existing saved rows when enabled. Polylang product mapping does not replace a WooCommerce translation extension for stock and tax synchronization. Confirm your complete translation and currency stack before use.


Merchant workflow preferences are stored locally per administrator. Dismissals persist, and a requested advanced task is retained for seven days without recipient data or approvals. Optional local journey counts start off, expire after 90 days and can be deleted by turning the preference off. They describe this administrator's actions, not paid conversions, and are never transmitted to Wishlist Genius. Downloading them is a separate manual action. Normal WordPress scheduled cleanup removes expired task and measurement data when it runs; expired data is excluded from the interface immediately.

== Installation ==
Install WooCommerce 10.0+ on single-site WordPress, then Wishlist Genius Free 0.3.2, then this Pro plugin. Open WooCommerce > Wishlist Genius and create or select the wishlist page.

== Frequently Asked Questions ==
= What changes for earlier Free beta installations? =
Cart save-for-later and public wishlist discovery are included in Pro from 0.2.1. Earlier Free beta users can retain both at no cost with the separate Wishlist Genius Beta Features add-on supplied in the beta-upgrade kit. Install and activate that add-on before updating Free if you are not using matching Pro. Existing saved lists, quantities, notes, consent and sharing choices are retained. The add-on has no expiry, account or license-service requirement.

= How do I manage notifications? =
Overview shows status. Automations guides consent, timing, preview and activation. Upgrades retain choices. Activating one automation while sending is paused keeps other automatic types paused; eligible queued campaigns can resume. Consent remains separate.

= How do I set up recovery? =
Open Automations > Set up recovery sequence. Review the audience, timing, both messages and any optional offer, then preview and confirm. Recovery is off until explicitly enabled. Saving its configuration does not unpause store email or start a campaign. When store email is paused, review the existing sending controls separately; enabling store email can resume eligible queued campaigns.

Accounts enroll newly saved products after recovery is enabled and they have reminder consent; explicitly choosing reminders can also enroll currently saved, previously unenrolled items. Guests explicitly confirm optional signup for their current saved products. The short sequence sends one reminder and, only with separate offer consent, at most one later offer. Recovery replaces weekly reminders for participating accounts. A paid purchase of a covered product, unsubscribe, expired access or removal of saved items stops the follow-up. Settings changes stop old pending sequences rather than silently changing their message. Previously enrolled selections are not restarted by edits or renewed consent while their suppression record is retained. Erasing personal data removes that record too. Recovery uses up to 100 saved selections per cohort.

= How do campaigns and imports work? =
Review audience, message and offer before queueing a campaign. Its message and offer stay fixed; retries reuse its reference. Settings > Migration previews lists, skips duplicates and resumes batches. Source data stays unchanged.

= Does uninstall delete data? =
No, data is retained by default. To request removal, define the literal boolean WG_DELETE_DATA_ON_UNINSTALL as true before uninstalling Free. This also removes plugin settings, saved previews, generated coupons and scheduled plugin work. Store orders, products and pages remain. Removing Pro alone retains the shared wishlist data. With the explicit deletion constant enabled, Pro uninstall removes its recovery contact, sequence, delivery-cap and recovery queue records; Free uninstall removes the full plugin data, including those records and generated coupons.

= Are all product types supported? =
Simple products and selected or unselected variable products are supported. Additional add-on, bundle, booking or subscription options need dedicated adapters.

= What should I check when updating? =
Back up your database and plugin files. When updating an existing 0.2.0, 0.2.1, 0.2.2 or 0.3.0 pair, update Pro first, then Free, and keep both active. For earlier beta versions, activate Beta Features first, then update Free followed by Pro. For Free-only beta stores, activate Beta Features before updating Free to retain cart save-for-later and public discovery. Clear cached plugin scripts. Check the wishlist page, product options, cart actions, settings and email behavior on staging. When upgrading from versions before 0.3.0, Free adds an empty configuration field to existing saved items (schema 6), and Pro adds separate integration and alert tables without changing existing consent or enabling sending. Version 0.3.1 retains those schemas. Keep a database backup; do not downgrade the new schema by replacing only plugin files. Update both editions before configuring recovery. Existing settings, wishlists, consent and sharing choices remain in place.

= Is source code included? =
Yes. This ZIP includes the editable PHP, JavaScript and CSS used by the plugin; runtime files run directly without a compilation step. WordPress and WooCommerce supply their own libraries and must be installed separately. A translation template can be regenerated from this plugin directory with `wp i18n make-pot . languages/wishlist-genius-pro.pot --domain=wishlist-genius-pro`.

== Changelog ==

= 0.3.2 =
* Publisher links and optional signed Pro updates use wishlistgenius.com. Update an older pair manually once (Pro first, then Free). Wishlist data, settings and existing delivery archives are unchanged.

= 0.3.1 =
* Connected product alert setup to sending prerequisites, test mail and message activity.
* Updated Overview to explain recovery, low-stock, paused and unavailable workflows.
* Improved report empty states, matching order details and comparisons across complete reporting periods.
* Clarified completed migrations and preserved restored-settings sending pauses.

= 0.3.0 =
* Added optional guest product alert selections and real low-stock transitions with email confirmation and unsubscribe controls.
* Added product configuration, language/currency and optional workflow integrations with preserved consent and current cart validation.
* Added optional signed Pro update delivery through WordPress, without a required developer account.
* Existing sending pauses and shopper preferences remain unchanged; new connections start off.

= 0.2.2 =
* Added optional, email-confirmed guest recovery with private return links and unsubscribe controls.
* Added a reviewed reminder and optional offer sequence with purchase stops, separate offer consent and shared sending limits.
* Kept new recovery disabled by default and preserved existing email sending choices.
* Kept the Cart Block save-for-later panel synchronized with native cart changes.

= 0.2.1 =
* Cart save-for-later and public wishlist discovery now belong to the separately installed Pro add-on.
* Preserved existing saved lists and direct sharing links; earlier Free beta installations can retain these workflows with the separate no-cost Beta Features add-on.


= 0.2.0 =
* Included Pro reporting, migration, message and shopper tools in the Pro package.
* Preserved guided workflows and shared settings with the matching Free release.
* Improved validation of authenticated REST requests.


= 0.2.0-alpha.15 =
* Added a read-only overview and guided automation and campaign setup.
* Added individual automation pause controls and reviewed campaign message/offer snapshots.
* Simplified reports, moved migration into settings, and clarified delivery recovery.


= 0.2.0-alpha.14 =
* Added independent multi-list controls and services for the Pro add-on.
* Improved handling of report, import and email-queue storage failures.
* Added a separate Pro translation catalog and clearer error messages.

= 0.2.0-alpha.13 =
Validate import source schemas, reject unreadable or unsupported selections without silently changing quantities, options or notes, require new previews after validation changes, and clean up scheduled work on deactivation. Requires the matching Free release.

= 0.2.0-alpha.12 =
Restore returning guest saved states, resolve the current Free default after list deletion, and protect unsaved settings and template edits. Pro campaigns have explicit retry/conflict results and delivery health flags held or failed jobs.

= 0.2.0-alpha.11 =
Protect withdrawn product titles, enforce sold-individually cart rules, preserve saved quantities on rejection, and handle orphan variations safely.

= 0.2.0-alpha.10 =
Saved option labels, availability-aware cart actions, helpful empty states, remembered merchant sections, and rendered email preview/test of unsaved drafts.

= 0.2.0-alpha.9 =
* Cleaner, responsive wishlist cards with prominent cart and sharing actions.
* Contextual selection tools, grouped list options and privacy controls; irrelevant Free controls removed.
* Clear merchant navigation, grouped setup, accurate icon preview, and campaign review.
* Focused email templates, per-request quote actions, clearer reports and import steps.
* Preserves stored settings and data; Free schema stays at 5. Update Free and Pro together.

= 0.2.0-alpha.8 =
* Quick save, version-checked Undo, saved states, guided setup and searchable selectors.
* Pro event-driven price/stock updates, queue health, test mail and followed-list notifications.
* Pro complete paid-order pagination, conversion cohorts, currency and refund-aware totals.
* Previewed batch YITH / TI / WPC migration, resumable progress and untouched-list rollback.
* Gettext catalogs, RTL layout and richer WordPress block controls.
* Free schema 5; update Free and Pro together.

= 0.2.0-alpha.7 =
* Safer asynchronous screens, public sharing, accessibility and purchase tracking.
* Pro automation recovers from failures before transport without retrying unknown mail outcomes.

= 0.2.0-alpha.6 =
Improve variation visibility, boolean action validation, empty quotes and template-format validation. Update Free before Pro.

= 0.2.0-alpha.5 =
Improve settings and template persistence, schema upgrades, guest order-attribution export/erasure, page setup, stale-edit conflicts, in-dialog feedback, moved-selection cleanup, private-title search protection and settings exports. Free uses schema 4; update Free before Pro and clear cached storefront scripts.

= 0.2.0-alpha.4 =
Concurrent rate-limit enforcement, complete privacy cleanup/export, guest merge cleanup, usable follows and quotes, and checked administrative writes. Free upgrades its schema to version 3; update Free before Pro.

= 0.2.0-alpha.3 =
Transactional queue and import writes, reliable audience expansion while mail is disabled, and expired notification suppression. Requires Free 0.2.0-alpha.3 or compatible later 0.2.x.

= 0.2.0-alpha.2 =
Earlier cart/merge/ordering and Any-attribute notification repairs retained in alpha.3.

= 0.2.0-alpha.1 =
Initial reconstructed release. Includes whole-list cart batching, a save-time list picker, a Cart block save-for-later panel, print views and list reordering.
