diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php index b3bd5ae5ac..5fb9b8f6e1 100644 --- a/src/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php +++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-widgets-controller.php @@ -109,6 +109,8 @@ class WP_REST_Widgets_Controller extends WP_REST_Controller { * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. */ public function get_items( $request ) { + retrieve_widgets(); + $prepared = array(); foreach ( wp_get_sidebars_widgets() as $sidebar_id => $widget_ids ) { @@ -149,6 +151,8 @@ class WP_REST_Widgets_Controller extends WP_REST_Controller { * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. */ public function get_item( $request ) { + retrieve_widgets(); + $widget_id = $request['id']; $sidebar_id = wp_find_widgets_sidebar( $widget_id ); @@ -230,6 +234,8 @@ class WP_REST_Widgets_Controller extends WP_REST_Controller { public function update_item( $request ) { global $wp_widget_factory; + retrieve_widgets(); + $widget_id = $request['id']; $sidebar_id = wp_find_widgets_sidebar( $widget_id ); @@ -291,6 +297,8 @@ class WP_REST_Widgets_Controller extends WP_REST_Controller { public function delete_item( $request ) { global $wp_registered_widget_updates; + retrieve_widgets(); + $widget_id = $request['id']; $sidebar_id = wp_find_widgets_sidebar( $widget_id ); diff --git a/tests/phpunit/tests/rest-api/rest-widgets-controller.php b/tests/phpunit/tests/rest-api/rest-widgets-controller.php index fc815e7aa2..594458598b 100644 --- a/tests/phpunit/tests/rest-api/rest-widgets-controller.php +++ b/tests/phpunit/tests/rest-api/rest-widgets-controller.php @@ -95,20 +95,14 @@ class WP_Test_REST_Widgets_Controller extends WP_Test_REST_Controller_Testcase { } public function setUp() { - global $wp_registered_widgets, $wp_registered_sidebars, $_wp_sidebars_widgets, $wp_widget_factory; + global $wp_widget_factory; parent::setUp(); wp_set_current_user( self::$admin_id ); - // Unregister all widgets and sidebars. - $wp_registered_widgets = array(); - $wp_registered_sidebars = array(); - $_wp_sidebars_widgets = array(); - update_option( 'sidebars_widgets', array() ); - // Re-register core widgets. - $wp_widget_factory->_register_widgets(); + wp_widgets_init(); // Register a non-multi widget for testing. wp_register_widget_control( @@ -149,6 +143,27 @@ class WP_Test_REST_Widgets_Controller extends WP_Test_REST_Controller_Testcase { ); } + public function clean_up_global_scope() { + global + $wp_widget_factory, + $wp_registered_sidebars, + $wp_registered_widgets, + $wp_registered_widget_controls, + $wp_registered_widget_updates, + $_wp_sidebars_widgets; + + $wp_registered_sidebars = array(); + $wp_registered_widgets = array(); + $wp_registered_widget_controls = array(); + $wp_registered_widget_updates = array(); + $wp_widget_factory->widgets = array(); + $_wp_sidebars_widgets = array(); + + update_option( 'sidebars_widgets', array() ); + + parent::clean_up_global_scope(); + } + private function setup_widget( $id_base, $number, $settings ) { global $wp_widget_factory;