From 2fa87621047309220fde8593572be67306f7d34f Mon Sep 17 00:00:00 2001 From: Riad Benguella Date: Tue, 21 Jul 2020 09:38:50 +0100 Subject: [PATCH 1/5] Replace the widgets screen experiment with a theme support --- gutenberg.php | 36 ++++++++----------- lib/customizer.php | 19 ++++++++-- lib/experiments-page.php | 13 +------ lib/widgets-page.php | 6 ++-- lib/widgets.php | 13 ++++++- .../src/components/header/index.js | 2 +- packages/edit-widgets/src/style.scss | 2 +- 7 files changed, 50 insertions(+), 41 deletions(-) diff --git a/gutenberg.php b/gutenberg.php index d2eb01ecbd298d..407f98d0a0c67c 100644 --- a/gutenberg.php +++ b/gutenberg.php @@ -45,17 +45,20 @@ function gutenberg_menu() { 'gutenberg' ); + if ( get_theme_support( 'block-based-widgets' ) ) { + add_theme_page( + __( 'Widgets', 'gutenberg' ), + __( 'Widgets', 'gutenberg' ), + 'edit_theme_options', + 'gutenberg-widgets', + 'the_gutenberg_widgets' + ); + $submenu['themes.php'] = array_filter( $submenu['themes.php'], function( $current_menu_item ) { + return isset( $current_menu_item[ 2 ] ) && $current_menu_item[ 2 ] !== 'widgets.php'; + } ); + } + if ( get_option( 'gutenberg-experiments' ) ) { - if ( array_key_exists( 'gutenberg-widget-experiments', get_option( 'gutenberg-experiments' ) ) ) { - add_submenu_page( - 'gutenberg', - __( 'Widgets (beta)', 'gutenberg' ), - __( 'Widgets (beta)', 'gutenberg' ), - 'edit_theme_options', - 'gutenberg-widgets', - 'the_gutenberg_widgets' - ); - } if ( array_key_exists( 'gutenberg-navigation', get_option( 'gutenberg-experiments' ) ) ) { add_submenu_page( 'gutenberg', @@ -101,7 +104,7 @@ function gutenberg_menu() { 'the_gutenberg_experiments' ); } -add_action( 'admin_menu', 'gutenberg_menu' ); +add_action( 'admin_menu', 'gutenberg_menu', 9 ); /** * Display a version notice and deactivate the Gutenberg plugin. @@ -182,13 +185,4 @@ function register_site_icon_url( $response ) { add_filter( 'rest_index', 'register_site_icon_url' ); -/** - * Registers the WP_Widget_Block widget - */ -function gutenberg_register_widgets() { - if ( gutenberg_is_experiment_enabled( 'gutenberg-widget-experiments' ) ) { - register_widget( 'WP_Widget_Block' ); - } -} - -add_action( 'widgets_init', 'gutenberg_register_widgets' ); +add_theme_support( 'block-based-widgets' ); diff --git a/lib/customizer.php b/lib/customizer.php index f665564517c12e..26b6599fe8b58b 100644 --- a/lib/customizer.php +++ b/lib/customizer.php @@ -55,10 +55,10 @@ function gutenberg_customize_register( $wp_customize ) { 'sanitize_callback' => 'gutenberg_customize_sanitize', ) ); - if ( gutenberg_is_experiment_enabled( 'gutenberg-widget-experiments' ) ) { + if ( get_theme_support( 'block-based-widgets' ) ) { $wp_customize->add_section( 'gutenberg_widget_blocks', - array( 'title' => __( 'Widget Blocks (Experimental)', 'gutenberg' ) ) + array( 'title' => __( 'Widget Blocks', 'gutenberg' ) ) ); $wp_customize->add_control( new WP_Customize_Widget_Blocks_Control( @@ -75,6 +75,21 @@ function gutenberg_customize_register( $wp_customize ) { add_action( 'customize_register', 'gutenberg_customize_register' ); /** + * Removes the core 'Widgets' panel from the Customizer if block based widgets are enabled. + * + * @param array $components Core Customizer components list. + * @return array (Maybe) modified components list. + */ +function gutenberg_remove_widgets_panel( $components ) { + $i = array_search( 'widgets', $components ); + if ( false !== $i ) { + unset( $components[ $i ] ); + } + return $components; +} +add_filter( 'customize_loaded_components', 'gutenberg_remove_widgets_panel' ); + +/* * Filters the Customizer widget settings arguments. * This is needed because the Customizer registers settings for the raw registered widgets, without going through the `sidebars_widgets` filter. * The `WP_Customize_Widgets` class expects sidebars to have an array of widgets registered, not a post ID. diff --git a/lib/experiments-page.php b/lib/experiments-page.php index f7ae531dc3cc60..87734ea82a1b46 100644 --- a/lib/experiments-page.php +++ b/lib/experiments-page.php @@ -40,17 +40,6 @@ function gutenberg_initialize_experiments_settings() { 'gutenberg_display_experiment_section', 'gutenberg-experiments' ); - add_settings_field( - 'gutenberg-widget-experiments', - __( 'Widgets', 'gutenberg' ), - 'gutenberg_display_experiment_field', - 'gutenberg-experiments', - 'gutenberg_experiments_section', - array( - 'label' => __( 'Enable Widgets screen and Legacy Widgets block', 'gutenberg' ), - 'id' => 'gutenberg-widget-experiments', - ) - ); add_settings_field( 'gutenberg-navigation', __( 'Navigation', 'gutenberg' ), @@ -131,7 +120,7 @@ function gutenberg_display_experiment_section() { */ function gutenberg_experiments_editor_settings( $settings ) { $experiments_settings = array( - '__experimentalEnableLegacyWidgetBlock' => gutenberg_is_experiment_enabled( 'gutenberg-widget-experiments' ), + '__experimentalEnableLegacyWidgetBlock' => get_theme_support( 'block-based-widgets' ), '__experimentalEnableFullSiteEditing' => gutenberg_is_experiment_enabled( 'gutenberg-full-site-editing' ), '__experimentalEnableFullSiteEditingDemo' => gutenberg_is_experiment_enabled( 'gutenberg-full-site-editing-demo' ), ); diff --git a/lib/widgets-page.php b/lib/widgets-page.php index 408dd217b66855..5ad008f13e822e 100644 --- a/lib/widgets-page.php +++ b/lib/widgets-page.php @@ -12,7 +12,7 @@ * * @param string $page The page name the function is being called for, `'gutenberg_customizer'` for the Customizer. */ -function the_gutenberg_widgets( $page = 'gutenberg_page_gutenberg-widgets' ) { +function the_gutenberg_widgets( $page = 'appearance_page_gutenberg-widgets' ) { ?>
is_block_editor() || - 'gutenberg_page_gutenberg-widgets' === $screen->id || + 'appearance_page_gutenberg-widgets' === $screen->id || ( function_exists( 'gutenberg_is_edit_site_page' ) && gutenberg_is_edit_site_page( $screen->id ) ) ); } @@ -261,3 +261,14 @@ function gutenberg_enqueue_widget_scripts() { } add_action( 'enqueue_block_editor_assets', 'gutenberg_enqueue_widget_scripts' ); + +/** + * Registers the WP_Widget_Block widget + */ +function gutenberg_register_widgets() { + if ( gutenberg_is_experiment_enabled( 'gutenberg-widget-experiments' ) ) { + register_widget( 'WP_Widget_Block' ); + } +} + +add_action( 'widgets_init', 'gutenberg_register_widgets' ); \ No newline at end of file diff --git a/packages/edit-widgets/src/components/header/index.js b/packages/edit-widgets/src/components/header/index.js index 24feb8b2a57574..a9d0e94e58e808 100644 --- a/packages/edit-widgets/src/components/header/index.js +++ b/packages/edit-widgets/src/components/header/index.js @@ -46,7 +46,7 @@ function Header( { isCustomizer } ) { { ! isCustomizer && (

- { __( 'Block Areas' ) } { __( '(experimental)' ) } + { __( 'Block Areas' ) }

) }
diff --git a/packages/edit-widgets/src/style.scss b/packages/edit-widgets/src/style.scss index 63cfa061dd70c2..8f86692579900d 100644 --- a/packages/edit-widgets/src/style.scss +++ b/packages/edit-widgets/src/style.scss @@ -11,7 +11,7 @@ html.wp-toolbar { background: $white; } -body.gutenberg_page_gutenberg-widgets { +body.appearance_page_gutenberg-widgets { @include wp-admin-reset( ".blocks-widgets-container" ); } From 8c024c87fb5e43c14785471b2bbf9eb99145bac7 Mon Sep 17 00:00:00 2001 From: Riad Benguella Date: Thu, 20 Aug 2020 13:04:59 +0100 Subject: [PATCH 2/5] Fixes after rebase --- lib/load.php | 20 ++++++++------------ lib/rest-api.php | 4 ++-- lib/widgets.php | 2 +- 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/lib/load.php b/lib/load.php index f6d3156950f388..540539f56ba59a 100644 --- a/lib/load.php +++ b/lib/load.php @@ -29,13 +29,11 @@ function gutenberg_is_experiment_enabled( $name ) { /** * Start: Include for phase 2 */ - if ( gutenberg_is_experiment_enabled( 'gutenberg-widget-experiments' ) ) { - if ( ! class_exists( 'WP_REST_Widget_Utils_Controller' ) ) { - require dirname( __FILE__ ) . '/class-wp-rest-widget-utils-controller.php'; - } - if ( ! class_exists( 'WP_REST_Sidebars_Controller' ) ) { - require_once dirname( __FILE__ ) . '/class-wp-rest-sidebars-controller.php'; - } + if ( ! class_exists( 'WP_REST_Widget_Utils_Controller' ) ) { + require dirname( __FILE__ ) . '/class-wp-rest-widget-utils-controller.php'; + } + if ( ! class_exists( 'WP_REST_Sidebars_Controller' ) ) { + require_once dirname( __FILE__ ) . '/class-wp-rest-sidebars-controller.php'; } if ( ! class_exists( 'WP_REST_Block_Directory_Controller' ) ) { require dirname( __FILE__ ) . '/class-wp-rest-block-directory-controller.php'; @@ -89,12 +87,10 @@ function gutenberg_is_experiment_enabled( $name ) { if ( ! class_exists( 'WP_Block_List' ) ) { require dirname( __FILE__ ) . '/class-wp-block-list.php'; } -if ( gutenberg_is_experiment_enabled( 'gutenberg-widget-experiments' ) ) { - if ( ! class_exists( 'WP_Widget_Block' ) ) { - require_once dirname( __FILE__ ) . '/class-wp-widget-block.php'; - } - require_once dirname( __FILE__ ) . '/widgets-page.php'; +if ( ! class_exists( 'WP_Widget_Block' ) ) { + require_once dirname( __FILE__ ) . '/class-wp-widget-block.php'; } +require_once dirname( __FILE__ ) . '/widgets-page.php'; require dirname( __FILE__ ) . '/compat.php'; require dirname( __FILE__ ) . '/utils.php'; diff --git a/lib/rest-api.php b/lib/rest-api.php index 7142cfffceb384..398ec3a45d147e 100644 --- a/lib/rest-api.php +++ b/lib/rest-api.php @@ -136,7 +136,7 @@ function gutenberg_filter_rest_prepare_theme( $response, $theme, $request ) { * @since 5.0.0 */ function gutenberg_register_rest_widget_updater_routes() { - if ( gutenberg_is_experiment_enabled( 'gutenberg-widget-experiments' ) ) { + if ( get_theme_support( 'block-based-widgets' ) ) { $widget_forms = new WP_REST_Widget_Utils_Controller(); $widget_forms->register_routes(); } @@ -194,7 +194,7 @@ function gutenberg_register_plugins_endpoint() { * Registers the Sidebars REST API routes. */ function gutenberg_register_sidebars_endpoint() { - if ( gutenberg_is_experiment_enabled( 'gutenberg-widget-experiments' ) ) { + if ( get_theme_support( 'block-based-widgets' ) ) { $sidebars = new WP_REST_Sidebars_Controller(); $sidebars->register_routes(); } diff --git a/lib/widgets.php b/lib/widgets.php index 0910ba0f0ff395..185d77103baa7e 100644 --- a/lib/widgets.php +++ b/lib/widgets.php @@ -266,7 +266,7 @@ function gutenberg_enqueue_widget_scripts() { * Registers the WP_Widget_Block widget */ function gutenberg_register_widgets() { - if ( gutenberg_is_experiment_enabled( 'gutenberg-widget-experiments' ) ) { + if ( get_theme_support( 'block-based-widgets' ) ) { register_widget( 'WP_Widget_Block' ); } } From 20d9e98dbd123075b2aa1312aab79b8248944345 Mon Sep 17 00:00:00 2001 From: Riad Benguella Date: Thu, 20 Aug 2020 13:07:39 +0100 Subject: [PATCH 3/5] Fix customizer panel removal --- lib/customizer.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/customizer.php b/lib/customizer.php index 26b6599fe8b58b..5ea5872e7ec611 100644 --- a/lib/customizer.php +++ b/lib/customizer.php @@ -81,6 +81,10 @@ function gutenberg_customize_register( $wp_customize ) { * @return array (Maybe) modified components list. */ function gutenberg_remove_widgets_panel( $components ) { + if ( ! get_theme_support( 'block-based-widgets' ) ) { + return $components; + } + $i = array_search( 'widgets', $components ); if ( false !== $i ) { unset( $components[ $i ] ); From 3b99fa626bb527fbedb04c7d9e60e185ffa473fd Mon Sep 17 00:00:00 2001 From: Riad Benguella Date: Thu, 20 Aug 2020 13:21:03 +0100 Subject: [PATCH 4/5] Fix phpcs --- gutenberg.php | 9 ++++++--- lib/customizer.php | 12 ++++++------ lib/widgets.php | 2 +- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/gutenberg.php b/gutenberg.php index 407f98d0a0c67c..460196de9bd7ad 100644 --- a/gutenberg.php +++ b/gutenberg.php @@ -53,9 +53,12 @@ function gutenberg_menu() { 'gutenberg-widgets', 'the_gutenberg_widgets' ); - $submenu['themes.php'] = array_filter( $submenu['themes.php'], function( $current_menu_item ) { - return isset( $current_menu_item[ 2 ] ) && $current_menu_item[ 2 ] !== 'widgets.php'; - } ); + $submenu['themes.php'] = array_filter( + $submenu['themes.php'], + function( $current_menu_item ) { + return isset( $current_menu_item[2] ) && 'widgets.php' !== $current_menu_item[2]; + } + ); } if ( get_option( 'gutenberg-experiments' ) ) { diff --git a/lib/customizer.php b/lib/customizer.php index 5ea5872e7ec611..7de79e88619cf6 100644 --- a/lib/customizer.php +++ b/lib/customizer.php @@ -85,15 +85,15 @@ function gutenberg_remove_widgets_panel( $components ) { return $components; } - $i = array_search( 'widgets', $components ); - if ( false !== $i ) { - unset( $components[ $i ] ); - } - return $components; + $i = array_search( 'widgets', $components, true ); + if ( false !== $i ) { + unset( $components[ $i ] ); + } + return $components; } add_filter( 'customize_loaded_components', 'gutenberg_remove_widgets_panel' ); -/* +/** * Filters the Customizer widget settings arguments. * This is needed because the Customizer registers settings for the raw registered widgets, without going through the `sidebars_widgets` filter. * The `WP_Customize_Widgets` class expects sidebars to have an array of widgets registered, not a post ID. diff --git a/lib/widgets.php b/lib/widgets.php index 185d77103baa7e..6f359e8f039be4 100644 --- a/lib/widgets.php +++ b/lib/widgets.php @@ -271,4 +271,4 @@ function gutenberg_register_widgets() { } } -add_action( 'widgets_init', 'gutenberg_register_widgets' ); \ No newline at end of file +add_action( 'widgets_init', 'gutenberg_register_widgets' ); From 8c6b13bc6b1ad5aeabab5358bdf6727e19a104ad Mon Sep 17 00:00:00 2001 From: Riad Benguella Date: Wed, 26 Aug 2020 10:40:31 +0100 Subject: [PATCH 5/5] Rename theme support flag --- gutenberg.php | 4 ++-- lib/customizer.php | 4 ++-- lib/experiments-page.php | 2 +- lib/rest-api.php | 4 ++-- lib/widgets.php | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/gutenberg.php b/gutenberg.php index 460196de9bd7ad..a9ca9f61e3336a 100644 --- a/gutenberg.php +++ b/gutenberg.php @@ -45,7 +45,7 @@ function gutenberg_menu() { 'gutenberg' ); - if ( get_theme_support( 'block-based-widgets' ) ) { + if ( get_theme_support( 'widgets-block-editor' ) ) { add_theme_page( __( 'Widgets', 'gutenberg' ), __( 'Widgets', 'gutenberg' ), @@ -188,4 +188,4 @@ function register_site_icon_url( $response ) { add_filter( 'rest_index', 'register_site_icon_url' ); -add_theme_support( 'block-based-widgets' ); +add_theme_support( 'widgets-block-editor' ); diff --git a/lib/customizer.php b/lib/customizer.php index 7de79e88619cf6..754b8d284f325b 100644 --- a/lib/customizer.php +++ b/lib/customizer.php @@ -55,7 +55,7 @@ function gutenberg_customize_register( $wp_customize ) { 'sanitize_callback' => 'gutenberg_customize_sanitize', ) ); - if ( get_theme_support( 'block-based-widgets' ) ) { + if ( get_theme_support( 'widgets-block-editor' ) ) { $wp_customize->add_section( 'gutenberg_widget_blocks', array( 'title' => __( 'Widget Blocks', 'gutenberg' ) ) @@ -81,7 +81,7 @@ function gutenberg_customize_register( $wp_customize ) { * @return array (Maybe) modified components list. */ function gutenberg_remove_widgets_panel( $components ) { - if ( ! get_theme_support( 'block-based-widgets' ) ) { + if ( ! get_theme_support( 'widgets-block-editor' ) ) { return $components; } diff --git a/lib/experiments-page.php b/lib/experiments-page.php index 87734ea82a1b46..fc9b7c588fb334 100644 --- a/lib/experiments-page.php +++ b/lib/experiments-page.php @@ -120,7 +120,7 @@ function gutenberg_display_experiment_section() { */ function gutenberg_experiments_editor_settings( $settings ) { $experiments_settings = array( - '__experimentalEnableLegacyWidgetBlock' => get_theme_support( 'block-based-widgets' ), + '__experimentalEnableLegacyWidgetBlock' => get_theme_support( 'widgets-block-editor' ), '__experimentalEnableFullSiteEditing' => gutenberg_is_experiment_enabled( 'gutenberg-full-site-editing' ), '__experimentalEnableFullSiteEditingDemo' => gutenberg_is_experiment_enabled( 'gutenberg-full-site-editing-demo' ), ); diff --git a/lib/rest-api.php b/lib/rest-api.php index 398ec3a45d147e..d2bf20f7518c27 100644 --- a/lib/rest-api.php +++ b/lib/rest-api.php @@ -136,7 +136,7 @@ function gutenberg_filter_rest_prepare_theme( $response, $theme, $request ) { * @since 5.0.0 */ function gutenberg_register_rest_widget_updater_routes() { - if ( get_theme_support( 'block-based-widgets' ) ) { + if ( get_theme_support( 'widgets-block-editor' ) ) { $widget_forms = new WP_REST_Widget_Utils_Controller(); $widget_forms->register_routes(); } @@ -194,7 +194,7 @@ function gutenberg_register_plugins_endpoint() { * Registers the Sidebars REST API routes. */ function gutenberg_register_sidebars_endpoint() { - if ( get_theme_support( 'block-based-widgets' ) ) { + if ( get_theme_support( 'widgets-block-editor' ) ) { $sidebars = new WP_REST_Sidebars_Controller(); $sidebars->register_routes(); } diff --git a/lib/widgets.php b/lib/widgets.php index 6f359e8f039be4..74afc7eccb687b 100644 --- a/lib/widgets.php +++ b/lib/widgets.php @@ -266,7 +266,7 @@ function gutenberg_enqueue_widget_scripts() { * Registers the WP_Widget_Block widget */ function gutenberg_register_widgets() { - if ( get_theme_support( 'block-based-widgets' ) ) { + if ( get_theme_support( 'widgets-block-editor' ) ) { register_widget( 'WP_Widget_Block' ); } }