=== IPS Order Wishlist ===
Contributors: schmitzp
Tags: woocommerce, wishlist, my-account, products
Requires at least: 6.4
Tested up to: 7.0
Requires PHP: 7.4
Stable tag: 1.0.114
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

A lean WooCommerce wishlist for product saves, My Account lists and wishlist sharing.

== Description ==

IPS Order Wishlist adds a focused wishlist experience to WooCommerce shops. Customers can save products, review their wishlist in the My Account area, remove items, share wishlist links and continue shopping from saved products.

This WordPress.org package is the standalone free Core edition. It contains no IPS license client, no third-party update checker and no separately distributed Pro runtime. Updates for this package are provided through WordPress.org.

== Requirements ==

* WordPress 6.4 or newer.
* WooCommerce 8.5 or newer.
* PHP 7.4 or newer.
* For security and performance, use the latest stable WordPress and WooCommerce releases with PHP 8.3 or 8.4. PHP 7.4 remains supported for the declared minimum runtime matrix.

== Features ==

* Add products to a wishlist from product and shop contexts.
* View and manage wishlist items in My Account.
* Optional wishlist sharing.
* Core wishlist settings for labels, display and styling.
* Lightweight reports for basic wishlist activity.
* Optional back-in-stock wishlist email.
* Privacy exporter and eraser support for registered-customer wishlist data.

== Privacy ==

The plugin stores wishlist records, saved product references, list names, visibility settings and dates needed to provide the wishlist feature. Logged-in customer data is connected to the WordPress user account.

When guest wishlists are enabled, an HTTP-only `ipscmi_order_wishlist_session_<site-hash>` cookie contains a random, signed session identifier and expiry data. Its default lifetime is 30 days and can be changed by site code through a WordPress filter. The corresponding database records remain until they expire or are deleted. The cookie is marked secure when the shop is served securely.

The optional back-in-stock email is disabled by default. When a shop manager enables it, its delivery queue can temporarily store the recipient user ID and email address, locale, referenced products and wishlists, and delivery metadata. Acknowledged payloads are cleared. Acknowledged notifications and permanently stale queued or expired-delivery jobs are removed after 30 days in bounded batches of no more than 100 records; active delivery leases are not removed by maintenance.

Email unsubscribe links use hashed, expiring verification challenges in WordPress user metadata. The plugin also stores the time at which a customer unsubscribed so that the preference remains effective. For registered customers, the WordPress personal-data exporter and eraser cover wishlist records, queued notifications and these email preferences. It exports only active and consumed unsubscribe-link counts, not verification-challenge values or hashes. Guest wishlists instead follow their expiry or explicit uninstall cleanup.

Deactivation does not delete plugin data. Uninstall also retains data by default. A shop manager can explicitly enable **Delete plugin data on uninstall** in the base Wishlist settings before uninstalling; that choice permanently removes wishlist records, queued notifications, email preferences and plugin settings. The currently configured Wishlist page is removed only when the plugin created it. An existing page selected by the shop manager is retained.

If a shop manager configures a custom icon hosted on another domain, visitors' browsers request that icon from the selected host. The host's own privacy policy then applies to that request.

The plugin does not send telemetry to IPS, and this WordPress.org package does not contact IPS update or license services.

== Source and Build Tools ==

This package includes the human-readable React source files, package metadata and build configuration needed to reproduce the distributed JavaScript assets. The production assets are built from the included `ips-admin-react` and `ips-react` source files. Core frontend integration and styling are implemented in the readable IPS presentation source under `includes/classes/Wishlist/Presentation/Frontend/`.

Development build overview:

1. Run `npm ci --prefix ips-admin-react` and `npm ci --prefix ips-react`.
2. Run `npm run build:wordpress-org-assets` from the plugin root to build the WordPress.org Core assets.
3. Run the WordPress.org package audit before submitting a release.

The exact third-party components and their licenses are documented in `THIRD-PARTY-NOTICES.txt`. Complete license texts are included in the package at the paths listed there.

== Third-party code ==

