Widget Visibility Control

Description

Widget Visibility Control lets you decide exactly where each widget appears on your site. Show widgets only on specific pages, hide them for logged-out users, display different content for different categories – all without writing a single line of code.

Looking for Widget Visibility and Scheduling?

This plugin gives you control over where your widgets appear:

  • Page targeting – Show widgets on the front page, blog page, specific pages, or 404 error page
  • Content targeting – Display widgets only on certain categories, tags, or custom taxonomies
  • Cascading taxonomy selector – Quickly find terms in sites with many taxonomies (WooCommerce friendly)
  • Include child terms – Match child terms automatically for hierarchical taxonomies
  • User targeting – Show different widgets to logged-in users vs. visitors
  • Role-based display – Target specific user roles (administrators, editors, subscribers, etc.)
  • Author pages – Control visibility on author archive pages
  • Date archives – Target daily, monthly, or yearly archives
  • Post type support – Works with custom post types and their archives
  • Time scheduling – Schedule widgets to appear only during specific date and time ranges. Perfect for promotional banners, seasonal offers, holiday announcements, flash sales, event countdowns, and time-limited content

Multiple Conditions

Create sophisticated visibility rules by combining multiple conditions:

  • Use OR logic – Show if ANY condition matches
  • Use AND logic – Show only if ALL conditions match
  • Mix and match – Create exactly the rules you need

Built for Performance

  • Minimal database queries with intelligent caching
  • Only loads assets where needed (widget screens)
  • Clean, optimized code following WordPress standards

Why Choose This Plugin?

  • Lightweight – Focused functionality without unnecessary features
  • All features included – No premium version required
  • Jetpack Compatible – Migrate from Jetpack Widget Visibility without reconfiguring anything
  • Independent Storage – Your rules are stored separately, safe from Jetpack changes
  • Block Editor Ready – Works with both classic widgets and block-based widgets
  • Privacy Focused – No external connections, no tracking, no data collection
  • Safe by design – No PHP eval, no arbitrary code execution; rules are stored as structured data

Coming from Jetpack?

If you’ve been using Jetpack just for widget visibility and want to reduce your site’s load, this plugin can help:

  • No configuration needed – Your existing visibility rules are automatically imported on activation
  • Same familiar interface – The visibility panel works as you’re used to
  • Keep or clean legacy data – Choose to maintain Jetpack compatibility or clean up completely
  • No disruption – Your widgets will continue working as before

Coming from Widget Logic?

Widget Logic has been closed on the WordPress plugin directory. Widget Visibility Control is a safe, maintained alternative:

  • No PHP eval – Visibility rules are stored as structured data, not as executable PHP code
  • Assisted import – On detection of Widget Logic data, an importer translates the most common conditional tags (is_home, is_page, is_category, is_user_logged_in…) into proper visibility rules. Works with data from both Widget Logic 5.x and 6.x
  • You decide what’s tricky – For rules we can’t translate automatically, the importer asks per widget whether to import as always visible, always hidden, or skip
  • Original data preserved – Your Widget Logic data stays in the database until you choose to clean it up

Coming from Widget Options?

If you only use Widget Options for visibility and want a lighter, focused plugin without the pro upsells:

  • No pro version – All features included in the free plugin
  • Visibility-first – We do one thing well: show/hide widgets based on pages, content, users, roles, and schedule
  • Compatible interfaces – Works in the block-based widget editor, the classic widget editor, and the Customizer
  • Quick try – Install alongside Widget Options to compare; switch when you’re ready

Developer Friendly

  • Follows WordPress Coding Standards
  • Fully translatable with complete i18n support
  • Action and filter hooks for customization
  • Clean uninstall – removes only its own data

Support

Need help or have suggestions?

Love the plugin? Please leave us a 5-star review and help spread the word!

About AyudaWP

We are specialists in WordPress security, SEO, AI and performance optimization plugins. We create tools that solve real problems for WordPress site owners while maintaining the highest coding standards and accessibility requirements.

