Skip to content

Commit 4d19f6c

Browse files
REST API: Restore site logo and icon in index.
Restores setting the site's logo, icon, and wp-admin's back button image (which defaults to W). Prior to [56566], the site logo and icon were unconditionally added to the index. [56566] changed this by conditionally adding them if either the `_links` or `_embedded` fields were included. However, these fields are not included when using the Site Logo block, as it uses the `site_logo`, `site_icon`, and `site_icon_url` fields instead. This changeset restores the functionality by checking specifically for the `site_*` fields when neither of the `_links` or `_embedded` fields are present. Follow up to [56566]. Props antonvlasenko, hellofromTonya, ironprogrammer, priethor, wildworks. Fixes #59935. git-svn-id: https://develop.svn.wordpress.org/trunk@57147 602fd350-edb4-49c9-b593-d223f7449a82
1 parent 36a7c6c commit 4d19f6c

File tree

2 files changed

+126
-4
lines changed

2 files changed

+126
-4
lines changed

src/wp-includes/rest-api/class-wp-rest-server.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1296,6 +1296,13 @@ public function get_index( $request ) {
12961296
$this->add_active_theme_link_to_index( $response );
12971297
$this->add_site_logo_to_index( $response );
12981298
$this->add_site_icon_to_index( $response );
1299+
} else {
1300+
if ( rest_is_field_included( 'site_logo', $fields ) ) {
1301+
$this->add_site_logo_to_index( $response );
1302+
}
1303+
if ( rest_is_field_included( 'site_icon', $fields ) || rest_is_field_included( 'site_icon_url', $fields ) ) {
1304+
$this->add_site_icon_to_index( $response );
1305+
}
12991306
}
13001307

