diff --git a/lib/rest-api.php b/lib/rest-api.php index 5cdc258c08d5ab..7aa1923ba0caa9 100644 --- a/lib/rest-api.php +++ b/lib/rest-api.php @@ -183,81 +183,3 @@ function gutenberg_auto_draft_get_sample_permalink( $permalink, $id, $title, $na return $permalink; } add_filter( 'get_sample_permalink', 'gutenberg_auto_draft_get_sample_permalink', 10, 5 ); - -/** - * Expose the custom_logo theme-mod in the settings REST API. - */ -register_setting( - 'general', - 'theme_mods_' . get_option( 'stylesheet' ), - array( - 'type' => 'object', - 'show_in_rest' => array( - 'name' => 'theme_mods_' . get_option( 'stylesheet' ), - 'schema' => array( - 'type' => 'object', - 'properties' => array( - 'custom_logo' => array( 'type' => 'integer' ), - ), - ), - ), - ) -); - -/** - * Expose the "stylesheet" setting in the REST API. - */ -register_setting( - 'general', - 'stylesheet', - array( - 'type' => 'string', - 'show_in_rest' => true, - ) -); - -/** - * Filters the value of a setting recognized by the REST API. - * - * Hijacks the value for custom_logo theme-mod. - * - * @param mixed $result Value to use for the requested setting. Can be a scalar - * matching the registered schema for the setting, or null to - * follow the default get_option() behavior. - * @param string $name Setting name (as shown in REST API responses). - * - * @return null|array - */ -function gutenberg_rest_pre_get_setting_filter_custom_logo( $result, $name ) { - if ( 'theme_mods_' . get_option( 'stylesheet' ) === $name ) { - return array( - 'custom_logo' => get_theme_mod( 'custom_logo' ), - ); - } -} -add_filter( 'rest_pre_get_setting', 'gutenberg_rest_pre_get_setting_filter_custom_logo', 10, 2 ); - -/** - * Filters whether to preempt a setting value update via the REST API. - * - * Hijacks the saving method for theme-mods. - * - * @param bool $result Whether to override the default behavior for updating the - * value of a setting. - * @param string $name Setting name (as shown in REST API responses). - * @param mixed $value Updated setting value. - * - * @return bool - */ -function gutenberg_rest_pre_set_setting_filter_theme_mods( $result, $name, $value ) { - $theme_mods_setting_name = 'theme_mods_' . get_option( 'stylesheet' ); - if ( $theme_mods_setting_name === $name ) { - $value = (array) $value; - $value = wp_parse_args( $value, get_option( $theme_mods_setting_name, array() ) ); - - update_option( $theme_mods_setting_name, $value ); - return true; - } -} - -add_filter( 'rest_pre_update_setting', 'gutenberg_rest_pre_set_setting_filter_theme_mods', 10, 3 ); diff --git a/packages/block-library/src/site-logo/edit.js b/packages/block-library/src/site-logo/edit.js index 852446ed635ccf..05e225513392d1 100644 --- a/packages/block-library/src/site-logo/edit.js +++ b/packages/block-library/src/site-logo/edit.js @@ -255,45 +255,33 @@ export default function LogoEdit( { const [ logoUrl, setLogoUrl ] = useState(); const [ error, setError ] = useState(); const ref = useRef(); - const { mediaItemData, siteLogo, url, stylesheet } = useSelect( - ( select ) => { - const siteSettings = select( coreStore ).getEditedEntityRecord( - 'root', - 'site' - ); - - const themeModOptionName = `theme_mods_${ siteSettings.stylesheet }`; - - siteSettings[ themeModOptionName ] = - siteSettings[ themeModOptionName ] || {}; - const mediaItem = siteSettings[ themeModOptionName ].custom_logo - ? select( coreStore ).getEntityRecord( - 'root', - 'media', - siteSettings[ themeModOptionName ].custom_logo - ) - : null; - return { - mediaItemData: mediaItem && { - url: mediaItem.source_url, - alt: mediaItem.alt_text, - }, - siteLogo: siteSettings[ themeModOptionName ].custom_logo, - url: siteSettings.url, - stylesheet: siteSettings.stylesheet, - }; - }, - [] - ); + const { mediaItemData, siteLogo, url } = useSelect( ( select ) => { + const siteSettings = select( coreStore ).getEditedEntityRecord( + 'root', + 'site' + ); + const mediaItem = siteSettings.site_logo + ? select( coreStore ).getEntityRecord( + 'root', + 'media', + siteSettings.site_logo + ) + : null; + return { + mediaItemData: mediaItem && { + url: mediaItem.source_url, + alt: mediaItem.alt_text, + }, + siteLogo: siteSettings.site_logo, + url: siteSettings.url, + }; + }, [] ); const { editEntityRecord } = useDispatch( coreStore ); - const setLogo = ( newValue ) => { - const settingsVal = {}; - settingsVal[ `theme_mods_${ stylesheet }` ] = { - custom_logo: newValue, - }; - editEntityRecord( 'root', 'site', undefined, settingsVal ); - }; + const setLogo = ( newValue ) => + editEntityRecord( 'root', 'site', undefined, { + site_logo: newValue, + } ); let alt = null; if ( mediaItemData ) { diff --git a/packages/block-library/src/site-logo/index.php b/packages/block-library/src/site-logo/index.php index 1127f4790a3a7f..46af15ad6dbc66 100644 --- a/packages/block-library/src/site-logo/index.php +++ b/packages/block-library/src/site-logo/index.php @@ -25,6 +25,8 @@ function render_block_core_site_logo( $attributes ) { $custom_logo = get_custom_logo(); + remove_filter( 'wp_get_attachment_image_src', $adjust_width_height_filter ); + if ( empty( $custom_logo ) ) { return ''; // Return early if no custom logo is set, avoiding extraneous wrapper div. } @@ -56,10 +58,27 @@ function render_block_core_site_logo( $attributes ) { $wrapper_attributes = get_block_wrapper_attributes( array( 'class' => implode( ' ', $classnames ) ) ); $html = sprintf( '