{"id":51223,"date":"2016-09-30T20:07:11","date_gmt":"2016-09-30T20:07:11","guid":{"rendered":"https:\/\/wordpress.org\/plugins-wp\/content-control\/"},"modified":"2025-05-27T08:57:52","modified_gmt":"2025-05-27T08:57:52","slug":"content-control","status":"publish","type":"plugin","link":"https:\/\/ast.wordpress.org\/plugins\/content-control\/","author":6393878,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"2.6.5","stable_tag":"2.6.5","tested":"6.8.5","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"Content Control","header_author":"Code Atlantic","header_description":"","assets_banners_color":"63afd5","last_updated":"2025-05-27 08:57:52","external_support_url":"https:\/\/contentcontrolplugin.com\/support\/","external_repository_url":"","donate_link":"https:\/\/code-atlantic.com\/donate\/?utm_campaign=donations&utm_source=readme-header&utm_medium=plugin-ui&utm_content=donate-link","header_plugin_uri":"https:\/\/contentcontrolplugin.com\/?utm_campaign=plugin-info&utm_source=php-file-header&utm_medium=plugin-ui&utm_content=plugin-uri","header_author_uri":"https:\/\/code-atlantic.com\/?utm_campaign=plugin-info&utm_source=php-file-header&utm_medium=plugin-ui&utm_content=author-uri","rating":4.9,"author_block_rating":0,"active_installs":40000,"downloads":874783,"num_ratings":575,"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":"danieliser","date":"2016-11-09 19:53:06"},"1.0.1":{"tag":"1.0.1","author":"danieliser","date":"2017-06-27 23:46:02"},"1.0.2":{"tag":"1.0.2","author":"danieliser","date":"2017-06-29 17:58:41"},"1.0.3":{"tag":"1.0.3","author":"danieliser","date":"2017-06-29 18:07:10"},"1.1.0":{"tag":"1.1.0","author":"danieliser","date":"2019-10-11 06:30:02"},"1.1.1":{"tag":"1.1.1","author":"danieliser","date":"2019-10-16 03:24:22"},"1.1.10":{"tag":"1.1.10","author":"danieliser","date":"2022-12-28 21:02:49"},"1.1.2":{"tag":"1.1.2","author":"danieliser","date":"2019-11-10 06:14:21"},"1.1.3":{"tag":"1.1.3","author":"fpcorso","date":"2019-12-18 17:25:50"},"1.1.4":{"tag":"1.1.4","author":"fpcorso","date":"2020-09-10 12:52:31"},"1.1.5":{"tag":"1.1.5","author":"danieliser","date":"2021-02-24 03:09:58"},"1.1.6":{"tag":"1.1.6","author":"danieliser","date":"2021-03-21 09:34:49"},"1.1.7":{"tag":"1.1.7","author":"danieliser","date":"2021-07-17 19:21:59"},"1.1.8":{"tag":"1.1.8","author":"danieliser","date":"2021-09-30 07:17:27"},"2.0.0":{"tag":"2.0.0","author":"codeatlantic","date":"2023-09-18 01:47:10"},"2.0.1":{"tag":"2.0.1","author":"codeatlantic","date":"2023-09-18 03:10:37"},"2.0.10":{"tag":"2.0.10","author":"codeatlantic","date":"2023-10-01 09:39:02"},"2.0.11":{"tag":"2.0.11","author":"codeatlantic","date":"2023-10-24 07:59:13"},"2.0.12":{"tag":"2.0.12","author":"codeatlantic","date":"2023-10-26 09:40:28"},"2.0.2":{"tag":"2.0.2","author":"codeatlantic","date":"2023-09-18 06:25:46"},"2.0.3":{"tag":"2.0.3","author":"codeatlantic","date":"2023-09-18 06:43:39"},"2.0.4":{"tag":"2.0.4","author":"codeatlantic","date":"2023-09-18 08:23:02"},"2.0.5":{"tag":"2.0.5","author":"codeatlantic","date":"2023-09-19 03:47:04"},"2.0.6":{"tag":"2.0.6","author":"codeatlantic","date":"2023-09-19 10:09:16"},"2.0.7":{"tag":"2.0.7","author":"codeatlantic","date":"2023-09-21 10:13:03"},"2.0.8":{"tag":"2.0.8","author":"codeatlantic","date":"2023-09-22 10:08:39"},"2.0.9":{"tag":"2.0.9","author":"codeatlantic","date":"2023-09-24 10:04:29"},"2.1.0":{"tag":"2.1.0","author":"codeatlantic","date":"2024-02-15 21:49:18"},"2.2.0":{"tag":"2.2.0","author":"codeatlantic","date":"2024-03-17 23:33:25"},"2.2.1":{"tag":"2.2.1","author":"codeatlantic","date":"2024-03-18 07:52:22"},"2.2.2":{"tag":"2.2.2","author":"codeatlantic","date":"2024-03-19 09:35:26"},"2.2.3":{"tag":"2.2.3","author":"codeatlantic","date":"2024-03-20 00:50:57"},"2.2.4":{"tag":"2.2.4","author":"codeatlantic","date":"2024-03-20 22:11:58"},"2.2.5":{"tag":"2.2.5","author":"codeatlantic","date":"2024-03-21 02:37:48"},"2.2.6":{"tag":"2.2.6","author":"codeatlantic","date":"2024-03-21 03:17:07"},"2.2.7":{"tag":"2.2.7","author":"codeatlantic","date":"2024-03-21 03:26:53"},"2.2.8":{"tag":"2.2.8","author":"codeatlantic","date":"2024-05-07 06:53:35"},"2.3.0":{"tag":"2.3.0","author":"codeatlantic","date":"2024-05-23 04:59:16"},"2.4.0":{"tag":"2.4.0","author":"codeatlantic","date":"2024-10-18 03:41:25"},"2.5.0":{"tag":"2.5.0","author":"codeatlantic","date":"2025-03-11 09:41:21"},"2.6.0":{"tag":"2.6.0","author":"codeatlantic","date":"2025-03-11 10:19:36"},"2.6.1":{"tag":"2.6.1","author":"codeatlantic","date":"2025-03-15 08:03:42"},"2.6.2":{"tag":"2.6.2","author":"codeatlantic","date":"2025-04-22 06:36:57"},"2.6.3":{"tag":"2.6.3","author":"codeatlantic","date":"2025-05-08 22:33:21"},"2.6.4":{"tag":"2.6.4","author":"codeatlantic","date":"2025-05-09 06:15:15"},"2.6.5":{"tag":"2.6.5","author":"codeatlantic","date":"2025-05-27 08:57:52"}},"upgrade_notice":[],"ratings":{"1":11,"2":2,"3":8,"4":17,"5":537},"assets_icons":{"icon-128x128.gif":{"filename":"icon-128x128.gif","revision":2968535,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.gif":{"filename":"icon-256x256.gif","revision":2968535,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":2968104,"resolution":"1544x500","location":"assets","locale":""},"banner-1880x609.png":{"filename":"banner-1880x609.png","revision":2968104,"resolution":"1880x609","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":2968104,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3301291,"resolution":false,"location":"assets","locale":"","contents":"{\"landingPage\":\"\\\/wp-admin\\\/options-general.php?page=content-control-settings\",\"preferredVersions\":{\"php\":\"8.0\",\"wp\":\"latest\"},\"phpExtensionBundles\":[\"kitchen-sink\"],\"features\":{\"networking\":true},\"steps\":[{\"step\":\"installPlugin\",\"pluginZipFile\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"content-control\"},\"options\":{\"activate\":true}},{\"step\":\"login\",\"username\":\"admin\",\"password\":\"password\"}]}"}},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1","1.0.2","1.0.3","1.1.0","1.1.1","1.1.10","1.1.2","1.1.3","1.1.4","1.1.5","1.1.6","1.1.7","1.1.8","2.0.0","2.0.1","2.0.10","2.0.11","2.0.12","2.0.2","2.0.3","2.0.4","2.0.5","2.0.6","2.0.7","2.0.8","2.0.9","2.1.0","2.2.0","2.2.1","2.2.2","2.2.3","2.2.4","2.2.5","2.2.6","2.2.7","2.2.8","2.3.0","2.4.0","2.5.0","2.6.0","2.6.1","2.6.2","2.6.3","2.6.4","2.6.5"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":2968104,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":2968104,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":2968104,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":2968104,"resolution":"4","location":"assets","locale":""},"screenshot-5.png":{"filename":"screenshot-5.png","revision":2968104,"resolution":"5","location":"assets","locale":""},"screenshot-6.png":{"filename":"screenshot-6.png","revision":2968104,"resolution":"6","location":"assets","locale":""},"screenshot-7.png":{"filename":"screenshot-7.png","revision":2968104,"resolution":"7","location":"assets","locale":""},"screenshot-8.png":{"filename":"screenshot-8.png","revision":2968104,"resolution":"8","location":"assets","locale":""}},"screenshots":{"1":"Restrict access to individual blocks.","2":"Create unlimited restriction sets.","3":"Choose who can see the restricted content.","4":"Display a message in place of restricted content.","5":"Redirect users to log in or to another page if they access restricted content.","6":"Choose any content you can think of to protect.","7":"Use shortcodes to protect content inline.","8":"Restrict widgets as well."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[1912,16114,1281,19898,1932],"plugin_category":[58],"plugin_contributors":[170495,78221],"plugin_business_model":[216238],"class_list":["post-51223","plugin","type-plugin","status-publish","hentry","plugin_tags-access-control","plugin_tags-content-restriction","plugin_tags-maintenance-mode","plugin_tags-members-only","plugin_tags-membership","plugin_category-user-management","plugin_contributors-codeatlantic","plugin_contributors-danieliser","plugin_business_model-commercial","plugin_committers-codeatlantic","plugin_committers-danieliser","plugin_support_reps-danieliser","plugin_support_reps-jamiepineda","plugin_support_reps-kimmyx","plugin_support_reps-mlchaves","plugin_support_reps-sarai1"],"banners":{"banner":"https:\/\/ps.w.org\/content-control\/assets\/banner-772x250.png?rev=2968104","banner_2x":"https:\/\/ps.w.org\/content-control\/assets\/banner-1544x500.png?rev=2968104","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/content-control\/assets\/icon-128x128.gif?rev=2968535","icon_2x":"https:\/\/ps.w.org\/content-control\/assets\/icon-256x256.gif?rev=2968535","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/content-control\/assets\/screenshot-1.png?rev=2968104","caption":"Restrict access to individual blocks."},{"src":"https:\/\/ps.w.org\/content-control\/assets\/screenshot-2.png?rev=2968104","caption":"Create unlimited restriction sets."},{"src":"https:\/\/ps.w.org\/content-control\/assets\/screenshot-3.png?rev=2968104","caption":"Choose who can see the restricted content."},{"src":"https:\/\/ps.w.org\/content-control\/assets\/screenshot-4.png?rev=2968104","caption":"Display a message in place of restricted content."},{"src":"https:\/\/ps.w.org\/content-control\/assets\/screenshot-5.png?rev=2968104","caption":"Redirect users to log in or to another page if they access restricted content."},{"src":"https:\/\/ps.w.org\/content-control\/assets\/screenshot-6.png?rev=2968104","caption":"Choose any content you can think of to protect."},{"src":"https:\/\/ps.w.org\/content-control\/assets\/screenshot-7.png?rev=2968104","caption":"Use shortcodes to protect content inline."},{"src":"https:\/\/ps.w.org\/content-control\/assets\/screenshot-8.png?rev=2968104","caption":"Restrict widgets as well."}],"raw_content":"<!--section=description-->\n<p>Content Control is a transformative plugin, allowing you to fine-tune every aspect of your WordPress website's content. Decide who gets to see what, where, and when - be it pages, posts, widgets, or individual block visibility using our handy shortcode. Your content, your rules, executed perfectly!<\/p>\n\n<p>Content Control is intuitive and powerful, designed for all users\u2014whether logged in, holding specific roles, or even guests. Need top-tier content restriction or a dependable access manager for your site? Look no further. We've expanded our controls to include Gutenberg and Full Site Editor, giving you unmatched command.<\/p>\n\n<h4>Key Features<\/h4>\n\n<p>Discover what Content Control brings to your table:<\/p>\n\n<ul>\n<li>Full control over your site's content, restrict user access with ease!.<\/li>\n<li>Create a <strong>Paid Membership<\/strong> sites using your favorite or existing ecommerce plugins.<\/li>\n<li>Set up a seamless paywall for your content, providing teasers for users and prompting them to purchase access.<\/li>\n<li>Per block controls for Gutenberg and Full Site Editor, including user roles, device type, and more.\n\n<ul>\n<li>Responsive block controls with customizable breakpoints.<\/li>\n<li>Control block visibility by user status, roles, device type &amp; more.<\/li>\n<\/ul><\/li>\n<li>Restrict access to pages, posts, widgets, and individual blocks based on user status, roles, device type &amp; more.<\/li>\n<li>Offer membership tools for crafting membership access and members-only content.<\/li>\n<li>Provide responsive block designs that adapt to varying device sizes.<\/li>\n<li>Lockdown content selectively for improved user experiences.<\/li>\n<li>Implement role-based redirections to guide users effectively.<\/li>\n<li>Unlock the power of subscription content and monetization strategies.<\/li>\n<li>Safeguard specific categories, tags, custom post types, and custom taxonomies.<\/li>\n<li>Manage access to <a href=\"https:\/\/www.hongkiat.com\/blog\/wordpress-attachment-pages\/\">media attachment pages<\/a> for logged in\/out users or specific user roles.<\/li>\n<li>Display a custom message to users who do not have permission to view the content.<\/li>\n<li>Display specific content on a page or post to logged in users only, specific user roles, or logged out users.<\/li>\n<li>Redirect users without access permission to a login page, website homepage, or a custom URL.<\/li>\n<li>Highlight subscriber-only content for premium users.<\/li>\n<li>Use the <code>[content_control]<\/code> shortcode to protect content inline and cater to subscriber preferences.<\/li>\n<li>Control widget visibility by selecting the user type that can view each widget.<\/li>\n<li>Conditionally show coming soon or maintenance mode pages based on various rules.<\/li>\n<li>Restrict access to your site's REST API endpoints.<\/li>\n<\/ul>\n\n<p><a href=\"https:\/\/contentcontrolplugin.com\/docs\/?utm_campaign=plugin-info&amp;utm_source=readme-description&amp;utm_medium=wordpress&amp;utm_content=documentation-link\">Content Control Documentation<\/a><\/p>\n\n<h4>Pro Features<\/h4>\n\n<p>Content Control Pro, with advanced features like:<\/p>\n\n<ul>\n<li>Content Teasers for Paywalls, giving your users a sneak peek, leaving them wanting more.<\/li>\n<li>Optimize your WooCommerce &amp; Easy Digital Downloads (EDD) &amp; Paid Memberships Pro experiences with advanced rules.<\/li>\n<li>Schedule blocks, controlling content visibility timings using customizable scheduling rules.<\/li>\n<li>Dive deeper with advanced block rules and a boolean editor.<\/li>\n<li>Customize login, registration &amp; recovery page urls. Custom login urls give a more personalized user experience.<\/li>\n<\/ul>\n\n<p><a href=\"https:\/\/contentcontrolplugin.com\/pricing\/?utm_campaign=plugin-info&amp;utm_source=readme-description&amp;utm_medium=wordpress&amp;utm_content=upgrade-link\">Upgrade to Content Control Pro<\/a><\/p>\n\n<p><strong>Note<\/strong>: Content Control handles media access via content on media attachment pages but won't restrict direct server-level access to media files.<\/p>\n\n<h4>Passionately Crafted by Code Atlantic<\/h4>\n\n<p>At <a href=\"https:\/\/code-atlantic.com\" title=\"Code Atlantic - High Quality WordPress Plugins\">Code Atlantic<\/a>, we're passionate about crafting tools that empower your digital journey. Content Control is a testament to our commitment to quality.<\/p>\n\n<p>Dive into some of our renowned plugins:<\/p>\n\n<ul>\n<li><strong><a href=\"https:\/\/wppopupmaker.com\" title=\"#1 Popup &amp; Marketing Plugin for WordPress\">Popup Maker<\/a><\/strong> - The #1 Popup &amp; Marketing Plugin for WordPress<\/li>\n<li><strong><a href=\"https:\/\/wordpress.org\/plugins\/user-menus\/\" title=\"Show, Hide &amp; Customize Menu Items For Different Users\">User Menus<\/a><\/strong> - Innovatively Show, Hide &amp; Customize Menu Items<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ul>\n<li>Install Content Control either via the WordPress.org plugin repository or by uploading the files to your server.<\/li>\n<li>Activate Content Control.<\/li>\n<\/ul>\n\n<p>If you need help getting started with Content Control please see <a href=\"https:\/\/wordpress.org\/plugins\/content-control\/faq\/\" title=\"Content Control FAQ\">FAQs<\/a> which explains how to use the plugin.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id='can%20i%20offer%20paid%20memberships%20with%20content%20control%3F'><h3>Can I offer paid memberships with Content Control?<\/h3><\/dt>\n<dd><p>Currently this is available in our Pro version when coupled with your favorite ecommerce plugins such as WooCommerce, Easy Digital Downloads &amp; Paid Memberships Pro.<\/p><\/dd>\n<dt id='where%20can%20i%20get%20support%3F'><h3>Where can I get support?<\/h3><\/dt>\n<dd><p>If you get stuck, you can ask for help in the <a href=\"http:\/\/wordpress.org\/support\/plugin\/content-control\">Content Control Plugin Forum<\/a>.<\/p><\/dd>\n<dt id='where%20can%20i%20report%20bugs%20or%20contribute%20to%20the%20project%3F'><h3>Where can I report bugs or contribute to the project?<\/h3><\/dt>\n<dd><p>Bugs can be reported either in our support forum or we are happy to accept PRs on the <a href=\"https:\/\/github.com\/code-atlantic\/content-control\/issues\">Content Control GitHub repo<\/a>.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>v2.6.5 - 05\/27\/2025<\/h4>\n\n<ul>\n<li>Tweak: Passed the original filtered content to the restricted message filter.<\/li>\n<\/ul>\n\n<h4>v2.6.4 - 05\/09\/2025<\/h4>\n\n<ul>\n<li>Fix: Revert change in previous update that broke rendering of some shortcodes within <code>[content_control]<\/code> shortcode inner contents.<\/li>\n<\/ul>\n\n<h4>v2.6.3 - 05\/08\/2025<\/h4>\n\n<ul>\n<li>Fix: Excerpt rendering when custom message wasn't set.<\/li>\n<\/ul>\n\n<h4>v2.6.2 - 04\/22\/2025<\/h4>\n\n<ul>\n<li>Security: Escaped <code>[content_control]<\/code> <code>message<\/code> attribute.<\/li>\n<li>Fix: Misc JS bugs in admin.<\/li>\n<li>Developer: Added new <code>content_control\/pre_restrict_content<\/code> &amp; <code>content_control\/pre_restrict_excerpt<\/code> filters to allow overloading\/short curcuiting the default restriction application.<\/li>\n<\/ul>\n\n<h4>v2.6.1 - 03\/15\/2025<\/h4>\n\n<ul>\n<li>Improvement: Only fetch titles &amp; ids when loading posts\/taxonomy for the Restriction Editor. Reducing request overhead.<\/li>\n<li>Improvement: Ensure taxonomies are also removed from search appropriately.<\/li>\n<li>Improvement: Reduce memory footprint of overloaded object handling.<\/li>\n<li>Tweak: Adjust rest intent when using search endpoint or arg for better detection.<\/li>\n<li>Fix: Prevent undefined post type or taxonomy <code>public<\/code> arg from generating warning notices.<\/li>\n<li>Fix: Prvent warnings due to translations being loaded too early.<\/li>\n<\/ul>\n\n<h4>v2.6.0 - 03\/11\/2025<\/h4>\n\n<ul>\n<li>Feature: Added new setting to control restricted content visibility in search results\n\n<ul>\n<li>Site owners can now choose to completely hide restricted content from search results<\/li>\n<li>Includes detailed security guidance when enabling search visibility<\/li>\n<li>Helps prevent unintended exposure of sensitive information through search<\/li>\n<li>Resolves concerns addressed in CVE-2024-11153 by default, now requiring explicit admin consent to show items in search results.<\/li>\n<\/ul><\/li>\n<li>Performance: Improved asset minification.<\/li>\n<\/ul>\n\n<h4>v2.5.0 - Restriction Check Improvements - 08\/18\/2024<\/h4>\n\n<ul>\n<li>Improvement: Change rule processing to be more explicit for each context\/rule type, improving performance &amp; reliability of how rules are handled in some edge cases.<\/li>\n<li>Improvement: Update <code>content_control_known_blockTypes<\/code> option to not be autoloaded.<\/li>\n<li>Improvement: Update QueryMonitor output to differentiate between terms &amp; posts.<\/li>\n<li>Fix: Error due to invalid return value variable name.<\/li>\n<\/ul>\n\n<h4>v2.4.0 - Performance Matters - 06\/21\/2024<\/h4>\n\n<ul>\n<li>Improvement: Optimized the order we determine if we can skip checking restrictions for any givem content type. Thanks to PolyLang team for the suggestion.<\/li>\n<li>Improvement: Better coverage for taxonomy query detection &amp; filtering.<\/li>\n<li>Improvement: Added inertnal function caches to drastically reduce overhead of checking restrictions. This may result in a significant performance increase for large sites or sites with many restrictions.<\/li>\n<li>Improvement: Only generate list of page template types for rules when in the admin, saving potential DB query.<\/li>\n<li>Tweak: Explicitly bail on rule checks for unknown Rest API endpoints as we don't currently fully support them. Filter below added to allow modifying this behavior.<\/li>\n<li>Tweak: Remove upsell message when pro version is active.<\/li>\n<li>Fix: Bug with restricting logged in users from content when the user had post_edit permissions for the post.<\/li>\n<li>Developer: Added new internal globals variable handler instead of using <code>global $vars<\/code> directly. Set of helper functions available to get\/set\/push\/pop global variables.<\/li>\n<li>Developer: Made controllers more efficient by conditionally loading them only when needed.<\/li>\n<li>Developer: Added new filter <code>content_control\/determine_uknonwn_rest_api_intent<\/code> to allow 3rd party plugins to modify the REST API intent used in rule checks specifically for unknown intents.<\/li>\n<li>Developer: Added new filter <code>content_control\/request_is_excluded_rest_endpoint<\/code> to allow 3rd party plugins to exclude\/include custom REST API endpoints from restriction checks.<\/li>\n<li>Developer: Added new filter <code>'content_control\/pre_query_can_be_ignored<\/code> allowing early return for known ignorable queries.<\/li>\n<li>Developer: Added second paramter to the<code>content_control\/get_rest_api_intent<\/code> filter pass the <code>$rest_route<\/code>.<\/li>\n<\/ul>\n\n<h4>v2.3.0 - 05\/23\/2024<\/h4>\n\n<ul>\n<li>Improvement: Added more full coverage of all query types for for restriction handling. This helps catch more custom\/3rd party AJAX search queries that were not being filtered.<\/li>\n<li>Improvement: Added better handling for excluding queries and admin views from restrictions.<\/li>\n<li>Improvement: Added filters for easier compatibility fixes with 3rd party plugins.<\/li>\n<li>Improvement: Added support\/fixes for BetterDocs custom AJAX searching.<\/li>\n<li>Improvement: Added support\/fixes for Blocksy theme custom AJAX searching.<\/li>\n<li>Fix: Bug where $post-&gt;ID was used without checking if $post was set.<\/li>\n<li>Developer: Added new filter <code>content_control\/get_rest_api_intent<\/code> to allow 3rd party plugins to modify the REST API intent used in rule checks.<\/li>\n<\/ul>\n\n<h4>v2.2.8 - 05\/07\/2024<\/h4>\n\n<ul>\n<li>Fix: Issue causing some non-admin AJAX requests to the REST API from being run through protection checks.<\/li>\n<li>Fix: Error when using page template rules &amp; global $post is not set properly.<\/li>\n<\/ul>\n\n<h4>v2.2.7 - 03\/20\/2024<\/h4>\n\n<ul>\n<li>Improvement: Fix plugin preview blueprint file location.<\/li>\n<\/ul>\n\n<h4>v2.2.6 - 03\/20\/2024<\/h4>\n\n<ul>\n<li>Improvement: Add plugin preview blueprint support.<\/li>\n<\/ul>\n\n<h4>v2.2.5 - 03\/20\/2024<\/h4>\n\n<ul>\n<li>Improvement: Logic for protection being disabled was improved to be more efficient.<\/li>\n<li>Fix: Bug with The Events Calendar showing blank screen when using Redirect restriction.<\/li>\n<li>Fix: Bug where redirect based restrictions failed on The Events Calendar pages.<\/li>\n<li>Fix: Typo in order of widget REST API check conditionals.<\/li>\n<\/ul>\n\n<h4>v2.2.4 - 03\/20\/2024<\/h4>\n\n<ul>\n<li>Fix: Enforced strict versioning in autoload build tool that recently auto updated causing the autoloader to suddenly leak unprefixed classes. This was causing random issues in combination with <a href=\"https:\/\/pressidium.com\/blog\/wordpress-plugin-conflicts-how-to-prevent-composer-dependency-hell\/\">incompatible autoloading by other plugins<\/a>.<\/li>\n<\/ul>\n\n<h4>v2.2.3 - 03\/19\/2024<\/h4>\n\n<ul>\n<li>Fix: Recurssion error with taxonomy queries due to calling setup_post during get_terms query. WooCommerce then setup global $product, which called another taxonomy query, and so on.<\/li>\n<li>Fix: Bug when modified WP_Term_Query-&gt;terms arrays of ints were passed instead of epxected term objects.<\/li>\n<\/ul>\n\n<h4>v2.2.2 - 03\/19\/2024<\/h4>\n\n<ul>\n<li>Fix: Bug with new taxonomy query filter. For now this is limited to the REST API only.<\/li>\n<\/ul>\n\n<h4>v2.2.1 - 03\/18\/2024<\/h4>\n\n<ul>\n<li>Fix: Bug where the plugin had errors on taxonomy pages or queries.<\/li>\n<li>Fix: Error when Term query taxonomy arg was not an array.<\/li>\n<\/ul>\n\n<h4>v2.2.0 - 03\/17\/2024<\/h4>\n\n<ul>\n<li>Feature: Add support for <a href=\"https:\/\/contentcontrolplugin.com\/features\/rest-api\/\">restricing content in the REST API<\/a>.<\/li>\n<li>Feature: Add support for terms in WP term queries.<\/li>\n<li>Fix: Nav Menu Link user rule not working properly.<\/li>\n<li>Fix: Prevent \"Required Upgrade\" notices on new installs.<\/li>\n<li>Tweak: Only show \"Required Upgrade\" notices to admins with plugin management permissions.<\/li>\n<li>Dev:: Added new field type <code>userselect<\/code> for choosing users with search.<\/li>\n<\/ul>\n\n<h4>v2.1.0 - 12\/08\/2023<\/h4>\n\n<p><strong>NOTE<\/strong>: Plugin now requires PHP 7.4+ &amp; WP 6.2+. The plugin likely still works on older versions, but now only officialy support these versions and up.<\/p>\n\n<ul>\n<li>Improvement: Preloaded plugin settings on admin pages to decrease delay before settings are available to JS. This should help settings not showing up in the editor when first loading the page.<\/li>\n<li>Tweak: Changed <code>'content_control\/get_block_control_classes'<\/code> filter to include the $controls found in the block.<\/li>\n<li>Tweak: Various style improvements to admin pages for consistency.<\/li>\n<li>Fix: Typo in fetching of taxonomy labels for rule generation. This could have led to rule search results not being shown with proper labels (or empty labels).<\/li>\n<li>Fix: Block scanner running for all users, not just admins, triggered AJAX events that were denied every time author entered block editor.<\/li>\n<li>Fix: Styling issues with WP 6.4 checkbox changes.<\/li>\n<li>Fix: Bug when filtering restrictions in the list view and no results remained, causing the filters to not work properly witoout a page refresh.<\/li>\n<li>Developer: Core plugin class now is extendible to allow addons to get full access to plugin internals.<\/li>\n<li>Developer: Added useFields api which will be used in future versions of the plugin to allow 3rd party plugins to add their own fields to the restriction editor.<\/li>\n<li>Developer: Added multiple new components for field organization and layout: <code>FieldRow<\/code>, <code>FieldPanel<\/code>.<\/li>\n<li>Developer: Added new <code>'content-control.data.registry'<\/code> hook in JavaScript to allow addons to register their own data stores for use in the editor &amp; settings pages.<\/li>\n<li>Developer: Added new <code>'content_control\/restriction\/bypass_user_requirements'<\/code> PHP filter to allow addons to bypass user requirements for more specific restrictions.<\/li>\n<\/ul>\n\n<h4>v2.0.12 - 10\/26\/2023<\/h4>\n\n<ul>\n<li>Fix: Prevent extra 301 redirect due to missing trailing slash on some URLs.<\/li>\n<li>Fix: Issue with Custom Message replacement not always working on pages built with Elementor.<\/li>\n<\/ul>\n\n<h4>v2.0.11 - 10\/04\/2023<\/h4>\n\n<ul>\n<li>Improvement: Query Monitor integration to show which restrictions are active on a page.\n\n<ul>\n<li>Shows global settings that may be affecting the page.<\/li>\n<li>Shows which restrictions are active on the page.<\/li>\n<li>Shows which posts are being filtered out of queries and by which restriction.<\/li>\n<\/ul><\/li>\n<li>Tweak: Ensure upgrade stream doesn't send headers if they were already sent.<\/li>\n<li>Tweak: Make second arg on get_the_excerpt filter optional to prevent errors with some plugins.<\/li>\n<li>Fix: Bug when using <code>content_control\/check_all_restrictions<\/code> filter that caused rules to not compare properly.<\/li>\n<\/ul>\n\n<h4>v2.0.10 - 10\/01\/2023<\/h4>\n\n<ul>\n<li>Improvement: If no v1 global restrictions existed, skip the migration step entirely.<\/li>\n<li>Improvement: Default to late init of post query filtering until after plugins_loaded should be finished. This should prevent help prevent random errors due to restrictions being checked before plugins have had a chance to register their post types, and thus restrictions won't properly match those post type rules.<\/li>\n<li>Improvement: Add check to prevent restriction checks for <strong>WP CLI<\/strong> requests.<\/li>\n<li>Improvement: Add notice to indicate is when waiting for post\/page search results in the restriction editor fields.<\/li>\n<li>Tweak: Fix issue in build that caused autoloader to not fully use optimized classmap, should result in improved performance.<\/li>\n<li>Fix: Ensure <code>$wp_rewrite<\/code> is available before calling <code>is_rest()<\/code> -&gt; <code>get_rest_url()<\/code>. This should prevent errors when using the plugin with <strong>WP CLI<\/strong> and when plugins make <code>WP_Query<\/code> calls during <code>plugins_loaded<\/code>.<\/li>\n<li>Fix: Don't attempt to initialize side query filtering until after_theme_setup hook. This should prevent errors when plugins make <code>WP_Query<\/code> calls during <code>plugins_loaded<\/code>, and allow further delaying initialization if needed from themes <code>functions.php<\/code> file.<\/li>\n<li>Fix: Backward compatibility issue with WP versions &lt;6.2 that made settings page not render.<\/li>\n<li>Fix: Bug where Block Controls didn't work on WooCommerce pages. This was filtering <code>pre_render_block<\/code> but not returning a value. Now we run our check after theirs to ensure that bug has no effect on our plugin. <a href=\"https:\/\/github.com\/woocommerce\/woocommerce-blocks\/issues\/11077\">Report<\/a><\/li>\n<\/ul>\n\n<p><h4>v2.0.9 - 09\/24\/2023<\/h4><\/p>\n\n<ul>\n<li>Improvement: Better handling of restriction titles &amp; content. Admins with priv can insert any content into the restriction messages.<\/li>\n<li><p>Improvement: Added new filter <code>content_control\/query_filter_init_hook<\/code> to allow delaying query filtering for compatibility with plugins that make custom queries before <code>template_redirect<\/code> action.<\/p>\n\n<p><code>add_filter( 'content_control\/query_filter_init_hook', function () {\nreturn 'init'; \/\/ Try setup_theme, after_theme_setup, init or wp_loaded\n} );<\/code><\/p><\/li>\n<li><p>Tweak: Ensure our restriction checks work within a nested post loop.<\/p><\/li>\n<li>Tweak: Change how restriction title &amp; descriptions were sent\/received over Rest API.<\/li>\n<li>Fix: Bug that caused some shortcodes to not render properly.<\/li>\n<li>Fix: Bug where override message wasn't used.<\/li>\n<li>Fix: Bug where Elementor Post loop would render incorrectly when using ACF fields in the loop template.<\/li>\n<\/ul>\n\n<p><h4>v2.0.8 - 09\/22\/2023<\/h4><\/p>\n\n<ul>\n<li>Tweak: Ignore many Elementor queries from being restricted.<\/li>\n<li>Fix: Error when required upgrade was marked as complete.<\/li>\n<li>Fix: Bug that caused secondary queries to be handled like main queries.<\/li>\n<\/ul>\n\n<h4>v2.0.7 - 09\/21\/2023<\/h4>\n\n<ul>\n<li>Tweak: Only log each unique plugin debug notice once to prevent filling log files quickly.<\/li>\n<li>Tweak: Replace usage of <code>wp_upload_dir<\/code> with <code>wp_get_upload_dir<\/code> which is more performant.<\/li>\n<li>Fix: Error in upgrades when no data is found to migrate.<\/li>\n<li>Fix: Error when function is called early &amp; global $wp_query is not yet available.<\/li>\n<li>Fix: Conditional check that could always return false.<\/li>\n<li>Developer: Implemented PHP Static Analysis to catch more bugs before they happen. Currently clean on lvl 6.<\/li>\n<\/ul>\n\n<h4>v2.0.6 - 09\/19\/2023<\/h4>\n\n<ul>\n<li>Improvement: Added data backup step to upgrade process that stores json export in the media library.<\/li>\n<li>Improvement: Better error handling in the data upgrade process.<\/li>\n<li>Fix: Fix bug in data upgrade process that caused it to never finish.<\/li>\n<li>Fix: Possible error when no restriction match found in some custom` queries.<\/li>\n<\/ul>\n\n<h4>v2.0.5 - 09\/18\/2023<\/h4>\n\n<ul>\n<li>Fix: Fix errors on some sites with custom conditions due to registering all rules too early.<\/li>\n<\/ul>\n\n<h4>v2.0.4 - 09\/18\/2023<\/h4>\n\n<ul>\n<li>Fix: Error when WP Query vars include anonymous function closures.<\/li>\n<\/ul>\n\n<h4>v2.0.3 - 09\/18\/2023<\/h4>\n\n<ul>\n<li>Fix: Log errors instead of throwing exceptions to prevent uncaught exceptions turning into fatal errors.<\/li>\n<\/ul>\n\n<h4>v2.0.2 - 09\/18\/2023<\/h4>\n\n<ul>\n<li>Fix: Fatal error from error logger on systems without write access.<\/li>\n<\/ul>\n\n<h4>v2.0.1 - 09\/17\/2023<\/h4>\n\n<ul>\n<li>Fix: Fatal error from unregistered or unknown rule types from 3rd party plugins\/themes or custom code. Now they are logged in plugin settings page.<\/li>\n<\/ul>\n\n<h4>v2.0.0 - 09\/17\/2023<\/h4>\n\n<ul>\n<li>Feature: Restrict individual blocks in the Gutenberg editor.<\/li>\n<li>Feature: Restrict individual blocks in the Full Site Editor.<\/li>\n<li>Feature: Use a custom page template for restricted content.<\/li>\n<li>Feature: Restrict blocks by device type with customizable breakpoints.<\/li>\n<li>Feature: Restrict blocks by user status &amp; role.<\/li>\n<li>Feature: Global restrictions now offer more control over how restricted content is handled.\n\n<ul>\n<li>Choose to redirect or replace content with a custom page.<\/li>\n<li>Filter or hide posts in archives or custom loops.<\/li>\n<li>Secondary controls for posts if found in an archive.<\/li>\n<\/ul><\/li>\n<li>Improvement: Match or exclude specific roles.<\/li>\n<li>Improvement: Updated interface with intuitive and responsive controls.<\/li>\n<li>Improvement: Boolean editor improvements.<\/li>\n<li>Improvement: Control who can modify plugin settings.<\/li>\n<li>Improvement: Upgraded tooling &amp; Code quality improvements.<\/li>\n<\/ul>\n\n<h4>v1.1.10 - 12\/28\/2022<\/h4>\n\n<ul>\n<li>Security: Fix unescaped output for CSS classname in the [contentcontrol] shortcode allowing users with the ability to edit posts to inject code into the page.<\/li>\n<\/ul>\n\n<h4>v1.1.9 - 09\/30\/2021<\/h4>\n\n<ul>\n<li>Fix: Error when using Gutenberg Preview.<\/li>\n<\/ul>\n\n<h4>v1.1.8 - 07\/17\/2021<\/h4>\n\n<ul>\n<li>Fix: Error when Elementor instance preview proptery was null.<\/li>\n<\/ul>\n\n<h4>v1.1.7 - 07\/17\/2021<\/h4>\n\n<ul>\n<li>Fix: Prevent warning if widget settings don't exist in options table.<\/li>\n<li>Fix: Arbitrary limit of 10 on current items listed in Restriction Editor due to WP query default args.<\/li>\n<li>Fix: Prevent restrictions from activating when using the Elementor page builder.<\/li>\n<\/ul>\n\n<h4>v1.1.6 - 03\/21\/2021<\/h4>\n\n<ul>\n<li>Fix: Nonce validation was preventing 3rd party plugin from saving widget settings when it failed. Thanks @jacobmischka<\/li>\n<li>Fix: Prevent corrupted options from preventing saving of settings.<\/li>\n<\/ul>\n\n<h4>v1.1.5 - 02\/22\/2021<\/h4>\n\n<ul>\n<li>Fix: Issue where roles with <code>-<\/code> would not save when checked.<\/li>\n<\/ul>\n\n<h4>v1.1.4 - 03\/24\/2020<\/h4>\n\n<ul>\n<li>Improvement: Added gettext handling for several strings that were not translatable.<\/li>\n<li>Tweak: Process shortcodes in default denial message contents.<\/li>\n<li>Tweak: Various improvements in form reliability &amp; user experience.<\/li>\n<li>Fix: Issues with ajax search fields not retaining their values after save.<\/li>\n<li>Fix: Issue where only would show 10 pages.<\/li>\n<li>Fix: PHP 7.4 compatibility fixes.<\/li>\n<\/ul>\n\n<h4>v1.1.3 - 12\/03\/2019<\/h4>\n\n<ul>\n<li>Fix: Custom post type conditions were not always registered.<\/li>\n<\/ul>\n\n<h4>v1.1.2 - 11\/10\/2019<\/h4>\n\n<ul>\n<li>Tweak: Remove erroneous console.log messages in admin.<\/li>\n<li>Fix: Fatal error when empty shortcode used.<\/li>\n<\/ul>\n\n<h4>v1.1.1 - 10\/15\/2019<\/h4>\n\n<ul>\n<li>Fix: Bugs where variables were not always the expected type.<\/li>\n<\/ul>\n\n<h4>v1.1.0<\/h4>\n\n<ul>\n<li>Improvement: Added default denial message to shortcode.<\/li>\n<li>Improvement: Render nested shortcodes in the [content_control] shortcode.<\/li>\n<li>Fix: Bug where multiple roles checked together in restriction editor.<\/li>\n<\/ul>\n\n<h4>v1.0.3<\/h4>\n\n<ul>\n<li>Fix: Minor notice on activation.<\/li>\n<\/ul>\n\n<h4>v1.0.2<\/h4>\n\n<ul>\n<li>Fix: Call to undefined function.<\/li>\n<\/ul>\n\n<h4>v1.0.1<\/h4>\n\n<ul>\n<li>Fix: Non static method called statically<\/li>\n<li>Fix: Bug when using invalid variable type.<\/li>\n<\/ul>\n\n<h4>v1.0.0<\/h4>\n\n<ul>\n<li>Initial Release<\/li>\n<\/ul>","raw_excerpt":"Restrict content based on login status, user roles, device type &amp; more. Monetize your content with a paywall or members-only content.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ast.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/51223","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ast.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ast.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ast.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=51223"}],"author":[{"embeddable":true,"href":"https:\/\/ast.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/danieliser"}],"wp:attachment":[{"href":"https:\/\/ast.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=51223"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ast.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=51223"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ast.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=51223"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ast.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=51223"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ast.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=51223"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ast.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=51223"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}