Description
This plugin asks for a date of birth where the order is placed and rejects the order on the server if the customer is below your minimum age. It also covers express payment buttons, which skip the checkout form, and it reports every order that came in without a valid age check.
What it is, and what it is not. The plugin checks a date of birth that the customer enters. It assists your shop with its age control. It does not verify identity documents and it does not guarantee legal compliance. You remain responsible for meeting the rules that apply to your products and your country. If you need document verification, use a dedicated identity service.
Why another age plugin
Most age plugins show a popup when someone opens the shop. A popup is answered with one click and has no connection to the order. This plugin works at the other end: at the moment the order is placed, on the server.
- No popup. The date of birth is one field in the checkout.
- Checked on the server. Changing the field in the browser does not help. Orders sent directly to the WooCommerce Store API are rejected as well.
- Express payment buttons are covered. Buttons on product and cart pages skip the checkout form. The plugin asks for the date of birth right next to them, checks it on the server and only then lets the payment through.
- A safety net. Payment plugins change, and an update can bring a new way to order. Every binding order without a valid age check gets an order note, a log entry and an email notice, so you can clarify the age before you ship.
Features
- Classic checkout and block checkout
- Minimum age per product category: for example 16 for beer and wine, 18 for spirits, none for mineral water. Child categories inherit, the strictest rule in the cart applies
- Minimum age on a single product, to override its categories, for example for an alcohol-free beer
- A default minimum age for everything else
- Your choice of what is stored: by default only the result and the age at the time of the order, optionally the full date of birth
- The date of birth is never saved to the customer account
- Age check result shown on the order screen
- Site Health tests: is the check active, do the payment plugins still fit, has the safety net reported anything in the last 30 days
- Personal data export and erasure, with a suggested text for your privacy policy
- HPOS compatible
- Translation-ready. German is included for Germany (informal and formal) and Switzerland
- No external services, no tracking, no calls to other servers
Supported express payment plugins
The plugin asks for the date of birth next to the express buttons of these plugins and rejects their orders without a confirmed age:
- WooCommerce Stripe Payment Gateway (wallet and one-click buttons on product and cart pages)
- WooCommerce PayPal Payments
- TWINT for WooCommerce (TWINT Express Checkout)
The date of birth is asked on classic product and cart pages. At checkout, the express buttons above the form stay locked until the date of birth field in the form holds a valid date. In the cart block and the mini cart the buttons are shown without the question, and orders from there are rejected until the age is confirmed elsewhere.
Express buttons of other plugins are not unlocked by this plugin. Their orders are rejected where they use the standard WooCommerce order routes, and reported by the safety net otherwise. Developers can add their own adapter with the filter bf_agecheck_express_adapters.
A note on honesty: payment plugins are third-party code. One of the supported plugins can create an order on a route of its own that bypasses the standard WooCommerce order routes. For that route the plugin relies on hooks of the payment plugin. If those hooks change, the Site Health test tells you, and the safety net still reports such orders.
For developers
bf_agecheck_min_agechanges the default minimum age.bf_agecheck_product_min_agesets the minimum age of a single product,bf_agecheck_required_agethat of a whole cart or order.bf_agecheck_requires_checkswitches the check off, for example on a staging site. Answer it the same way in every context.bf_agecheck_customer_messagechanges the customer messages.bf_agecheck_date_formatsadds accepted date formats.bf_agecheck_send_alertsuppresses the email notice, for example on a staging site.bf_agecheck_logswitches entries in the WooCommerce log off, all or by event.bf_agecheck_classic_field_hookmoves the field in the classic checkout.bf_agecheck_express_adaptersandbf_agecheck_express_selectorsadd or adjust support for express payment plugins.bf_agecheck_move_paypal_buttonkeeps the PayPal button on the product page where it was.bf_agecheck_binding_statusesandbf_agecheck_monitor_ordercontrol which orders the safety net watches.bf_agecheck_legacy_meta_keyslists meta keys of an earlier solution, so existing orders keep their age.
This plugin is an independent project by Blueforce Digital Solutions. It is not affiliated with Automattic, WooCommerce or any payment provider. Product names are used only to describe compatibility.
Screenshots