Screenshots

  • Visibility Options settings on classic widgets
  • Visibility Options settings on block based widgets
  • Multiple conditions with AND/OR logic
  • Data Summary tab in the plugin settings
  • Import/Export tab in the plugin settings

Installation

  1. Upload the widget-visibility-control folder to /wp-content/plugins/
  2. Activate the plugin through the ‘Plugins’ menu in WordPress
  3. Configure visibility rules for your widgets (see “Where to find visibility settings” below)

Where to find visibility settings

The location of visibility settings depends on your widget editing interface:

In Appearance > Widgets (block editor):
When using native block widgets, select any block in a widget area, then look in the right sidebar for the Visibility panel. Here you can add rules to show or hide the block.

In Appearance > Widgets (with Classic Widgets plugin):
If you have the Classic Widgets plugin active, click the “Visibility” button that appears below each widget’s settings.

In Appearance > Customize > Widgets:
The Customizer always uses the classic interface. Click the “Visibility” button below each widget’s settings to configure rules.

Legacy Widgets in block editor:
When you add a Legacy Widget block, expand the widget settings and you’ll find the “Visibility” button in the classic interface within the block.

Coming from Jetpack? Your existing visibility rules will be automatically imported. Visit Appearance > Widget Visibility to review your imported data.

FAQ

Does this work with the block-based widget editor?

Yes! Widget Visibility Control works with all widget editing interfaces:

  • Block-based widgets (Appearance > Widgets): Visibility settings appear in the Visibility panel in the right sidebar.
  • Legacy Widgets in the block editor: The classic “Visibility” button appears within the legacy widget interface.
  • Classic Widgets plugin: If you prefer the traditional widget interface, the “Visibility” button appears below each widget.
  • Customizer (Appearance > Customize > Widgets): Always uses the classic “Visibility” button interface.

I’m using Jetpack. Will my visibility rules be preserved?

Yes. On activation, the plugin automatically imports all your existing Jetpack Widget Visibility rules. No reconfiguration needed.

Can I use this alongside Jetpack?

Yes, but to avoid conflicts, our visibility interface is automatically disabled while Jetpack Widget Visibility module is active. You can continue using Jetpack’s interface, and when you disable the Jetpack module, our interface will take over automatically. Your visibility rules are stored in both formats, so the transition is seamless.

What happens if I deactivate or uninstall this plugin?

On deactivation, your rules are preserved for when you reactivate. On uninstall, only this plugin’s data is removed. If you haven’t cleaned the legacy data, Jetpack can still read your original rules.

Can I use multiple conditions on a single widget?

Yes. You can add multiple conditions and choose whether ALL conditions must match (AND logic) or just ONE condition needs to match (OR logic).

Does this plugin slow down my site?

No. The plugin is optimized for performance with intelligent caching. Assets only load on admin widget screens, and frontend checks are minimal and cached.

Does this require a WordPress.com connection?

No. This plugin works completely standalone without any external connections or dependencies.

Does this work with full site editing (FSE) themes?

This plugin is designed for widget areas (sidebars, footers, etc.). Full Site Editing themes typically don’t use traditional widget areas – instead, they manage all content through the Site Editor using template parts and blocks.

If your FSE theme includes widget areas, the plugin will work in those areas. If you need conditional visibility for blocks in FSE templates, you would need a different solution designed for the Site Editor.

How does time scheduling work?

Time scheduling allows you to show or hide widgets during specific date and time ranges. This is ideal for:

  • Promotional banners – Display ads only during sale periods
  • Seasonal content – Show holiday greetings or seasonal offers automatically
  • Flash sales – Schedule countdown widgets for limited-time deals
  • Event announcements – Display event info until the event date passes
  • Time-sensitive notices – Show maintenance warnings or temporary announcements

You can configure:

  • Show only during period – Widget appears only between the start and end dates
  • Hide during period – Widget is hidden between the start and end dates
  • No end date – Widget starts showing from a specific date and continues indefinitely

The schedule uses your WordPress timezone setting (Settings > General). If you also have visibility rules configured (like “show only on homepage”), both conditions must be met – the widget will only appear on the homepage AND within the scheduled time range.

