{"id":345499,"date":"2026-07-29T11:37:48","date_gmt":"2026-07-29T11:37:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/post-type-password-protect\/"},"modified":"2026-07-29T15:52:52","modified_gmt":"2026-07-29T15:52:52","slug":"gatekeepr","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/gatekeepr\/","author":21025295,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.0.2","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Gatekeepr \u2013 Password Protect for Post Types","header_author":"Bilal","header_description":"Password protect the single\/detail pages of chosen post types behind a shared or per-post-type password, with a modern unlock screen.","assets_banners_color":"cbc6c2","last_updated":"2026-07-29 15:52:52","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/bilalkk9\/post-type-password-protect","header_author_uri":"https:\/\/profiles.wordpress.org\/mbilalkk\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":30,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"mbilalkk","date":"2026-07-29 15:52:52"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3627169,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3627169,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3627182,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3627182,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3627435,"resolution":"1","location":"assets","locale":"","width":1390,"height":1186},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3627435,"resolution":"2","location":"assets","locale":"","width":1390,"height":796},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3627435,"resolution":"3","location":"assets","locale":"","width":1390,"height":1436},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3627435,"resolution":"4","location":"assets","locale":"","width":1020,"height":1214},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3627435,"resolution":"5","location":"assets","locale":"","width":1390,"height":996},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3627435,"resolution":"6","location":"assets","locale":"","width":1390,"height":860}},"screenshots":{"1":"Choose which post types are protected, with a clear toggle for each.","2":"Appearance settings \u2014 background color, accent color, logo, and secondary button.","3":"Individual password mode \u2014 give each protected post type its own password.","4":"The front-end unlock screen shown to visitors.","5":"The Gatekeepr settings screen \u2014 password mode, password field, and unlock duration.","6":"A \"Protected\" indicator column on the Posts list, showing which posts are gated."}},"plugin_section":[],"plugin_tags":[1912,18193,1794,30794,17051],"plugin_category":[],"plugin_contributors":[266306],"plugin_business_model":[],"class_list":["post-345499","plugin","type-plugin","status-publish","hentry","plugin_tags-access-control","plugin_tags-content-protection","plugin_tags-custom-post-type","plugin_tags-password-protect","plugin_tags-restrict-content","plugin_contributors-mbilalkk","plugin_committers-mbilalkk"],"banners":{"banner":"https:\/\/ps.w.org\/gatekeepr\/assets\/banner-772x250.png?rev=3627182","banner_2x":"https:\/\/ps.w.org\/gatekeepr\/assets\/banner-1544x500.png?rev=3627182","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/gatekeepr\/assets\/icon-128x128.png?rev=3627169","icon_2x":"https:\/\/ps.w.org\/gatekeepr\/assets\/icon-256x256.png?rev=3627169","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/gatekeepr\/assets\/screenshot-1.png?rev=3627435","caption":"Choose which post types are protected, with a clear toggle for each."},{"src":"https:\/\/ps.w.org\/gatekeepr\/assets\/screenshot-2.png?rev=3627435","caption":"Appearance settings \u2014 background color, accent color, logo, and secondary button."},{"src":"https:\/\/ps.w.org\/gatekeepr\/assets\/screenshot-3.png?rev=3627435","caption":"Individual password mode \u2014 give each protected post type its own password."},{"src":"https:\/\/ps.w.org\/gatekeepr\/assets\/screenshot-4.png?rev=3627435","caption":"The front-end unlock screen shown to visitors."},{"src":"https:\/\/ps.w.org\/gatekeepr\/assets\/screenshot-5.png?rev=3627435","caption":"The Gatekeepr settings screen \u2014 password mode, password field, and unlock duration."},{"src":"https:\/\/ps.w.org\/gatekeepr\/assets\/screenshot-6.png?rev=3627435","caption":"A \"Protected\" indicator column on the Posts list, showing which posts are gated."}],"raw_content":"<!--section=description-->\n<p>Gatekeepr lets you require a password before visitors can view the single\/detail page of any post type \u2014 Posts, Pages, or any custom post type registered by your theme or another plugin.<\/p>\n\n<p>Unlike WordPress's built-in per-post password protection, this plugin protects an entire post type at once from a single settings screen \u2014 with either one shared password for everything, or an individual password per post type.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Choose exactly which post types are protected \u2014 every public post type is listed with a toggle, including custom post types.<\/li>\n<li>Two password modes: one shared password for everything, or an individual password per protected post type.<\/li>\n<li>Visitors who enter the correct password stay unlocked for a configurable number of days (cookie-based), instead of being asked every visit.<\/li>\n<li>Changing a password immediately invalidates every visitor's existing unlock for it \u2014 no manual cleanup needed.<\/li>\n<li>Logged-in users who can edit a given post always see it directly, so editing and previewing is never blocked.<\/li>\n<li>Clean, standalone unlock screen that doesn't depend on your active theme, so it renders consistently even on page-builder sites.<\/li>\n<li>Customize the unlock screen: background color, accent color, an uploaded logo, and an optional secondary button (e.g. \"Contact us\") linking anywhere you choose.<\/li>\n<li>Built-in brute-force throttling on the password form.<\/li>\n<li>The REST API and RSS\/Atom feeds are gated too, so protected content isn't readable through either while locked.<\/li>\n<li>Protected post types are automatically excluded from XML sitemaps (core WordPress sitemaps, Yoast SEO, and Rank Math), so they aren't advertised to search engines.<\/li>\n<li>A small \"Protected\" indicator appears in the post list table for any post type that's currently gated, so editors can see it at a glance.<\/li>\n<li>Compatible with full-page caching plugins \u2014 protected pages are automatically excluded from the page cache so one visitor's session is never served to another.<\/li>\n<li>No external requests, no tracking, no bundled third-party services.<\/li>\n<\/ul>\n\n<p>Development happens in the open on GitHub: https:\/\/github.com\/bilalkk9\/post-type-password-protect<\/p>\n\n<h4>A note on the \"current password\" display<\/h4>\n\n<p>The Gatekeepr settings screen can show you the current password (hidden by default, behind a \"Show\" toggle) so you don't need to reset it if you've forgotten it. To make this possible, the password is stored in an encrypted, recoverable form rather than only as a one-way hash. If your workflow requires a password that can never be viewed after saving, simply treat the field as write-only and don't use the \"Show\" toggle \u2014 the underlying visitor-facing verification always uses a one-way hash regardless.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to the <code>\/wp-content\/plugins\/gatekeepr<\/code> directory, or install the plugin directly through the WordPress \"Plugins \u2192 Add New\" screen.<\/li>\n<li>Activate the plugin through the \"Plugins\" screen in WordPress.<\/li>\n<li>Go to Settings \u2192 Password Protect.<\/li>\n<li>Check the post types you want to protect, set a password, and click \"Update Password\".<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20replace%20wordpress%27s%20built-in%20post%20password%20feature%3F\"><h3>Does this replace WordPress's built-in post password feature?<\/h3><\/dt>\n<dd><p>No. WordPress's native feature protects one post at a time with a password you set per-post. This plugin instead protects every single\/detail page of a chosen post type at once, from a single settings screen \u2014 with a shared password across all protected types, or a separate password for each one.<\/p><\/dd>\n<dt id=\"will%20search%20engines%20index%20my%20protected%20pages%3F\"><h3>Will search engines index my protected pages?<\/h3><\/dt>\n<dd><p>No. While a page is locked, the unlock screen is served with a <code>noindex<\/code> directive instead of the real content.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20i%20change%20the%20password%3F\"><h3>What happens if I change the password?<\/h3><\/dt>\n<dd><p>Every visitor who was previously unlocked will be asked for the password again on their next visit. This happens automatically \u2014 there is nothing to clear manually.<\/p><\/dd>\n<dt id=\"does%20this%20work%20with%20page%20builders%20like%20elementor%3F\"><h3>Does this work with page builders like Elementor?<\/h3><\/dt>\n<dd><p>Yes. The gate runs before the page is rendered, so it works regardless of how the page itself was built.<\/p><\/dd>\n<dt id=\"does%20this%20affect%20the%20rest%20api%20or%20rss%20feeds%3F\"><h3>Does this affect the REST API or RSS feeds?<\/h3><\/dt>\n<dd><p>Protected, locked posts have their content and excerpt redacted in both the REST API and RSS\/Atom feed output, so the underlying content isn't exposed through those either.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Password protect the single\/detail pages of any post type behind a shared or per-post-type password, with a clean, modern unlock screen.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/345499","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=345499"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/mbilalkk"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=345499"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=345499"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=345499"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=345499"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=345499"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=345499"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}