=== Checkify for WooCommerce ===
Contributors: checkify
Tags: woocommerce, age verification, checkout, ecommerce, privacy
Requires at least: 6.0
Tested up to: 7.0
Requires PHP: 7.4
Requires Plugins: woocommerce
Stable tag: 1.2.11
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Age verification gate for WooCommerce using Checkify Connector.

== Description ==

**Checkify for WooCommerce** adds a privacy-first age verification gate to your WooCommerce shop. Customers scan a QR code with the Checkify app to prove their age before checkout.

Requires **Checkify Connector** and **WooCommerce**.

= Features =

* Configurable minimum age from 10 to 110
* Verified or High Assurance assurance levels (aligned with the Checkify app)
* Gate scope: checkout only, cart + checkout, or entire storefront
* Inline widget on cart/checkout or full-page gate for catalog protection
* Restrict verification to selected product categories (for example Vape or Alcohol)
* Optional skip for logged-in customers and shop-manager bypass
* Classic checkout and WooCommerce Checkout block / Store API support
* HPOS (custom order tables) compatible

= How it works =

1. Install and connect **Checkify Connector** with your Checkify Pass ID.
2. Activate **Checkify for WooCommerce**.
3. Configure minimum age, scope, and optional category restrictions under **WooCommerce → Checkify age gate**.
4. Unverified customers see the Checkify QR widget and cannot complete checkout until verified.

= Category-scoped gating =

Leave all category checkboxes unchecked to require verification for every product. Select specific categories to gate only those products and carts that contain them. Products in unrestricted categories (for example a t-shirt) should not trigger the gate when categories are configured correctly.

== Installation ==