* Bundled JavaScript runtime modules: Axios, Redux Toolkit, React Redux, Redux, Immer, Redux Thunk, use-sync-external-store and nanoid under the MIT License. Exact versions, upstream projects and copyright notices are listed in `THIRD-PARTY-NOTICES.txt`. React, ReactDOM and the admin API client are supplied by WordPress and are not embedded in the plugin bundles.
* Composer's generated runtime autoloader is distributed under the MIT License. Its upstream project, copyright notice and bundled license path are listed in `THIRD-PARTY-NOTICES.txt`.

== Installation ==

1. Upload the plugin files to the `/wp-content/plugins/ips-order-wishlist` directory, or install the plugin through the WordPress plugins screen.
2. Activate the plugin through the Plugins screen in WordPress.
3. Configure the wishlist page and display settings from the Wishlist admin area.

== Frequently Asked Questions ==

= Does this package include Pro licensing or external update checks? =

No. The WordPress.org package uses WordPress.org updates and does not include the IPS license client or IPS distribution updater.

= Is a paid edition required to use the wishlist? =

No. The product-saving, My Account wishlist, sharing, basic reporting and back-in-stock features listed above are part of this free package.

= Does the plugin support WooCommerce? =

Yes. The plugin is designed for WooCommerce shops.

== Changelog ==

= 1.0.114 - 2026-08-02 =
* Initial WordPress.org release of IPS Order Wishlist.


= 1.0.113 - 2026-08-02 =
* Improve: Maintenance update for ongoing plugin reliability.


= 1.0.112 - 2026-08-02 =
* Initial WordPress.org release of IPS Order Wishlist.


= 1.0.111 - 2026-08-02 =
* Initial WordPress.org release of IPS Order Wishlist.

= 1.0.110 - 2026-08-02 =
* Improve: Maintenance update for ongoing plugin reliability.


= 1.0.109 - 2026-08-02 =
* Improve: Maintenance update for continued compatibility and reliable plugin updates.


= 1.0.108 - 2026-08-02 =
* Improve: Maintenance update for ongoing plugin reliability.


= 1.0.107 - 2026-08-02 =
* Improve: The admin interface keeps the displayed plugin state more consistent.


= 1.0.106 - 2026-08-02 =
* Improve: The admin interface keeps the displayed plugin state more consistent.


= 1.0.105 - 2026-08-02 =
* Improve: The admin interface keeps the displayed plugin state more consistent.


= 1.0.104 - 2026-08-02 =
* Improve: Maintenance update for ongoing plugin reliability.


= 1.0.103 - 2026-08-02 =
* Improve: Maintenance update for ongoing plugin reliability.


= 1.0.102 - 2026-08-01 =
* Improve: Maintenance update for ongoing plugin reliability.


= 1.0.101 - 2026-08-01 =
* Improve: Maintenance update for continued compatibility and reliable plugin updates.


= 1.0.100 - 2026-08-01 =
* Improve: Maintenance update for ongoing plugin reliability.


= 1.0.99 - 2026-08-01 =
* Improve: Maintenance update for ongoing plugin reliability.


= 1.0.98 - 2026-08-01 =
* Improve: Maintenance update for continued compatibility and reliable plugin updates.


= 1.0.97 - 2026-08-01 =
* Improve: Maintenance update for continued compatibility and reliable plugin updates.


= 1.0.96 - 2026-08-01 =
* Improve: Maintenance update for ongoing plugin reliability.


= 1.0.95 - 2026-07-28 =
* Improve: The admin interface keeps the displayed plugin state more consistent.


= 1.0.94 - 2026-07-28 =
* Fix: Keep the loop wishlist control over linked product images without nesting the interactive button inside product links.
* Improve: Refresh responsive overlay placement after lazy loading, image replacement and dynamic product-grid updates.


= 1.0.93 - 2026-07-28 =
* Improve: The admin interface keeps the displayed plugin state more consistent.


= 1.0.92 - 2026-07-28 =
* Improve: Make the existing nonce rejection flow easier for automated security checks to verify.
* Improve: Strengthen release-package validation with an additional PHP-only Plugin Check ruleset.
* Cleanup: Remove an unused admin loading image and its inactive configuration value.


= 1.0.91 - 2026-07-27 =
* Improve: The admin interface keeps the displayed plugin state more consistent.


= 1.0.90 - 2026-07-27 =
* Improve: The admin interface keeps the displayed plugin state more consistent.


