REST API: Decode HTML entities in widget names and descriptions in widget types controller.

Follow-up to [50995].

Props ramonopoly, noisysocks, spacedmonkey, justinahinon, audrasjb, SergeyBiryukov.
Fixes #53407.

git-svn-id: https://develop.svn.wordpress.org/trunk@51174 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Sergey Biryukov 2021-06-17 11:28:55 +00:00
parent 81182b52ef
commit 855bbef616
2 changed files with 31 additions and 3 deletions

View File

@ -210,8 +210,16 @@ class WP_REST_Widget_Types_Controller extends WP_REST_Controller {
$parsed_id = wp_parse_widget_id( $widget['id'] );
$widget_object = $wp_widget_factory->get_widget_object( $parsed_id['id_base'] );
$widget['id'] = $parsed_id['id_base'];
$widget['is_multi'] = (bool) $widget_object;
$widget['id'] = $parsed_id['id_base'];
$widget['is_multi'] = (bool) $widget_object;
if ( isset( $widget['name'] ) ) {
$widget['name'] = html_entity_decode( $widget['name'] );
}
if ( isset( $widget['description'] ) ) {
$widget['description'] = html_entity_decode( $widget['description'] );
}
unset( $widget['callback'] );

View File

@ -198,6 +198,27 @@ class WP_Test_REST_Widget_Types_Controller extends WP_Test_REST_Controller_Testc
$this->assertErrorResponse( 'rest_widget_type_invalid', $response, 404 );
}
/**
* @ticket 53407
*/
public function test_get_widgets_decodes_html_entities() {
wp_set_current_user( self::$admin_id );
$widget_id = 'archives';
wp_register_sidebar_widget(
$widget_id,
'Legacy ‑ Archive ‑ Widget',
function() {},
array(
'description' => 'A great & interesting archive of your site’s posts!',
)
);
$request = new WP_REST_Request( 'GET', '/wp/v2/widget-types/archives' );
$response = rest_get_server()->dispatch( $request );
$data = $response->get_data();
$this->assertSame( 'Legacy Archive Widget', $data['name'] );
$this->assertSame( 'A great & interesting archive of your sites posts!', $data['description'] );
}
/**
* @ticket 41683
*/
@ -492,7 +513,6 @@ class WP_Test_REST_Widget_Types_Controller extends WP_Test_REST_Controller_Testc
$wp_widget_factory->widgets['WP_Widget_Search']->widget_options['show_instance_in_rest'] = true;
}
/**
* The test_create_item() method does not exist for widget types.
*/