Age Gate


There are many uses for restricting content based on age, be it movie trailers, beer or other adult themes. This plugin allows you to set a restriction on what content can been seen or restricted based on the age of the user.


  • Ask users to verify their age on page load
  • SEO Friendly – common bots and crawlers are omitted from age checks
  • Ability to add custom user agents for less common bots
  • Shortcode for in content restrictions
  • Choose to restrict an entire site, or selected content
  • Select a different age on individual content
  • Allow certain content to not be age gated under “all content” mode
  • Three choices for input; dropdowns, input fields or a simple yes/no button
  • Customise the order of the inputs based on your region (DD MM YYYY or MM DD YYYY)
  • Allow a “remember me” check box if desired
  • Ability to omit logged in users from being checked
  • Add your own logo
  • Update the text displayed on the entry form
  • Select background colour/image, foreground colour and text colour
  • Use built in styling out of the box, or your own custom style
  • Ability to add legal note or information to the bottom of the form
  • Redirect failed logins to a URL of your choice e.g. an alcohol awareness website.
  • Ability to use a non caching version
  • Various hooks to add even more customisation such as additional form fields
  • Compatible with multilingual plugins WPML, Polylang (2.3+), WP Multilang


  • An example of Age Gate
  • The Restrictions settings page
  • Age Gate has a variety of customisable message settings
  • The appearance can be tailored to fit your website
  • Advanced options include the use of a JavaScript Age Gate
  • Manage what users can change Age Gate’s setting, restrict posts and exclude settings from certain post types.


  1. Upload the ‘age-gate’ folder to the ‘/wp-content/plugins/’ directory
  2. Activate the plugin through the ‘Plugins’ menu in WordPress
  3. Visit ‘Age Gate’ admin section and adjust your configuration.

Be sure to check the ‘Access’ settings tab to grant permissions and omit any post types you don’t wish to display Age Gate options on.


I can’t get past the Age Gate / The Age Gate only worked once

The most likely cause for this is caching on your site either via a plugin or your hosting provider. If the Age Gate appears stuck try using the JavaScript mode in the advanced tab and clear any caches.

Can I restrict a particular page?

You can. If you use selected content, a checkbox will appear in content pages

Can I add my own logo/branding?

Of course, it’s your site

I’m in X country, can I format the date style?

Yes! DD MM YYYY and MM DD YYYY are supported along with a choice of how the dates are entered.

I use caching, will that be affected?

From version 1.4.0 those using caching can select the “Cache Bypass” option to allow age gating even with caching on. Be sure to empty your cache when making changes to the plugin settings. From 2.0.0 this option is in Advanced -> Use uncachable version


4 June 2024
I wish all plugins were simple, easy and fast to set-up as this one. Props to the developer! Sent you a small donation.
5 September 2023
The best plugin for are verification, with a ton of extra features.
8 December 2022
All you need for the age verification handling on your website – detailed field options, custom styling, multilingual versions, top support. You may add basic custom code for additional styling as well.
Read all 59 reviews

Contributors and Developers

“Age Gate” is open source software. The following people have contributed to this plugin.


“Age Gate” has been translated into 7 locales. Thank you to the translators for their contributions.

Translate “Age Gate” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.