How does the taxonomy selector work on sites with many taxonomies?

When you select “Taxonomy” as a condition, a second dropdown appears where you pick the specific taxonomy (e.g., Product Category, Color, Size). Only then does the third dropdown show the terms for that taxonomy. This cascading approach makes it much faster to find the right term on WooCommerce sites or any site with many custom taxonomies.

For hierarchical taxonomies, you can also check “Include children” to automatically match all child terms of the selected term.

Can I import my rules from Widget Logic?

Yes, both from Widget Logic 5.x and 6.x — they use the same storage format in the database. When the plugin detects Widget Logic data, you’ll see a notice and a section in Appearance > Widget Visibility > Import / Export. The importer shows each widget that had Widget Logic code, the original PHP, and the rule we extracted. For widgets whose code we can’t translate automatically, you decide per widget: import as always visible, import as always hidden, or skip.

What Widget Logic functions are supported on import?

Phase 1 supports the most common conditional tags: is_home, is_front_page, is_single (for posts), is_singular (with a post type), is_page (with ID or slug), is_category, is_tag, is_author, is_archive, is_search, is_404, is_date / is_day / is_month / is_year, is_user_logged_in, is_tax, is_post_type_archive, in_category, and has_tag. Combinations using only AND or only OR (not mixed) are supported. Mixed AND/OR trees, current_user_can, is_active_sidebar, code that uses variables or superglobals, and custom functions are not translated automatically — the importer asks you what to do per widget.

Will my Widget Logic data be deleted after import?

No. The original Widget Logic data stays in the database so you can roll back if needed. From Appearance > Widget Visibility > Import / Export you can delete it later with “Remove Widget Logic data”.

Can I import my rules from Widget Options?

Not yet. Widget Options stores its visibility data in a format that’s very different from Widget Logic and Jetpack, and an importer is a separate effort. If you only used Widget Options for visibility, you can configure the equivalent rules in our plugin manually — the most common scenarios (pages, post types, taxonomies, user roles, login state) are all supported.

Reviews

April 14, 2026 3 replies
The plugin works and is made for optimization.One ask – when there are many taxonomies (WC site) with many terms. When you select a Taxonomy, it takes minutes to find a term in the dropdown, because they are all listed in one dropdown. Would be great to have Txonomy > Select specific taxonomy > Select term in that taxonomy.
Read all 3 reviews

Contributors & Developers

“Widget Visibility Control” is open source software. The following people have contributed to this plugin.

Contributors

“Widget Visibility Control” has been translated into 2 locales. Thank you to the translators for their contributions.

Translate “Widget Visibility Control” into your language.

Interested in development?

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

Changelog

1.3.0

  • New: Import from Widget Logic — assisted wizard that translates Widget Logic PHP rules into structured visibility rules, with per-widget decisions for code we cannot translate automatically (always visible / always hidden / skip). Works with data from both Widget Logic 5.x and 6.x.
  • New: “Always” rule type for widgets that should always be shown or always be hidden (used by the Widget Logic import path).
  • New: Settings page redesigned with two tabs (Overview and Import / Export), an Overview “Visibility rules” summary card with total count plus a breakdown by source (Widget Logic / Jetpack / manual) and the last import date per source, and the AyudaWP promo banner at the bottom of each tab.
  • New: Wizard recognises previously imported widgets and adapts the copy (“X of Y already imported · Z pending” or “You already imported all of these”) instead of looking like a fresh task.
  • New: “Remove Widget Logic data” cleanup action in Import / Export.
  • Improved: Jetpack import card disables its actions when no legacy data remains in widget instances and explains the state clearly.
  • Improved: Editing a rule from the widget UI preserves its imported origin (Widget Logic / Jetpack) so the Overview breakdown stays accurate.
  • Fixed: False positive in the Jetpack data counter caused by writing a redundant copy of conditions inside widget instances. The plugin now keeps a single source of truth in its own option.

For older changelog entries, please check the changelog.txt file