{"id":389258,"date":"2026-10-25T15:01:52","date_gmt":"2026-10-25T15:01:52","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/blocksieve\/"},"modified":"2026-10-25T15:01:37","modified_gmt":"2026-10-25T15:01:37","slug":"blocksieve","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/blocksieve\/","author":23378403,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.4","requires":"6.7","requires_php":"8.1","requires_plugins":null,"header_name":"BlockSieve","header_author":"Jahirul Islam","header_description":"Show or hide any block by user role, login status, device, date, page and more, enforced on the server at render time.","assets_banners_color":"b5bcd4","last_updated":"2026-10-25 15:01:37","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/profiles.wordpress.org\/jahirulwp\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":74,"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":"jahirulwp","date":"2026-10-25 15:01:37","revision":3764791}},"upgrade_notice":{"1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-256x256.gif":{"filename":"icon-256x256.gif","revision":3764791,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3764791,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3764791,"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":3764791,"resolution":"1","location":"assets","locale":"","width":1280,"height":768},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3764791,"resolution":"2","location":"assets","locale":"","width":1280,"height":768},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3764791,"resolution":"3","location":"assets","locale":"","width":1280,"height":768},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3764791,"resolution":"4","location":"assets","locale":"","width":1280,"height":768}},"screenshots":{"1":"The Visibility panel in the block inspector, with a block limited to logged-in users.","2":"Several rules on one block, matched with \"All conditions\" or \"Any condition\".","3":"The report under Tools \u2192 BlockSieve, with a preview of how every block resolves.","4":"The Dashboard summary widget."}},"plugin_section":[262246],"plugin_tags":[288477,175240,47354,148076,6309],"plugin_category":[],"plugin_contributors":[288478],"plugin_business_model":[],"class_list":["post-389258","plugin","type-plugin","status-publish","hentry","plugin_section-dashboard-widgets","plugin_tags-block-visibility-controller","plugin_tags-conditional-blocks","plugin_tags-conditional-content","plugin_tags-gutenberg","plugin_tags-visibility","plugin_contributors-jahirulwp","plugin_committers-jahirulwp"],"banners":{"banner":"https:\/\/ps.w.org\/blocksieve\/assets\/banner-772x250.png?rev=3764791","banner_2x":"https:\/\/ps.w.org\/blocksieve\/assets\/banner-1544x500.png?rev=3764791","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/blocksieve\/assets\/icon-256x256.gif?rev=3764791","icon_2x":"https:\/\/ps.w.org\/blocksieve\/assets\/icon-256x256.gif?rev=3764791","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/blocksieve\/assets\/screenshot-1.png?rev=3764791","caption":"The Visibility panel in the block inspector, with a block limited to logged-in users."},{"src":"https:\/\/ps.w.org\/blocksieve\/assets\/screenshot-2.png?rev=3764791","caption":"Several rules on one block, matched with \"All conditions\" or \"Any condition\"."},{"src":"https:\/\/ps.w.org\/blocksieve\/assets\/screenshot-3.png?rev=3764791","caption":"The report under Tools \u2192 BlockSieve, with a preview of how every block resolves."},{"src":"https:\/\/ps.w.org\/blocksieve\/assets\/screenshot-4.png?rev=3764791","caption":"The Dashboard summary widget."}],"raw_content":"<!--section=description-->\n<p>Sometimes a block should only be there for some people, or only some of the time. A welcome message for members. A sign-up prompt for everyone else. A promo that runs for two weeks and then quietly goes away. A big hero image that looks great on desktop but gets in the way on a phone.<\/p>\n\n<p>BlockSieve gives every block in the editor a small <strong>Visibility<\/strong> panel where you describe when the block should appear. That is the whole plugin. There is no separate settings screen to learn and no shortcodes to remember. Open the block, set a rule or two, and you are done.<\/p>\n\n<h4>What you can base a rule on<\/h4>\n\n<ul>\n<li>Whether the visitor is logged in or logged out.<\/li>\n<li>The visitor's user role, picked from the roles on your site.<\/li>\n<li>A date range, certain weekdays, or a time of day, all in your site's time zone.<\/li>\n<li>The device: desktop, tablet or mobile.<\/li>\n<li>The post type, or specific pages and posts chosen from a search box.<\/li>\n<li>The kind of page being viewed: the front page, the blog index, a category or tag archive, search results, the 404 page, and so on.<\/li>\n<li>Something in the URL, or a query parameter such as a campaign tag.<\/li>\n<\/ul>\n\n<p>Add as many rules as you like to one block and decide whether all of them have to match or any one of them is enough.<\/p>\n\n<h4>It works on the server<\/h4>\n\n<p>BlockSieve checks your rules on the server while the page is being built. If a block should not be shown, its HTML is simply left out of the page. The one exception is the device rule: it uses CSS so that it follows the screen width, which means the block stays in the page and is hidden on the devices you deselected.<\/p>\n\n<p>Because the rules run on the server, there is no JavaScript on the front end. The only extra file your visitors might load is a tiny stylesheet, and only on pages that use the device rule.<\/p>\n\n<h4>It fails on the safe side<\/h4>\n\n<p>If a rule is ever broken, say because a plugin that provided a custom rule was removed, BlockSieve shows the block rather than hiding it. You will not find a page missing half its content because of a stale setting. The report described below will tell you about it instead.<\/p>\n\n<h4>Keep track of what you have hidden<\/h4>\n\n<p>After a while it is easy to forget which blocks have rules on them. <strong>Tools \u2192 BlockSieve<\/strong> lists every block on the site that has a visibility rule, including blocks tucked away in site editor templates, synced patterns and block widgets. For each one you can see the rules in plain words and a preview of whether a visitor or an administrator would see it right now.<\/p>\n\n<p>The report also points out things that probably are not what you meant:<\/p>\n\n<ul>\n<li>a rule type left behind by a plugin you no longer have,<\/li>\n<li>a role or page list that is empty and can never match,<\/li>\n<li>a date range that has already ended,<\/li>\n<li>two rules that contradict each other.<\/li>\n<\/ul>\n\n<p>You can filter and search the list, and glance at the totals from a widget on the Dashboard.<\/p>\n\n<h4>For developers<\/h4>\n\n<p>The rule engine is plain PHP with no WordPress calls inside it, so it is easy to test and easy to extend. You can register your own rule types with one action, override any decision with a filter, and tune the report's cache lifetime, scan limit and post types with filters. The <code>docs\/<\/code> folder inside the plugin has the details.<\/p>\n\n<h4>Privacy<\/h4>\n\n<p>BlockSieve runs entirely on your own server. It does not call out to any service, load anything from a CDN, collect usage data or set cookies. It stores one option for its settings and one short-lived transient for the cached report, and removes both when you delete the plugin. Your visibility rules are saved inside the block content itself.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>blocksieve<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install it from <strong>Plugins \u2192 Add New<\/strong>.<\/li>\n<li>Activate <strong>BlockSieve<\/strong>.<\/li>\n<li>Select any block in the editor and open the <strong>Visibility<\/strong> panel in the sidebar.<\/li>\n<li>Turn on <strong>Enable visibility conditions<\/strong> and add the rules you need.<\/li>\n<li>When you want an overview, visit <strong>Tools \u2192 BlockSieve<\/strong>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20are%20the%20rules%20checked%3F\"><h3>Where are the rules checked?<\/h3><\/dt>\n<dd><p>On the server, each time the page is rendered. A hidden block's HTML is never sent to the browser. The device rule is the exception: it is applied with CSS, so the block stays in the page.<\/p><\/dd>\n<dt id=\"is%20this%20a%20security%20feature%3F\"><h3>Is this a security feature?<\/h3><\/dt>\n<dd><p>It is a content feature. Markup hidden by any rule other than the device rule really is removed from the page, so it cannot be revealed with developer tools. But it is meant for tailoring what people see, such as showing a block to members only. For genuinely sensitive data you should still rely on proper capability checks.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20every%20block%3F\"><h3>Does it work with every block?<\/h3><\/dt>\n<dd><p>Yes. Core blocks, blocks from other plugins, dynamic blocks and static blocks all get the same panel, as long as they render through the normal block pipeline, which almost all do.<\/p><\/dd>\n<dt id=\"how%20does%20the%20device%20rule%20work%3F\"><h3>How does the device rule work?<\/h3><\/dt>\n<dd><p>It uses CSS media queries for desktop, tablet and mobile widths rather than guessing from the browser's user agent. The block stays in the page and is hidden at the widths you deselected, so it behaves correctly when a window is resized.<\/p><\/dd>\n<dt id=\"will%20i%20still%20see%20hidden%20blocks%20while%20editing%3F\"><h3>Will I still see hidden blocks while editing?<\/h3><\/dt>\n<dd><p>Yes. Rules are only applied on the front end. In the editor every block is visible so you can always find it and change it.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20i%20deactivate%20the%20plugin%3F\"><h3>What happens if I deactivate the plugin?<\/h3><\/dt>\n<dd><p>Nothing is lost. The rules are stored as a block attribute inside your content. While the plugin is off, every block simply shows. Turn it back on and the rules apply again.<\/p><\/dd>\n<dt id=\"how%20do%20i%20find%20every%20block%20i%20have%20hidden%3F\"><h3>How do I find every block I have hidden?<\/h3><\/dt>\n<dd><p>Go to <strong>Tools \u2192 BlockSieve<\/strong>. It lists every block with a rule, across posts, templates, synced patterns and widgets, and flags anything that will not behave the way you probably intended.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20page%20caching%3F\"><h3>Does it work with page caching?<\/h3><\/dt>\n<dd><p>Rules are checked when a page is built, so a page cache serves whatever version it stored first. Rules that depend on the visitor, such as logged in or out, user role, URL or query parameter, and time-based rules need the page to be built fresh. Make sure your cache is bypassed for logged-in users, and exclude pages that use the other rules from the cache. The device rule works with any cache because it uses CSS.<\/p><\/dd>\n<dt id=\"does%20the%20report%20slow%20my%20site%20down%3F\"><h3>Does the report slow my site down?<\/h3><\/dt>\n<dd><p>No. It only runs in the admin area, its result is cached, and the cache is refreshed when content changes. Nothing about it runs on the front end.<\/p><\/dd>\n<dt id=\"can%20i%20add%20my%20own%20rule%20types%3F\"><h3>Can I add my own rule types?<\/h3><\/dt>\n<dd><p>Yes. Implement <code>ConditionInterface<\/code> (or extend <code>AbstractCondition<\/code>) and register your class on the <code>blocksieve_register_conditions<\/code> action. The editor picks it up automatically. See <code>docs\/developers.md<\/code> inside the plugin.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20connect%20to%20any%20external%20service%3F\"><h3>Does the plugin connect to any external service?<\/h3><\/dt>\n<dd><p>No. See the Privacy section above.<\/p><\/dd>\n<dt id=\"is%20the%20editor%20source%20code%20available%3F\"><h3>Is the editor source code available?<\/h3><\/dt>\n<dd><p>Yes. The editor bundle in <code>build\/<\/code> is compiled with the official <code>@wordpress\/scripts<\/code> toolchain, and the readable source ships with the plugin in the <code>src\/<\/code> folder. Run <code>npm install &amp;&amp; npm run build<\/code> to rebuild it.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Visibility panel for every block, with all\/any matching and fail-safe evaluation.<\/li>\n<li>Twelve built-in rules: Logged In, Logged Out, User Role, Date Range, Weekdays, Time Range, Device, Post Type, Page \/ Post, Page View, URL Contains and Query Parameter.<\/li>\n<li>Server-side enforcement in the <code>render_block<\/code> filter.<\/li>\n<li>Responsive, CSS-based device targeting with a stylesheet that loads only when needed.<\/li>\n<li>Report under Tools \u2192 BlockSieve with warnings, previews, filters and search, plus a Dashboard summary widget.<\/li>\n<li>Action and filter hooks for custom rule types and result overrides.<\/li>\n<\/ul>","raw_excerpt":"Show or hide any Gutenberg block by user role, login status, device, date, schedule or page. Conditional block visibility enforced on the server.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/389258","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=389258"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/jahirulwp"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=389258"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=389258"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=389258"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=389258"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=389258"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=389258"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}