=== Age Verification for WooCommerce – Gatemi ===
Contributors: gatemi
Tags: age verification, age gate, restricted products, compliance, woocommerce
Requires at least: 6.4
Tested up to: 7.1
Requires PHP: 7.4
Stable tag: 1.0.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Age verification for your WooCommerce shop: an age gate for the whole store or only the products that need one — enforced on the server.

== Description ==

Ask a visitor to confirm their age, for the whole site, for every shop page,
or only for the products that are actually restricted — and then do something
about the answer.

**The purchase is refused, not just covered.** An overlay is one
browser-devtools panel away, and `?add-to-cart=123` never sees it at all, so
the order arrives anyway for exactly the product a shop is not allowed to sell
to whoever placed it. Here a restricted product is **not purchasable** as far
as WooCommerce is concerned, adding it is refused with a message the shopper
reads, and a basket already holding one cannot be paid for. That one filter
covers the block cart and checkout and the Store API too.

**Nobody's basket is emptied.** Somebody who confirms their age finds their
shopping exactly where they left it.

**It works with a page cache, and without JavaScript.** The gate is
server-rendered as an ordinary form, so it is there before a script has run.
Because a confirmation is a fact about one visitor and a cache cannot know it,
the markup is identical for everybody and a five-line snippet in the head
reads the cookie and hides a gate that is already cleared — rather than
removing it after the page has painted, which is why so many age gates flash
on every page for somebody who confirmed weeks ago.

**Search engines are never gated.** A shop that age-gates its crawler
disappears from search results within a fortnight, and finds out from its
traffic rather than from its plugin.

= What you get =

* A gate for the whole site, every shop page, or only restricted products
* Any product set to always ask, or never ask, on the product itself —
  because one restricted item among a hundred ordinary ones is the common case
* One minimum age for the store
* Refused add-to-cart, blocked checkout, and a basket that is never emptied
* Search engines exempt, in every scope
* No JavaScript beyond the five-line no-flash snippet

= The full edition =

[Gatemi Age Verification for WooCommerce](https://gatemi.com/plugins/age-verification-for-woocommerce/)
is a separate plugin, sold on gatemi.com, that adds a **date-of-birth
gate** checked on the server, **restricted categories** with sub-categories
included and an age of their own, a **minimum age per product**, a
**confirmation tick box at the checkout** in your own words, how long a
confirmation is remembered, and your own wording throughout.

Both editions store everything the same way, so upgrading keeps your
configuration and a confirmation a visitor has already given.

== External services ==

None. This plugin makes no request anywhere.

== Frequently Asked Questions ==

= Can somebody still buy by crafting a URL? =

No. The product is not purchasable, and add-to-cart is refused server-side.

= Is this an identity check? =

No, and no age gate is. It records what a visitor declared and when — which is
what a shop is normally asked to be able to show.

= Does it work with a page cache? =

Yes. Every visitor is served the same markup, and the head snippet decides
whether the gate is shown before the page paints.

= Will it hide my shop from Google? =

No. Search engines are exempt, in every scope.

== Screenshots ==

1. The settings screen: whether the gate is on, where it appears, and the store-wide minimum age.
2. The gate on a restricted product, before a visitor has confirmed their age.
3. The per-product switch in WooCommerce's own Product data box — always ask, never ask, or follow the store.

== Changelog ==

= 1.0.0 =
* First release: the age gate for the whole site, every shop page or only restricted products, with the one-tap confirmation enforced on the server — the product not purchasable, the add-to-cart refused with the age named, and a basket holding one not payable — the no-flash head snippet so a cached page never shows a cleared gate, the crawler exemption, a per-product always-ask or never-ask switch, and the age, wording and moment recorded on the order.
