

Signup form visitors use to unlock protected content or downloads.
Turn your WordPress content and downloads into leads.
GWiz IT Content Locker lets you place pages, downloads, sections of content, or individual page elements behind a customizable signup form.
Visitors enter their information to unlock your content, giving you a simple way to grow your email list, offer lead magnets, protect downloads, and measure conversions directly from WordPress.
The plugin is free and self-hosted. No third-party SaaS service is required to use the content locker or store your signups.
Want to use an existing email marketing platform? Confirmed subscribers can optionally be synced automatically to Mailchimp, Brevo, ConvertKit, ActiveCampaign, or phpList.
GWiz IT Content Locker — demo video
You can create multiple Restricted Areas, each with its own protected content, form, styling, settings, integrations, and subscriber list.
[gwiz_it_content_locker].Confirmed signups can optionally be sent automatically to:
These integrations are optional.
You can use GWiz IT Content Locker entirely within WordPress without connecting an external email marketing service.
Choose the spam-protection method that works best for your site:
GWiz IT Content Locker supports content created with:
The plugin detects gated content inside supported page-builder data and only loads its frontend assets when they are needed.
GWiz IT Content Locker stores signup information on your WordPress website.
No subscriber information is sent to an external email marketing service unless you configure and enable that integration.
The plugin integrates with the WordPress privacy tools: signups appear in Tools Export Personal Data, and Tools Erase Personal Data removes the visitor’s email, form answers, source URL and IP address (an anonymised record is kept so your statistics stay accurate) and asks each connected email service to delete the contact. Suggested privacy-policy text is provided under Tools Privacy.
Gate activity is kept bounded and privacy-friendly on an automatic schedule: visitor IP addresses are anonymised after 30 days and old events are deleted after 365 days by default (both configurable under Settings Data Retention).
If you prefer not to use an external CAPTCHA service, the built-in ALTCHA option is fully self-hosted and does not make external API calls.
gwiz_it_content_locker_bypass_logged_in filter).Gate content inline using the shortcode:
[gwiz_it_content_locker area="AreaName"]This content is hidden until the visitor signs up.[/gwiz_it_content_locker]
The area attribute uses the Restricted Area’s display name.
The exact shortcode for each area is shown in the area’s Settings modal with a Copy button.
If multiple areas share the same name, automatic name deduplication is applied: AreaName, AreaName2, AreaName3, etc.
Important — logged-in users normally do not see the gate.
If you are logged in as an administrator or another WordPress user, the plugin intentionally shows the unlocked content without requiring signup.
This prevents site administrators and editors from being locked out of their own content.
To test the gate as a normal visitor:
Administrators can also enable Debug Mode in the Restricted Area settings to preview the gate while logged in.
Developers can adjust logged-in bypass behavior with the gwiz_it_content_locker_bypass_logged_in filter.
GWiz IT Content Locker optionally connects to third-party services when configured by the site administrator.
No data is sent to these services until the administrator explicitly enables the integration and provides the required credentials.
ActiveCampaign — Syncs confirmed subscriber email addresses to your ActiveCampaign account through its API. (ActiveCampaign Privacy Policy)
Brevo (formerly Sendinblue) — Syncs confirmed subscriber email addresses to your Brevo account through its API. (Brevo Privacy Policy)
ConvertKit — Syncs confirmed subscriber email addresses to your ConvertKit account through its API. (ConvertKit Privacy Policy)
Mailchimp — Syncs confirmed subscriber email addresses to your Mailchimp audience through its API. (Mailchimp Privacy Policy)
phpList — Syncs confirmed subscriber email addresses to your self-hosted phpList installation through its REST API.
Google reCAPTCHA — When enabled, loads Google reCAPTCHA to protect signup forms from spam. Google may receive information including the visitor’s IP address and browser information for verification. (Google Privacy Policy)
All external data transfers occur over HTTPS.
The ALTCHA CAPTCHA option is fully self-hosted and does not connect to an external CAPTCHA service.
gwiz_it_content_locker_load_frontend
Controls whether GWiz IT Content Locker frontend assets load on the current page.
Example:
add_filter( 'gwiz_it_content_locker_load_frontend', function( $should_load, $post ) {
// Force-load on a specific page template.
if ( is_page_template( 'template-custom.php' ) ) {
return true;
}
// Prevent loading on the shop page.
if ( is_shop() ) {
return false;
}
return $should_load;
}, 10, 2 );
Parameters:
$should_load (bool) — Whether frontend assets should load. The default is automatically determined based on shortcode or selector presence.$post (WP_Post|null) — The current post object.gwiz_it_content_locker_bypass_logged_in
Allows developers to modify the default behavior that lets logged-in WordPress users bypass content gates.
By default, logged-in users are not required to complete signup forms. File downloads are stricter: the default there requires a role with edit capability, so ordinary subscribers do not receive gated files.
Parameters:
$bypass (bool) — Whether logged-in users bypass the gate (the download endpoint passes current_user_can( 'edit_posts' ) as this default).$area_id (int) — The Restricted Area ID.$settings (array) — The area’s parsed settings.gwiz_it_content_locker_caches_cleared
Fires after the plugin cleared site caches following a Restricted Area save (see Settings Cache Clearing).
$cleared (bool) — Whether a known cache plugin or host cache was cleared. Use this to hook in your own cache/CDN purge.gwiz_it_content_locker_retention_run
Fires after a daily data-retention pass (see Settings Data Retention).
$stats (array) — Rows processed in the pass: tickets_purged, ips_anonymised, events_deleted.