mirror of
https://github.com/gosticks/wordpress-develop.git
synced 2025-10-16 12:05:38 +00:00
REST API: Retrieve latest widgets before loading sidebars.
This fixes issues where sidebars would be unexpectedly missing from the new widgets screen. Running retrieve_widgets syncs sidebars that were registered after the last theme switch. Props walbo, hellofromTonya, noisysocks. Fixes #53489. git-svn-id: https://develop.svn.wordpress.org/trunk@51235 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
67fc415084
commit
1de9c692f3
@ -98,8 +98,10 @@ class WP_REST_Sidebars_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();
|
||||
|
||||
$data = array();
|
||||
foreach ( (array) wp_get_sidebars_widgets() as $id => $widgets ) {
|
||||
foreach ( wp_get_sidebars_widgets() as $id => $widgets ) {
|
||||
$sidebar = $this->get_sidebar( $id );
|
||||
|
||||
if ( ! $sidebar ) {
|
||||
@ -135,6 +137,8 @@ class WP_REST_Sidebars_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();
|
||||
|
||||
$sidebar = $this->get_sidebar( $request['id'] );
|
||||
|
||||
if ( ! $sidebar ) {
|
||||
|
||||
@ -8,10 +8,11 @@
|
||||
*/
|
||||
|
||||
/**
|
||||
* Tests for REST API for Menus.
|
||||
* Tests for REST API for Widgets.
|
||||
*
|
||||
* @see WP_Test_REST_Controller_Testcase
|
||||
* @group restapi
|
||||
* @group widgets
|
||||
* @covers WP_REST_Sidebars_Controller
|
||||
*/
|
||||
class WP_Test_REST_Sidebars_Controller extends WP_Test_REST_Controller_Testcase {
|
||||
@ -61,6 +62,18 @@ class WP_Test_REST_Sidebars_Controller extends WP_Test_REST_Controller_Testcase
|
||||
update_option( 'sidebars_widgets', array() );
|
||||
}
|
||||
|
||||
function clean_up_global_scope() {
|
||||
global $wp_widget_factory, $wp_registered_sidebars, $wp_registered_widgets, $wp_registered_widget_controls, $wp_registered_widget_updates;
|
||||
|
||||
$wp_registered_sidebars = array();
|
||||
$wp_registered_widgets = array();
|
||||
$wp_registered_widget_controls = array();
|
||||
$wp_registered_widget_updates = array();
|
||||
$wp_widget_factory->widgets = array();
|
||||
|
||||
parent::clean_up_global_scope();
|
||||
}
|
||||
|
||||
private function setup_widget( $option_name, $number, $settings ) {
|
||||
update_option(
|
||||
$option_name,
|
||||
@ -128,6 +141,8 @@ class WP_Test_REST_Sidebars_Controller extends WP_Test_REST_Controller_Testcase
|
||||
* @ticket 41683
|
||||
*/
|
||||
public function test_get_items() {
|
||||
wp_widgets_init();
|
||||
|
||||
$request = new WP_REST_Request( 'GET', '/wp/v2/sidebars' );
|
||||
$response = rest_get_server()->dispatch( $request );
|
||||
$data = $response->get_data();
|
||||
@ -193,6 +208,8 @@ class WP_Test_REST_Sidebars_Controller extends WP_Test_REST_Controller_Testcase
|
||||
* @ticket 41683
|
||||
*/
|
||||
public function test_get_items_active_sidebar_with_widgets() {
|
||||
wp_widgets_init();
|
||||
|
||||
$this->setup_widget(
|
||||
'widget_rss',
|
||||
1,
|
||||
@ -241,6 +258,56 @@ class WP_Test_REST_Sidebars_Controller extends WP_Test_REST_Controller_Testcase
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 53489
|
||||
*/
|
||||
public function test_get_items_when_registering_new_sidebars() {
|
||||
register_sidebar(
|
||||
array(
|
||||
'name' => 'New Sidebar',
|
||||
'id' => 'new-sidebar',
|
||||
'before_widget' => '',
|
||||
'after_widget' => '',
|
||||
'before_title' => '',
|
||||
'after_title' => '',
|
||||
)
|
||||
);
|
||||
|
||||
$request = new WP_REST_Request( 'GET', '/wp/v2/sidebars' );
|
||||
$response = rest_get_server()->dispatch( $request );
|
||||
$data = $response->get_data();
|
||||
$data = $this->remove_links( $data );
|
||||
$this->assertSame(
|
||||
array(
|
||||
array(
|
||||
'id' => 'wp_inactive_widgets',
|
||||
'name' => 'Inactive widgets',
|
||||
'description' => '',
|
||||
'class' => '',
|
||||
'before_widget' => '',
|
||||
'after_widget' => '',
|
||||
'before_title' => '',
|
||||
'after_title' => '',
|
||||
'status' => 'inactive',
|
||||
'widgets' => array(),
|
||||
),
|
||||
array(
|
||||
'id' => 'new-sidebar',
|
||||
'name' => 'New Sidebar',
|
||||
'description' => '',
|
||||
'class' => '',
|
||||
'before_widget' => '',
|
||||
'after_widget' => '',
|
||||
'before_title' => '',
|
||||
'after_title' => '',
|
||||
'status' => 'active',
|
||||
'widgets' => array(),
|
||||
),
|
||||
),
|
||||
$data
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @ticket 41683
|
||||
*/
|
||||
@ -317,6 +384,8 @@ class WP_Test_REST_Sidebars_Controller extends WP_Test_REST_Controller_Testcase
|
||||
* @ticket 41683
|
||||
*/
|
||||
public function test_update_item() {
|
||||
wp_widgets_init();
|
||||
|
||||
$this->setup_widget(
|
||||
'widget_rss',
|
||||
1,
|
||||
@ -382,6 +451,8 @@ class WP_Test_REST_Sidebars_Controller extends WP_Test_REST_Controller_Testcase
|
||||
* @ticket 41683
|
||||
*/
|
||||
public function test_update_item_removes_widget_from_existing_sidebar() {
|
||||
wp_widgets_init();
|
||||
|
||||
$this->setup_widget(
|
||||
'widget_text',
|
||||
1,
|
||||
@ -423,6 +494,8 @@ class WP_Test_REST_Sidebars_Controller extends WP_Test_REST_Controller_Testcase
|
||||
* @ticket 41683
|
||||
*/
|
||||
public function test_update_item_moves_omitted_widget_to_inactive_sidebar() {
|
||||
wp_widgets_init();
|
||||
|
||||
$this->setup_widget(
|
||||
'widget_text',
|
||||
1,
|
||||
@ -465,6 +538,8 @@ class WP_Test_REST_Sidebars_Controller extends WP_Test_REST_Controller_Testcase
|
||||
* @ticket 41683
|
||||
*/
|
||||
public function test_get_items_inactive_widgets() {
|
||||
wp_widgets_init();
|
||||
|
||||
$this->setup_widget(
|
||||
'widget_rss',
|
||||
1,
|
||||
|
||||
@ -112,6 +112,7 @@ class WP_Test_REST_Widget_Types_Controller extends WP_Test_REST_Controller_Testc
|
||||
* @ticket 41683
|
||||
*/
|
||||
public function test_get_items() {
|
||||
wp_widgets_init();
|
||||
wp_set_current_user( self::$admin_id );
|
||||
$request = new WP_REST_Request( 'GET', '/wp/v2/widget-types' );
|
||||
$response = rest_get_server()->dispatch( $request );
|
||||
|
||||
Loading…
Reference in New Issue
Block a user