1. Install and activate **WooCommerce**.
2. Download **Checkify Connector** from [checkify.me/wordpress-integration#downloads](https://checkify.me/wordpress-integration#downloads) (not available from the WordPress.org plugin directory) and install it via **Plugins → Add New → Upload Plugin**.
3. Activate **Checkify Connector**, connect your site, and save your Checkify Pass ID.
4. Install **Checkify for WooCommerce** via Plugins → Add New, or upload the ZIP to `/wp-content/plugins/checkify-for-woocommerce/`.
5. Activate the plugin through the **Plugins** menu.
6. Go to **WooCommerce → Checkify age gate** to configure age, scope, and categories.

== Frequently Asked Questions ==

= Do I need a Checkify business account? =

Yes. Site connection is approved by a business owner scanning the connection QR in the Checkify app. Age verification uses a Checkify Pass configured for your connected site.

= Which plugins are required? =

**WooCommerce** must be installed and active. **Checkify Connector** is also required for the age gate to run. You can activate Checkify for WooCommerce before Connector is ready; an admin notice will link you to download or activate Connector until it is active.

= Where do I get Checkify Connector? =

Checkify Connector is not on the WordPress.org plugin directory. Download it from [checkify.me/wordpress-integration#downloads](https://checkify.me/wordpress-integration#downloads), then upload and activate it on your site like any other plugin ZIP.

= Does this work with WooCommerce block checkout? =

Yes. The inline verification widget is injected into cart and checkout blocks, Place order is disabled until verification completes, and Store API checkout/add-to-cart requests are blocked when required.

= Can I gate only alcohol or vape products? =

Yes. Under **Restricted categories**, select the WooCommerce product categories that require age verification. Carts containing only products outside those categories can proceed without verification.

= Does parent category selection include subcategories? =

Yes. Selecting a parent category also applies to products assigned to child categories. Category matching uses the parent product for variable products.

= What happens if no categories are selected? =

Verification is required for every product in the cart. Check the **Status** panel on the settings page — it should list how many categories are selected, not "All products (no category filter)".

= Does this plugin store customer identity data in WordPress? =

No. Verification results are stored locally as a short-lived session (browser cookie and server transient) by Checkify. Your shop receives an age verification result, not passport or ID images.

= Is WooCommerce HPOS supported? =

Yes. The plugin declares compatibility with WooCommerce custom order tables (HPOS).

== Screenshots ==

1. Checkify age gate settings under WooCommerce — age, assurance, scope, and category filters.
2. Inline Checkify verification widget on the WooCommerce checkout page.
3. Status panel showing connection, Pass ID, and category filter configuration.

== Changelog ==

= 1.2.11 =
* Prevent fatal errors when an older Checkify Connector is active (safe asset enqueue fallback)
* Require Connector 1.2.1+ before registering the storefront gate; show an admin notice when Connector is outdated
* Guard against duplicate plugin copies loading at once (dev folder plus release ZIP)

= 1.2.10 =
* WordPress.org review: strip Checkify Connector inline style blocks from storefront widget output
* Move Checkify widget presentation styles into enqueued gate.css
* Plugins list: add Settings action link and row meta when WooCommerce is active
* Avoid duplicate Connector dependency notice on the settings page install card

= 1.2.9 =
* Checkify Connector dependency: runtime checks with download/activate links (Connector is not a WordPress.org plugin slug)
* Admin settings page explains Connector install steps when Connector is missing or inactive
* Safe activation defaults when Connector is not loaded yet
* Readme: clarify Connector download URL and that WooCommerce is the only Requires Plugins header

= 1.2.8 =
* WordPress.org review: remove invalid Requires Plugins header for Checkify Connector (dependency handled in code)
* WordPress.org review: enqueue admin CSS instead of inline style block
* WordPress.org review: scope admin notices to WooCommerce and Plugins screens
* WordPress.org review: sanitize Checkify widget HTML via wp_kses before output

= 1.2.7 =
* Plugin Check: escape translated age help text via esc_html( sprintf( __() ) )

= 1.2.6 =
* Plugin Check: fix translator comment placement and Store API exception escaping annotations

= 1.2.5 =
* Plugin Check: i18n translator comments, escaped printf placeholders, sanitized exception messages
* Remove manual load_plugin_textdomain() (WordPress.org loads translations automatically)
* Prefixed uninstall.php option loop variables

= 1.2.4 =
* WordPress.org: align plugin slug, main file, and text domain to `checkify-for-woocommerce`
* WordPress.org: Tested up to WordPress 7.0
* Release ZIP excludes hidden development files

= 1.2.3 =
* Require Checkify Connector (not the legacy Checkify slug) in plugin headers — matches other Checkify satellite plugins
* Readme and metadata consistently refer to Checkify Connector

= 1.2.2 =
* Fix activation blocked on sites using the `checkify-connector` plugin folder (WordPress only hard-requires WooCommerce at activation)
* Checkify Connector remains a runtime dependency with an admin notice if missing

= 1.2.1 =
* Fix category matching for variable products (use parent product categories)
* Match restricted parent categories to products in child categories
* WordPress.org release packaging and readme updates
* Add uninstall cleanup for plugin options

= 1.2.0 =
* Replace fixed 18/21/25 age profiles with configurable minimum age (10–110)
* Add minimum assurance selector: Verified or High Assurance (aligned with Checkify app)
* Automatic migration from legacy `age_over_*` profile setting

= 1.0.5 =
* Fix blocked checkout with no QR when gate mode is full-page but scope includes checkout (block checkout)
* Always show inline verification widget on cart/checkout pages when verification is required
* Fallback gate injection via the_content and woocommerce_before_main_content
* Load block-checkout helper whenever checkout is blocked, not only when block detection succeeds

= 1.0.4 =
* Block Checkout: inject inline gate via block-specific render hooks
* Block Checkout: load Checkify verify scripts during block render (not only via shortcode)
* Block Checkout: disable Place Order button and payment section until verification completes
* Block Checkout: re-init QR widget after React checkout hydrates

= 1.0.3 =
* Restrict age gate to selected WooCommerce product categories (optional)
* Customer policies: skip gate for logged-in users and shop-manager bypass
* Checkout/cart/add-to-cart guards respect category-scoped carts
* PHPUnit coverage for core gate policy rules

= 1.0.2 =
* Inline Checkify widget on cart and checkout (default for checkout-only scope)
* Full-page gate remains default for cart and entire-store protection
* Cache-control headers and admin caching guidance for hosts and WP Rocket
* Block classic AJAX add-to-cart when cart/store protection is active
* Disable Place order button until verification completes on classic checkout

= 1.0.1 =
* Declare WooCommerce HPOS compatibility
* Block Checkout block / Store API checkout and add-to-cart when verification is required
* Do not gate customers until site connection and Pass ID are configured
* Replace HTTP 403 gate page with a normal verification page (503 if Pass ID missing)
* Admin status panel, setup instructions, and configuration warnings

= 1.0.0 =
* Initial release

== Upgrade Notice ==

= 1.2.11 =
Fixes a critical error on sites with an outdated Connector or duplicate plugin copies. Install Checkify Connector 1.2.1+ before activating.

= 1.2.10 =
Review polish: storefront widget no longer outputs inline CSS from Checkify Connector; use gate.css instead.

= 1.2.1 =
Fixes category-scoped age gating for variable products and parent/child WooCommerce categories. Re-save category settings after updating if you use restricted categories.

= 1.2.0 =
Configurable minimum age and assurance levels replace fixed 18/21/25 profiles. Legacy settings migrate automatically.

== External services ==

This plugin relies on **Checkify Connector** (required dependency) to connect your WordPress site to Checkify verification services.

Service used:

* Checkify API: https://checkify.me
* Checkify website: https://checkify.me

Data is sent to Checkify when a customer starts or completes age verification on your shop (via the Checkify Connector plugin). This plugin itself does not make separate API calls; it uses the Checkify Connector API and verification session already configured on your site.

The plugin may cause the following data to be sent to Checkify (through Checkify Connector):

* Your WordPress site domain
* A Checkify site identifier and installation identifier
* The Checkify Pass identifier configured by the site administrator
* Verification request identifiers and status tokens
* Request timestamps
* Cryptographic signatures used to authenticate the WordPress installation

Checkify privacy policy: https://checkify.me/privacy-policy

Checkify terms: https://checkify.me/terms_and_conditions