Installation
- Install and activate WooCommerce 8.9 or newer.
- Install and activate this plugin.
- Go to WooCommerce, Settings, Advanced, Age check and set your default minimum age.
- Optional: go to Products, Categories and set a minimum age per category.
- Place a test order to see the date of birth field in your checkout.
FAQ
-
Does this plugin verify identity documents?
-
No. It checks a date of birth that the customer enters. If you need document verification, use a dedicated identity service.
-
Does it make my shop legally compliant?
-
It assists you with your age control, it cannot guarantee compliance. Which measures are sufficient depends on your products and your country. Please check the rules that apply to you.
-
Does it show a popup when someone opens the shop?
-
No. The check happens where the order is placed.
-
Can I set different ages for different products?
-
Yes, per product category and per product. Open Products, Categories, edit a category and enter its minimum age. Enter 0 for no minimum age, for example for mineral water. Leave the field empty to inherit from the parent category. If a product is in several categories, the highest age applies, and for a cart the strictest product decides. A 17 year old can then buy beer, but not a cart that also contains whisky. Products whose categories carry no rule use the default minimum age, or no check at all if you prefer. For a single exception, edit the product and set its minimum age under Product data, Advanced. It overrides the categories, in both directions.
-
A cart needs no age check. What happens?
-
Nothing: no date of birth field, nothing stored, no notice from the safety net.
-
Which dates can customers enter?
-
In the classic checkout and next to express buttons the browser shows a date picker. In the block checkout the field is a text field that accepts 17.05.2001 and 2001-05-17. A date picker is used there automatically once your WooCommerce version supports date fields. Dates with slashes are not accepted by default, because 01/02/2001 means different days in different countries.
-
What is stored?
-
By default only the result of the check and the age at the time of the order. You can choose to store the full date of birth with the order. The date of birth is never saved to the customer account.
-
Where can I see why an order was rejected?
-
In WooCommerce, Status, Logs, source
blueforce-age-check. Every rejected order is listed with the route and the reason, such as a date of birth below the minimum age. Automatic cancellations and notices of the safety net are there too. The log contains no date of birth and no other personal data. -
Why do I get an email about an order without a valid age check?
-
The order reached a binding status, but no valid age check is recorded for it. Usually a payment button skipped the checkout form. The order note names the payment method. Please clarify the age of the customer before you ship. Orders you create yourself in the admin area and subscription renewals are not reported.
-
They unlock as soon as the customer has entered a valid date of birth: on product and cart pages in the field above the buttons, at checkout in the date of birth field of the form. The confirmation lasts for the shop session, so the customer sees the field once.
-
What happens to the data when I delete the plugin?
-
The settings and the age rules on categories and products are removed. The age check data stored with your orders stays, because it belongs to your order history. If you store full dates of birth and want them gone, erase the personal data of the orders with the WooCommerce tools before you delete the plugin.
-
Which WooCommerce version do I need?
-
WooCommerce 8.9 or newer. On older versions the plugin stays inactive and tells you so in the admin area.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“Blueforce Age Check for WooCommerce” is open source software. The following people have contributed to this plugin.
Contributors“Blueforce Age Check for WooCommerce” has been translated into 2 locales. Thank you to the translators for their contributions.
Translate “Blueforce Age Check for WooCommerce” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
1.1.0
- New: minimum age per product category, for example 16 for beer and wine, 18 for spirits, none for mineral water. Child categories inherit, the highest age in the cart applies.
- New: minimum age on a single product, to override its categories.
- New: choose what applies to products without a rule, the default minimum age or no check.
- Carts that need no age check show no date of birth field and store nothing.
- The safety net and all checks now work with the products of the order.
- New: once 25 orders have passed the age check, a short note on the orders screen asks for a review. It can be dismissed for good or snoozed for 90 days.
- New: rejected orders, automatic cancellations and safety net notices are written to the WooCommerce log, without personal data.
- Security: the express endpoint only accepts requests from your own shop, so another site cannot write a date of birth into a visitor’s session.
- Privacy: the date of birth is removed from the session after the order, and abandoned checkout drafts lose it after an hour.
- Fixed: a clearer Site Health text when a payment plugin with its own order route has changed, no PHP warning on a manipulated date field, correct date of birth on the order screen in every time zone.
1.0.0
- First release.
- Date of birth field in the classic checkout and the block checkout.
- Server-side checks for the classic checkout, the Store API and payment plugins that create orders directly.
- Date of birth next to express payment buttons on product and cart pages, with support for WooCommerce Stripe Payment Gateway, WooCommerce PayPal Payments and TWINT for WooCommerce.
- Safety net with order note, log entry and email notice for orders without a valid age check.
- Choice of stored data, personal data export and erasure, Site Health tests.
- German translations for Germany (informal and formal) and Switzerland.
