From 53bd9182b5095d9114e02583186813d5cab76596 Mon Sep 17 00:00:00 2001 From: matticbot Date: Fri, 26 Jun 2026 21:25:31 +0000 Subject: [PATCH 1/2] Widget Visibility: restore controls for legacy widgets in block widget editor In the Gutenberg block-based widget editor (Appearance > Widgets since WordPress 5.8), the Visibility button for legacy PHP widgets was rendered by PHP via `in_widget_form`, but clicking it did nothing. Two bugs caused this: 1. `widget-conditions.js` used `closest('div.widget')` to find the widget container, but in the Gutenberg legacy-widget block the container is `.wp-block-legacy-widget__edit-form`, not `div.widget`. The jQuery call returned an empty set, so every subsequent DOM operation on `$widget` silently did nothing (the conditions panel never toggled). 2. `widget_admin_setup()` (which enqueues the CSS/JS and localises the `widget_conditions_data` global) was wired to the `sidebar_admin_setup` action. In the Gutenberg block widget editor that action may not fire, meaning the assets were never enqueued. For the Gutenberg path we now register on `enqueue_block_editor_assets` instead, which reliably fires on the widgets.php block-editor page. The `widgets` style handle (only registered in the classic editor) is also skipped as a CSS dependency when the block editor is active to prevent a silent enqueue failure. Co-authored-by: nerrad --- .../jetpack-1757-widget-visibility-gutenberg | 4 ++++ .../widget-visibility/widget-conditions.php | 14 ++++++++++++-- .../widget-conditions/widget-conditions.js | 4 ++-- 3 files changed, 18 insertions(+), 4 deletions(-) create mode 100644 projects/plugins/jetpack/changelog/jetpack-1757-widget-visibility-gutenberg diff --git a/projects/plugins/jetpack/changelog/jetpack-1757-widget-visibility-gutenberg b/projects/plugins/jetpack/changelog/jetpack-1757-widget-visibility-gutenberg new file mode 100644 index 000000000000..eae2a8704b4e --- /dev/null +++ b/projects/plugins/jetpack/changelog/jetpack-1757-widget-visibility-gutenberg @@ -0,0 +1,4 @@ +Significance: patch +Type: bugfix + +Widget Visibility: restore visibility controls for legacy widgets in the block-based widget editor. diff --git a/projects/plugins/jetpack/modules/widget-visibility/widget-conditions.php b/projects/plugins/jetpack/modules/widget-visibility/widget-conditions.php index 40959a84b621..650ae37ff7bb 100644 --- a/projects/plugins/jetpack/modules/widget-visibility/widget-conditions.php +++ b/projects/plugins/jetpack/modules/widget-visibility/widget-conditions.php @@ -117,7 +117,14 @@ public static function init() { } if ( $add_data_assets_to_page ) { - add_action( 'sidebar_admin_setup', array( __CLASS__, 'widget_admin_setup' ) ); + // In the classic widget editor, sidebar_admin_setup fires and is the correct hook. + // In the Gutenberg block widget editor, sidebar_admin_setup may not fire, so we + // also register on enqueue_block_editor_assets to ensure assets are always loaded. + if ( $using_classic_experience ) { + add_action( 'sidebar_admin_setup', array( __CLASS__, 'widget_admin_setup' ) ); + } else { + add_action( 'enqueue_block_editor_assets', array( __CLASS__, 'widget_admin_setup' ) ); + } } if ( $add_block_controls ) { @@ -203,7 +210,10 @@ public static function add_block_attributes_filter() { * Prepare the interface for editing widgets - loading css, javascript & data */ public static function widget_admin_setup() { - wp_enqueue_style( 'widget-conditions', plugins_url( 'widget-conditions/widget-conditions.css', __FILE__ ), array( 'widgets' ), JETPACK__VERSION ); + // The 'widgets' style handle is only registered in the classic widget editor. + // In the Gutenberg block widget editor it is absent, so omit it as a dependency. + $style_deps = wp_use_widgets_block_editor() ? array() : array( 'widgets' ); + wp_enqueue_style( 'widget-conditions', plugins_url( 'widget-conditions/widget-conditions.css', __FILE__ ), $style_deps, JETPACK__VERSION ); wp_style_add_data( 'widget-conditions', 'rtl', 'replace' ); wp_enqueue_script( 'widget-conditions', diff --git a/projects/plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions.js b/projects/plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions.js index bf3e51f65e31..c02fbcf28e1b 100644 --- a/projects/plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions.js +++ b/projects/plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions.js @@ -112,7 +112,7 @@ jQuery( function ( $ ) { widgets_shell.on( 'click.widgetconditions', 'a.display-options', function ( e ) { var $displayOptionsButton = $( this ), - $widget = $displayOptionsButton.closest( 'div.widget' ); + $widget = $displayOptionsButton.closest( 'div.widget, .wp-block-legacy-widget__edit-form' ); e.preventDefault(); @@ -137,7 +137,7 @@ jQuery( function ( $ ) { e.preventDefault(); if ( $condition.is( ':first-child' ) && $condition.is( ':last-child' ) ) { - $( this ).closest( 'div.widget' ).find( 'a.display-options' ).click(); + $( this ).closest( 'div.widget, .wp-block-legacy-widget__edit-form' ).find( 'a.display-options' ).click(); $condition.find( 'select.conditions-rule-major' ).val( '' ).change(); } else { $condition.find( 'select.conditions-rule-major' ).change(); From bc87e58b5446003268c63bea8d13c2a80ef3ed82 Mon Sep 17 00:00:00 2001 From: Brandon Kraft Date: Fri, 26 Jun 2026 17:05:25 -0500 Subject: [PATCH 2/2] Widget Visibility: fix prettier formatting in widget-conditions.js Wrap the .closest().find().click() chain across lines to satisfy prettier/prettier, which was failing ESLint (and in turn the linter exclude-list check, which tried to add the file to the eslint excludelist). --- .../widget-visibility/widget-conditions/widget-conditions.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/projects/plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions.js b/projects/plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions.js index c02fbcf28e1b..7de13f794e6d 100644 --- a/projects/plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions.js +++ b/projects/plugins/jetpack/modules/widget-visibility/widget-conditions/widget-conditions.js @@ -137,7 +137,10 @@ jQuery( function ( $ ) { e.preventDefault(); if ( $condition.is( ':first-child' ) && $condition.is( ':last-child' ) ) { - $( this ).closest( 'div.widget, .wp-block-legacy-widget__edit-form' ).find( 'a.display-options' ).click(); + $( this ) + .closest( 'div.widget, .wp-block-legacy-widget__edit-form' ) + .find( 'a.display-options' ) + .click(); $condition.find( 'select.conditions-rule-major' ).val( '' ).change(); } else { $condition.find( 'select.conditions-rule-major' ).change();