Change Log


  • Added – Integration for WOOF/Husky


  • Added empty file to fallback view directory


  • Changed – VH height css variable
  • Fixed – Age Gate meta box displaying on shop orders using HPOS


  • Changed – default Age Gate z-index
  • Fixed – Long missing headline override settings
  • Fixed – Issue with certain transition changes not applying to the JS version


  • Fixed – video playback on some devices (playsinline)
  • Fixed – Query params stripped when redirecting (standard mode)
  • Fixed – markdown not rendering as it should in some locations
  • Added – Options to change header elements via settings
  • Added – Disable Age Gate option without need for deactivation
  • Changed – method of blurring background content
  • Removed – obsolete age_gate/presentation/blur/ignore filter


  • Added – Option to store data in localStorage instead of cookies
  • Added – Filter to final validation rules
  • Fixed – Multilingual messages not translating if langauage key is hyphenated
  • Fixed – Deprecations in new PHP versions
  • Fixed – Issue were some ages would retrigger the modal
  • Fixed – Errors in loading text domain
  • Fixed – Support for offloaded media


  • Fixed – Fatal error under PHP8.1 when storing access settings
  • Fixed – Error on activation if administrator role non-existent


  • Fixed – URL comparison in Safari


  • Added – option to inherit status from ancestors
  • Added – option for custom date error message
  • Fixed – admin messages showing erroneously
  • Fixed – success redirects in JS mode


  • Added – polyfill for mbstring


  • Fixed – Issue in Standard mode where passing Age Gate would empty shopping cart


  • Fixed – Issue where Breeze cache wouldn’t render Age Gate.
  • Updated – translation file


  • Fixed – Error message translation
  • Fixed – Autotabbing when using regions addon
  • Fixed – Multilingual messages not translation if langauage is the same
  • Fixed – potential error thrown in array flatterning method
  • Fixed – Anonymous mode allowing undesired users through
  • Fixed – Selects not repopulating in PHP mode
  • Added – option to sort select years
  • Added – option to render loading icon as image
  • Changed – default minimum select year to 1900
  • Changed – button submission handler to (hopefully) resolve lingering mobile issues
  • Removed – unused admin modal styles


  • Fixed – remove buttonshowing even with no image selected
  • Added – Legacy hook for age_gate_logo
  • Added – New hooks for logo manipulation


  • Fixed – Multilingual fields missing since 3.0.6
  • Added – CSS Variable –ag-transition-timing
  • Changed – CSS Variable –ag-transition to –ag-transition-duration


  • Fixed – Wrong input being selected by default when not DDMMYYYY
  • Fixed – JS hooks continuously rechallenging users
  • Fixed – toolbar toggle inoperable on insecure sites


  • Fixed – JS Hook when age gate already passed
  • Fixed – JavaScript exit transitions
  • Added – AJAX fallback if REST unreachable
  • Added – age_gate_hidden JavaScript event
  • Changed – Admin nav behaviour
  • Changed – Admin validation behaviour


  • Fixed – typos in README
  • Fixed – additional tools not displaying
  • Fixed – per page controls not showing
  • Added – checks for dependencies
  • Added – filter for cookie domain
  • Changed – default cookie domain is current domain
  • Changed – cookie name filter
  • Changed – default colours in line with v2
  • Changed – Legacy hook class name


  • Fixed – Restriction display in admin
  • Fixed – Implemented new polyfill for Safari event submitter
  • Fixed – Phantom validation errors in Content section
  • Fixed – Double escaping in buttons prompt
  • Added – cleanup for previous cron schedule
  • Changed – Removed use of PHP short tags


  • Fixed – Fatal error under some settings combination
  • Fixed – Hide display of default scrollbar


  • Fixed – 0 valued opacity not being reflected on the site
  • Fixed – iOS Safari scrolling when Age Gate visible
  • Fixed – Older versions of Safari not operating with buttons
  • Fixed – Inability to store appearance settings
  • Fixed – Improved data sanitation
  • Fixed – Custom title output in js/munge mode
  • Added – CSS variable for loader colour
  • Added – Default post types to ignore in admin e.g. shop orders or attachment
  • Changed – Default max-width on logo to be 100%
  • Changed – Button styles prefixed with element
  • Changed – Cookie length filter to be time and length


  • Added – Standard cookie length filter age_gate/cookie/length
  • Added – PHP version check message
  • Fixed – per content toggle display incorrect status
  • Fixed – minor stylistic elements for wider default support
  • Fixed – Javascript error in focus trap when using buttons
  • Fixed – Excessively strict validation rules
  • Fixed – Escaped characters showing on front end
  • Removed – API Error warning as return false flags
  • Removed – Unused API endpoint


  • Complete rewrite
  • Improved Taxonomy inheritance
  • Removed: Use of admin-ajax in JS mode
  • Removed: Custom CSS editor
  • Removed: jQuery dependencies
  • Changed: Custom editor to support markdown and be stricter
  • Added: Ability to override templates in theme
  • Added: Easily add classes and other attributes
  • Added: Option to load Age Gate earlier in the DOM
  • Various performance and security improvements