13011308
/**

tests/phpunit/tests/rest-api/rest-server.php

Lines changed: 119 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1187,17 +1187,132 @@ public function test_index_includes_link_to_active_theme_if_authenticated() {
11871187

11881188
/**
11891189
* @ticket 52321
1190+
* @ticket 59935
1191+
*
1192+
* @covers WP_REST_Server::get_index
11901193
*/
1191-
public function test_index_includes_site_icon() {
1192-
$server = new WP_REST_Server();
1194+
public function test_get_index_should_include_site_icon() {
11931195
update_option( 'site_icon', self::$icon_id );
11941196

1197+
$server = new WP_REST_Server();
11951198
$request = new WP_REST_Request( 'GET', '/' );
11961199
$index = $server->dispatch( $request );
11971200
$data = $index->get_data();
11981201

1199-
$this->assertArrayHasKey( 'site_icon', $data );
1200-
$this->assertSame( self::$icon_id, $data['site_icon'] );
1202+
$this->assertArrayHasKey( 'site_logo', $data, 'The "site_logo" field is missing in the response.' );
1203+
$this->assertArrayHasKey( 'site_icon', $data, 'The "site_icon" field is missing in the response.' );
1204+
$this->assertArrayHasKey( 'site_icon_url', $data, 'The "site_icon_url" field is missing in the response.' );
1205+
$this->assertSame( self::$icon_id, $data['site_icon'], 'The response "site_icon" ID does not match.' );
1206+
$this->assertStringContainsString( 'test-image-large', $data['site_icon_url'], 'The "site_icon_url" should contain the expected image.' );
1207+
}
1208+
/**
1209+
* @ticket 52321
1210+
* @ticket 59935
1211+
*
1212+
* @covers WP_REST_Server::get_index
1213+
*/
1214+
public function test_get_index_should_not_include_site_icon() {
1215+
$server = new WP_REST_Server();
1216+
$request = new WP_REST_Request( 'GET', '/' );
1217+
$index = $server->dispatch( $request );
1218+
$data = $index->get_data();
1219+
1220+
$this->assertArrayHasKey( 'site_logo', $data, 'The "site_logo" field is missing in the response.' );
1221+
$this->assertArrayHasKey( 'site_icon', $data, 'The "site_icon" field is missing in the response.' );
1222+
$this->assertArrayHasKey( 'site_icon_url', $data, 'The "site_icon_url" field is missing in the response.' );
1223+
$this->assertSame( 0, $data['site_icon'], 'Response "site_icon" should be 0.' );
1224+
$this->assertSame( '', $data['site_icon_url'], 'Response "site_icon_url" should be an empty string.' );
1225+
}
1226+
1227+
/**
1228+
* Test that the "get_index" method returns the expected site_icon*
1229+
* and site_logo fields based on the specified request parameters.
1230+
*
1231+
* @ticket 59935
1232+
*
1233+
* @covers WP_REST_Server::get_index
1234+
*
1235+
* @dataProvider data_get_index_should_return_site_icon_and_site_logo_fields
1236+
*
1237+
* @param string $fields List of fields to use in the request.
1238+
* @param array $expected_fields Expected fields.
1239+
* @param array $unexpected_fields Optional. Fields that should not be in the results. Default array().
1240+
* @param bool $is_embed Optional. Whether to use the "_embed" request parameter. Default false.
1241+
*/
1242+
public function test_get_index_should_return_site_icon_and_site_logo_fields( $fields, $expected_fields, $unexpected_fields = array(), $is_embed = false ) {
1243+
$server = new WP_REST_Server();
1244+
$request = new WP_REST_Request( 'GET', '/', array() );
1245+
$request->set_param( '_fields', $fields );
1246+
if ( $is_embed ) {
1247+
$request->set_param( '_embed', true );
1248+
}
1249+
1250+
$response = $server->get_index( $request )->get_data();
1251+
1252+
foreach ( $expected_fields as $expected_field ) {
1253+
$this->assertArrayHasKey( $expected_field, $response, "Expected \"{$expected_field}\" field is missing in the response." );
1254+
}
1255+
1256+
foreach ( $unexpected_fields as $unexpected_field ) {
1257+
$this->assertArrayNotHasKey( $unexpected_field, $response, "Response must not contain the \"{$unexpected_field}\" field." );
1258+
}
1259+
}
1260+
1261+
/**
1262+
* Data provider.
1263+
*
1264+
* @return array
1265+
*/
1266+
public function data_get_index_should_return_site_icon_and_site_logo_fields() {
1267+
return array(
1268+
'no site_logo or site_icon fields' => array(
1269+
'fields' => 'name',
1270+
'expected_fields' => array(),
1271+
'unexpected_fields' => array( 'site_logo', 'site_icon', 'site_icon_url' ),
1272+
),
1273+
'_links request parameter' => array(
1274+
'fields' => '_links',
1275+
'expected_fields' => array( 'site_logo', 'site_icon', 'site_icon_url' ),
1276+
),
1277+
'_embed request parameter' => array(
1278+
'field' => '_embed',
1279+
'expected_fields' => array( 'site_logo', 'site_icon', 'site_icon_url' ),
1280+
'unexpected_fields' => array(),
1281+
'is_embed' => true,
1282+
),
1283+
'site_logo field' => array(
1284+
'fields' => 'site_logo',
1285+
'expected_fields' => array( 'site_logo' ),
1286+
'unexpected_fields' => array( 'site_icon', 'site_icon_url' ),
1287+
),
1288+
'site_icon field' => array(
1289+
'fields' => 'site_icon',
1290+
'expected_fields' => array( 'site_icon', 'site_icon_url' ),
1291+
'unexpected_fields' => array( 'site_logo' ),
1292+
),
1293+
'site_icon_url field' => array(
1294+
'fields' => 'site_icon_url',
1295+
'expected_fields' => array( 'site_icon', 'site_icon_url' ),
1296+
'unexpected_fields' => array( 'site_logo' ),
1297+
),
1298+
'site_icon and site_icon_url field' => array(
1299+
'fields' => 'site_icon_url',
1300+
'expected_fields' => array( 'site_icon', 'site_icon_url' ),
1301+
'unexpected_fields' => array( 'site_logo' ),
1302+
),
1303+
'site_logo and site_icon fields' => array(
1304+
'fields' => 'site_logo,site_icon',
1305+
'expected_fields' => array( 'site_logo', 'site_icon', 'site_icon_url' ),
1306+
),
1307+
'site_logo and site_icon_url fields' => array(
1308+
'fields' => 'site_logo,site_icon_url',
1309+
'expected_fields' => array( 'site_logo', 'site_icon', 'site_icon_url' ),
1310+
),
1311+
'site_logo, site_icon, and site_icon_url fields' => array(
1312+
'fields' => 'site_logo,site_icon,site_icon_url',
1313+
'expected_fields' => array( 'site_logo', 'site_icon', 'site_icon_url' ),
1314+
),
1315+
);
12011316
}
12021317

12031318
public function test_get_namespace_index() {

0 commit comments

Comments
 (0)