= 1.0.89 - 2026-07-27 =
* Improve: Maintenance update for ongoing plugin reliability.

= 1.0.88 - 2026-07-27 =
* Improve: Maintenance update for ongoing plugin reliability.


= 1.0.87 - 2026-07-27 =
* Improve: Maintenance update for ongoing plugin reliability.


= 1.0.86 - 2026-07-27 =
* Improve: Maintenance update for ongoing plugin reliability.


= 1.0.84 - 2026-07-27 =
* Fix: Resolve frontend AJAX and REST endpoints through WordPress URL APIs instead of assuming default installation paths.
* Security: Encode browser-facing configuration exclusively with the WordPress JSON encoder and fail closed when required runtime data is unavailable.
* Improve: Add source and final-package regression gates for endpoint portability and inline JSON encoding.


= 1.0.83 - 2026-07-27 =
* Compatibility: Move plugin-owned PHP, WordPress, JavaScript, CSS and REST identifiers to the collision-resistant `ipscmi` prefix while retaining the public plugin slug, text domain and My Account endpoint.
* Improve: Strengthen source and package audits for the shared CoreKit naming contract.


= 1.0.82 - 2026-07-19 =
* Improve: The admin interface keeps the displayed plugin state more consistent.


= 1.0.81 - 2026-07-19 =
* Security: Bind guest mutation nonces to the signed Wishlist session and accept add/remove mutations only via POST.
* Fix: Delete the configured Wishlist page on uninstall only when the plugin created that page.
* Fix: Register translated admin modules after WordPress initialization and resolve privacy messages only when needed.
* Improve: Strengthen the reviewable WordPress.org Core source and asset-build boundary.


= 1.0.80 - 2026-07-19 =
* Improve: The admin interface keeps the displayed plugin state more consistent.


= 1.0.79 - 2026-07-18 =
* Fix: Keep Wishlist, token, product and rendered-button responses private; global Loop buttons make all frontend responses private, while Loop-disabled pages without Wishlist content remain cacheable.
* Improve: Extend personal-data export and erasure to Wishlist email queues and preferences, with bounded 30-day queue retention.
* Improve: Verify the queue schema v2 recipient column and exact lookup index before accepting installation.
* Improve: Make complete data removal on uninstall an explicit setting that remains disabled by default.
* Improve: Remove dummy build settings and bundled translation catalogs, and fail closed when reviewed Plugin Check warnings change.


= 1.0.78 - 2026-07-18 =
* Improve: Maintenance update for ongoing plugin reliability.


= 1.0.77 - 2026-07-18 =
* Improve: Maintenance update for ongoing plugin reliability.


= 1.0.76 - 2026-07-18 =
* Improve: Maintenance update for ongoing plugin reliability.


= 1.0.75 - 2026-07-18 =
* Improve: The admin interface keeps the displayed plugin state more consistent.


= 1.0.74 - 2026-07-17 =
* Improve: The admin interface keeps the displayed plugin state more consistent.


= 1.0.73 - 2026-07-17 =
* Improve: Maintenance update for continued compatibility and reliable plugin updates.

= 1.0.72 - 2026-07-17 =
* Fix: Custom Wishlist icons now resolve more reliably across supported hosting environments.

= 1.0.69 - 2026-07-17 =
* Improve: Maintenance update for ongoing plugin reliability.


= 1.0.68 - 2026-07-17 =
* Improve: Maintenance update for ongoing plugin reliability.

= 1.0.67 - 2026-07-15 =
* Refactor: Move the free wishlist runtime to the canonical IPS Core architecture.
* Improve: Remove unused compatibility code, duplicate frontend bridges and dormant source paths.
* Fix: Keep wishlist cart events and dialogs on one consistent frontend contract.


= 1.0.66 - 2026-07-15 =
* Improve: The admin interface keeps the displayed plugin state more consistent.


= 1.0.65 - 2026-07-14 =
* Initial WordPress.org release of the free Core edition.
* Add product saving, My Account wishlist management, sharing, configurable display options, basic reporting and optional back-in-stock notifications.
* Add a standalone WordPress.org update channel, reviewable build source and third-party license documentation.
