{"id":329877,"date":"2026-07-20T13:28:17","date_gmt":"2026-07-20T13:28:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/checkify-for-woocommerce\/"},"modified":"2026-07-21T12:46:03","modified_gmt":"2026-07-21T12:46:03","slug":"checkify-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/ug.wordpress.org\/plugins\/checkify-for-woocommerce\/","author":23494644,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.13","stable_tag":"1.2.13","tested":"7.0.2","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Checkify for WooCommerce","header_author":"Checkify","header_description":"Age verification gate for WooCommerce shops using Checkify Connector.","assets_banners_color":"6286a7","last_updated":"2026-07-21 12:46:03","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/checkify.me\/wordpress-integration","header_author_uri":"https:\/\/checkify.me","rating":0,"author_block_rating":0,"active_installs":0,"downloads":84,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.12":{"tag":"1.2.12","author":"checkify","date":"2026-07-20 13:27:42"},"1.2.13":{"tag":"1.2.13","author":"checkify","date":"2026-07-21 12:46:03"}},"upgrade_notice":{"1.2.13":"<p>Critical fix: no longer fatals with WordPress.org Checkify 1.2.1. Update Checkify to 1.2.2+ (or the latest Connector ZIP) for the age gate to run.<\/p>","1.2.12":"<p>Readme and admin install guidance now point to Checkify on WordPress.org (slug <code>checkify<\/code>) as well as the checkify.me Connector ZIP.<\/p>","1.2.11":"<p>Fixes a critical error on sites with an outdated Connector or duplicate plugin copies. Install Checkify Connector 1.2.1+ before activating.<\/p>","1.2.10":"<p>Review polish: storefront widget no longer outputs inline CSS from Checkify Connector; use gate.css instead.<\/p>","1.2.1":"<p>Fixes category-scoped age gating for variable products and parent\/child WooCommerce categories. Re-save category settings after updating if you use restricted categories.<\/p>","1.2.0":"<p>Configurable minimum age and assurance levels replace fixed 18\/21\/25 profiles. Legacy settings migrate automatically.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3614798,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3614798,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3614798,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3614798,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.12","1.2.13"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3614798,"resolution":"1","location":"assets","locale":"","width":1024,"height":742},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3614798,"resolution":"2","location":"assets","locale":"","width":1024,"height":742},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3614798,"resolution":"3","location":"assets","locale":"","width":1024,"height":742}},"screenshots":{"1":"Checkify age gate settings under WooCommerce \u2014 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."}},"plugin_section":[],"plugin_tags":[5616,3148,282,396,286],"plugin_category":[45,54],"plugin_contributors":[264910],"plugin_business_model":[],"class_list":["post-329877","plugin","type-plugin","status-publish","hentry","plugin_tags-age-verification","plugin_tags-checkout","plugin_tags-ecommerce","plugin_tags-privacy","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_category-security-and-spam-protection","plugin_contributors-checkify","plugin_committers-checkify"],"banners":{"banner":"https:\/\/ps.w.org\/checkify-for-woocommerce\/assets\/banner-772x250.png?rev=3614798","banner_2x":"https:\/\/ps.w.org\/checkify-for-woocommerce\/assets\/banner-1544x500.png?rev=3614798","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/checkify-for-woocommerce\/assets\/icon-128x128.png?rev=3614798","icon_2x":"https:\/\/ps.w.org\/checkify-for-woocommerce\/assets\/icon-256x256.png?rev=3614798","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/checkify-for-woocommerce\/assets\/screenshot-1.png?rev=3614798","caption":"Checkify age gate settings under WooCommerce \u2014 age, assurance, scope, and category filters."},{"src":"https:\/\/ps.w.org\/checkify-for-woocommerce\/assets\/screenshot-2.png?rev=3614798","caption":"Inline Checkify verification widget on the WooCommerce checkout page."},{"src":"https:\/\/ps.w.org\/checkify-for-woocommerce\/assets\/screenshot-3.png?rev=3614798","caption":"Status panel showing connection, Pass ID, and category filter configuration."}],"raw_content":"<!--section=description-->\n<p><strong>Checkify for WooCommerce<\/strong> 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.<\/p>\n\n<p>Requires <strong>Checkify Connector<\/strong> and <strong>WooCommerce<\/strong>.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Configurable minimum age from 10 to 110<\/li>\n<li>Verified or High Assurance assurance levels (aligned with the Checkify app)<\/li>\n<li>Gate scope: checkout only, cart + checkout, or entire storefront<\/li>\n<li>Inline widget on cart\/checkout or full-page gate for catalog protection<\/li>\n<li>Restrict verification to selected product categories (for example Vape or Alcohol)<\/li>\n<li>Optional skip for logged-in customers and shop-manager bypass<\/li>\n<li>Classic checkout and WooCommerce Checkout block \/ Store API support<\/li>\n<li>HPOS (custom order tables) compatible<\/li>\n<\/ul>\n\n<h4>How it works<\/h4>\n\n<ol>\n<li>Install and connect <strong>Checkify Connector<\/strong> with your Checkify Pass ID.<\/li>\n<li>Activate <strong>Checkify for WooCommerce<\/strong>.<\/li>\n<li>Configure minimum age, scope, and optional category restrictions under <strong>WooCommerce \u2192 Checkify age gate<\/strong>.<\/li>\n<li>Unverified customers see the Checkify QR widget and cannot complete checkout until verified.<\/li>\n<\/ol>\n\n<h4>Category-scoped gating<\/h4>\n\n<p>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.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin relies on <strong>Checkify Connector<\/strong> (required dependency) to connect your WordPress site to Checkify verification services.<\/p>\n\n<p>Service used:<\/p>\n\n<ul>\n<li>Checkify API: https:\/\/checkify.me<\/li>\n<li>Checkify website: https:\/\/checkify.me<\/li>\n<\/ul>\n\n<p>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.<\/p>\n\n<p>The plugin may cause the following data to be sent to Checkify (through Checkify Connector):<\/p>\n\n<ul>\n<li>Your WordPress site domain<\/li>\n<li>A Checkify site identifier and installation identifier<\/li>\n<li>The Checkify Pass identifier configured by the site administrator<\/li>\n<li>Verification request identifiers and status tokens<\/li>\n<li>Request timestamps<\/li>\n<li>Cryptographic signatures used to authenticate the WordPress installation<\/li>\n<\/ul>\n\n<p>Browser storage (via Checkify Connector):<\/p>\n\n<ul>\n<li>Cookie: <code>checkify_state_id<\/code> (functional verification session binding)<\/li>\n<li>sessionStorage: short-lived pending QR request state in the verification widget<\/li>\n<\/ul>\n\n<p>Checkify privacy policy: https:\/\/checkify.me\/privacy-policy<\/p>\n\n<p>Checkify terms: https:\/\/checkify.me\/terms_and_conditions<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate <strong>WooCommerce<\/strong>.<\/li>\n<li>Install <strong>Checkify<\/strong> (the Checkify Connector plugin): search for <strong>Checkify<\/strong> under <strong>Plugins \u2192 Add New<\/strong> on the <a href=\"https:\/\/wordpress.org\/plugins\/checkify\/\">WordPress.org plugin directory<\/a>, or upload the <strong>Checkify Connector<\/strong> ZIP from <a href=\"https:\/\/checkify.me\/wordpress-integration#downloads\">checkify.me\/wordpress-integration#downloads<\/a> if you use the standalone package.<\/li>\n<li>Activate Checkify, connect your site, and save your Checkify Pass ID.<\/li>\n<li>Install <strong>Checkify for WooCommerce<\/strong> via Plugins \u2192 Add New, or upload the ZIP to <code>\/wp-content\/plugins\/checkify-for-woocommerce\/<\/code>.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu.<\/li>\n<li>Go to <strong>WooCommerce \u2192 Checkify age gate<\/strong> to configure age, scope, and categories.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20a%20checkify%20business%20account%3F\"><h3>Do I need a Checkify business account?<\/h3><\/dt>\n<dd><p>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.<\/p><\/dd>\n<dt id=\"which%20plugins%20are%20required%3F\"><h3>Which plugins are required?<\/h3><\/dt>\n<dd><p><strong>WooCommerce<\/strong> must be installed and active. <strong>Checkify<\/strong> (Checkify Connector) is also required for the age gate to run. You can activate Checkify for WooCommerce before Checkify is ready; an admin notice will guide you to install or activate Checkify until it is active.<\/p><\/dd>\n<dt id=\"where%20do%20i%20get%20checkify%20%28checkify%20connector%29%3F\"><h3>Where do I get Checkify (Checkify Connector)?<\/h3><\/dt>\n<dd><p>Install <strong>Checkify<\/strong> from the <a href=\"https:\/\/wordpress.org\/plugins\/checkify\/\">WordPress.org plugin directory<\/a> via <strong>Plugins \u2192 Add New<\/strong>, or download the <strong>Checkify Connector<\/strong> ZIP from <a href=\"https:\/\/checkify.me\/wordpress-integration#downloads\">checkify.me\/wordpress-integration#downloads<\/a> and upload it under <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>. Both packages provide the same Connector functionality.<\/p><\/dd>\n<dt id=\"does%20this%20work%20with%20woocommerce%20block%20checkout%3F\"><h3>Does this work with WooCommerce block checkout?<\/h3><\/dt>\n<dd><p>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.<\/p><\/dd>\n<dt id=\"can%20i%20gate%20only%20alcohol%20or%20vape%20products%3F\"><h3>Can I gate only alcohol or vape products?<\/h3><\/dt>\n<dd><p>Yes. Under <strong>Restricted categories<\/strong>, select the WooCommerce product categories that require age verification. Carts containing only products outside those categories can proceed without verification.<\/p><\/dd>\n<dt id=\"does%20parent%20category%20selection%20include%20subcategories%3F\"><h3>Does parent category selection include subcategories?<\/h3><\/dt>\n<dd><p>Yes. Selecting a parent category also applies to products assigned to child categories. Category matching uses the parent product for variable products.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20no%20categories%20are%20selected%3F\"><h3>What happens if no categories are selected?<\/h3><\/dt>\n<dd><p>Verification is required for every product in the cart. Check the <strong>Status<\/strong> panel on the settings page \u2014 it should list how many categories are selected, not \"All products (no category filter)\".<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20store%20customer%20identity%20data%20in%20wordpress%3F\"><h3>Does this plugin store customer identity data in WordPress?<\/h3><\/dt>\n<dd><p>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.<\/p><\/dd>\n<dt id=\"is%20woocommerce%20hpos%20supported%3F\"><h3>Is WooCommerce HPOS supported?<\/h3><\/dt>\n<dd><p>Yes. The plugin declares compatibility with WooCommerce custom order tables (HPOS).<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.13<\/h4>\n\n<ul>\n<li>Fix critical error when WordPress.org Checkify 1.2.1 (or older Connector builds without checkify()\/site()\/verification()\/widget()) is active<\/li>\n<li>Require Checkify\/Connector 1.2.2+ service APIs before loading the age gate<\/li>\n<li>Harden admin, gate, and widget paths so outdated Checkify installs show a dependency notice instead of crashing the site<\/li>\n<\/ul>\n\n<h4>1.2.12<\/h4>\n\n<ul>\n<li>Document that Checkify (Connector) is available on WordPress.org as plugin slug <code>checkify<\/code><\/li>\n<li>Detect both WordPress.org (<code>checkify\/checkify.php<\/code>) and ZIP (<code>checkify-connector\/checkify-connector.php<\/code>) Connector installs<\/li>\n<li>Update admin install guidance and dependency notices accordingly<\/li>\n<li>Document Checkify browser cookie and sessionStorage in external services section<\/li>\n<\/ul>\n\n<h4>1.2.11<\/h4>\n\n<ul>\n<li>Prevent fatal errors when an older Checkify Connector is active (safe asset enqueue fallback)<\/li>\n<li>Require Connector 1.2.1+ before registering the storefront gate; show an admin notice when Connector is outdated<\/li>\n<li>Guard against duplicate plugin copies loading at once (dev folder plus release ZIP)<\/li>\n<\/ul>\n\n<h4>1.2.10<\/h4>\n\n<ul>\n<li>WordPress.org review: strip Checkify Connector inline style blocks from storefront widget output<\/li>\n<li>Move Checkify widget presentation styles into enqueued gate.css<\/li>\n<li>Plugins list: add Settings action link and row meta when WooCommerce is active<\/li>\n<li>Avoid duplicate Connector dependency notice on the settings page install card<\/li>\n<\/ul>\n\n<h4>1.2.9<\/h4>\n\n<ul>\n<li>Checkify Connector dependency: runtime checks with download\/activate links (Connector is not a WordPress.org plugin slug)<\/li>\n<li>Admin settings page explains Connector install steps when Connector is missing or inactive<\/li>\n<li>Safe activation defaults when Connector is not loaded yet<\/li>\n<li>Readme: clarify Connector download URL and that WooCommerce is the only Requires Plugins header<\/li>\n<\/ul>\n\n<h4>1.2.8<\/h4>\n\n<ul>\n<li>WordPress.org review: remove invalid Requires Plugins header for Checkify Connector (dependency handled in code)<\/li>\n<li>WordPress.org review: enqueue admin CSS instead of inline style block<\/li>\n<li>WordPress.org review: scope admin notices to WooCommerce and Plugins screens<\/li>\n<li>WordPress.org review: sanitize Checkify widget HTML via wp_kses before output<\/li>\n<\/ul>\n\n<h4>1.2.7<\/h4>\n\n<ul>\n<li>Plugin Check: escape translated age help text via esc_html( sprintf( __() ) )<\/li>\n<\/ul>\n\n<h4>1.2.6<\/h4>\n\n<ul>\n<li>Plugin Check: fix translator comment placement and Store API exception escaping annotations<\/li>\n<\/ul>\n\n<h4>1.2.5<\/h4>\n\n<ul>\n<li>Plugin Check: i18n translator comments, escaped printf placeholders, sanitized exception messages<\/li>\n<li>Remove manual load_plugin_textdomain() (WordPress.org loads translations automatically)<\/li>\n<li>Prefixed uninstall.php option loop variables<\/li>\n<\/ul>\n\n<h4>1.2.4<\/h4>\n\n<ul>\n<li>WordPress.org: align plugin slug, main file, and text domain to <code>checkify-for-woocommerce<\/code><\/li>\n<li>WordPress.org: Tested up to WordPress 7.0<\/li>\n<li>Release ZIP excludes hidden development files<\/li>\n<\/ul>\n\n<h4>1.2.3<\/h4>\n\n<ul>\n<li>Require Checkify Connector (not the legacy Checkify slug) in plugin headers \u2014 matches other Checkify satellite plugins<\/li>\n<li>Readme and metadata consistently refer to Checkify Connector<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>Fix activation blocked on sites using the <code>checkify-connector<\/code> plugin folder (WordPress only hard-requires WooCommerce at activation)<\/li>\n<li>Checkify Connector remains a runtime dependency with an admin notice if missing<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Fix category matching for variable products (use parent product categories)<\/li>\n<li>Match restricted parent categories to products in child categories<\/li>\n<li>WordPress.org release packaging and readme updates<\/li>\n<li>Add uninstall cleanup for plugin options<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Replace fixed 18\/21\/25 age profiles with configurable minimum age (10\u2013110)<\/li>\n<li>Add minimum assurance selector: Verified or High Assurance (aligned with Checkify app)<\/li>\n<li>Automatic migration from legacy <code>age_over_*<\/code> profile setting<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Fix blocked checkout with no QR when gate mode is full-page but scope includes checkout (block checkout)<\/li>\n<li>Always show inline verification widget on cart\/checkout pages when verification is required<\/li>\n<li>Fallback gate injection via the_content and woocommerce_before_main_content<\/li>\n<li>Load block-checkout helper whenever checkout is blocked, not only when block detection succeeds<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Block Checkout: inject inline gate via block-specific render hooks<\/li>\n<li>Block Checkout: load Checkify verify scripts during block render (not only via shortcode)<\/li>\n<li>Block Checkout: disable Place Order button and payment section until verification completes<\/li>\n<li>Block Checkout: re-init QR widget after React checkout hydrates<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Restrict age gate to selected WooCommerce product categories (optional)<\/li>\n<li>Customer policies: skip gate for logged-in users and shop-manager bypass<\/li>\n<li>Checkout\/cart\/add-to-cart guards respect category-scoped carts<\/li>\n<li>PHPUnit coverage for core gate policy rules<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Inline Checkify widget on cart and checkout (default for checkout-only scope)<\/li>\n<li>Full-page gate remains default for cart and entire-store protection<\/li>\n<li>Cache-control headers and admin caching guidance for hosts and WP Rocket<\/li>\n<li>Block classic AJAX add-to-cart when cart\/store protection is active<\/li>\n<li>Disable Place order button until verification completes on classic checkout<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Declare WooCommerce HPOS compatibility<\/li>\n<li>Block Checkout block \/ Store API checkout and add-to-cart when verification is required<\/li>\n<li>Do not gate customers until site connection and Pass ID are configured<\/li>\n<li>Replace HTTP 403 gate page with a normal verification page (503 if Pass ID missing)<\/li>\n<li>Admin status panel, setup instructions, and configuration warnings<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"Age verification gate for WooCommerce using Checkify Connector.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/329877","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=329877"}],"author":[{"embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/checkify"}],"wp:attachment":[{"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=329877"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=329877"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=329877"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=329877"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=329877"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=329877"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}