Themes: Accessibility: Logo block returns empty link when image not set.

The logo block does not use theme mods, and instead saves a site-wide option `site_logo` to use as the site logo. 

Add handling for cases where the logo image does not exist and delete the `site_logo` option when the attachment configured as site logo is deleted.

Props afercia, joedolson, khokansardar, SergeyBiryukov.
Fixes #60922.
Built from https://develop.svn.wordpress.org/trunk@58213


git-svn-id: http://core.svn.wordpress.org/trunk@57676 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
joedolson 2024-05-27 16:41:10 +00:00
parent f6973306ea
commit 68197542eb
3 changed files with 29 additions and 19 deletions

View File

@ -1024,12 +1024,13 @@ function has_custom_logo( $blog_id = 0 ) {
} }
$custom_logo_id = get_theme_mod( 'custom_logo' ); $custom_logo_id = get_theme_mod( 'custom_logo' );
$is_image = wp_attachment_is_image( $custom_logo_id );
if ( $switched_blog ) { if ( $switched_blog ) {
restore_current_blog(); restore_current_blog();
} }
return (bool) $custom_logo_id; return $is_image;
} }
/** /**
@ -1052,10 +1053,9 @@ function get_custom_logo( $blog_id = 0 ) {
$switched_blog = true; $switched_blog = true;
} }
$custom_logo_id = get_theme_mod( 'custom_logo' );
// We have a logo. Logo is go. // We have a logo. Logo is go.
if ( $custom_logo_id ) { if ( has_custom_logo() ) {
$custom_logo_id = get_theme_mod( 'custom_logo' );
$custom_logo_attr = array( $custom_logo_attr = array(
'class' => 'custom-logo', 'class' => 'custom-logo',
'loading' => false, 'loading' => false,
@ -1097,6 +1097,9 @@ function get_custom_logo( $blog_id = 0 ) {
*/ */
$image = wp_get_attachment_image( $custom_logo_id, 'full', false, $custom_logo_attr ); $image = wp_get_attachment_image( $custom_logo_id, 'full', false, $custom_logo_attr );
// Check that we have a proper HTML img element.
if ( $image ) {
if ( $unlink_homepage_logo && is_front_page() && ! is_paged() ) { if ( $unlink_homepage_logo && is_front_page() && ! is_paged() ) {
// If on the home page, don't link the logo to home. // If on the home page, don't link the logo to home.
$html = sprintf( $html = sprintf(
@ -1113,6 +1116,7 @@ function get_custom_logo( $blog_id = 0 ) {
$image $image
); );
} }
}
} elseif ( is_customize_preview() ) { } elseif ( is_customize_preview() ) {
// If no logo is set but we're in the Customizer, leave a placeholder (needed for the live preview). // If no logo is set but we're in the Customizer, leave a placeholder (needed for the live preview).
$html = sprintf( $html = sprintf(

View File

@ -3434,6 +3434,7 @@ function get_registered_theme_feature( $feature ) {
* @since 3.0.0 * @since 3.0.0
* @since 4.3.0 Also removes `header_image_data`. * @since 4.3.0 Also removes `header_image_data`.
* @since 4.5.0 Also removes custom logo theme mods. * @since 4.5.0 Also removes custom logo theme mods.
* @since 6.6.0 Also removes `site_logo` option set by the site logo block.
* *
* @param int $id The attachment ID. * @param int $id The attachment ID.
*/ */
@ -3442,12 +3443,17 @@ function _delete_attachment_theme_mod( $id ) {
$header_image = get_header_image(); $header_image = get_header_image();
$background_image = get_background_image(); $background_image = get_background_image();
$custom_logo_id = get_theme_mod( 'custom_logo' ); $custom_logo_id = get_theme_mod( 'custom_logo' );
$site_logo_id = get_option( 'site_logo' );
if ( $custom_logo_id && $custom_logo_id == $id ) { if ( $custom_logo_id && $custom_logo_id == $id ) {
remove_theme_mod( 'custom_logo' ); remove_theme_mod( 'custom_logo' );
remove_theme_mod( 'header_text' ); remove_theme_mod( 'header_text' );
} }
if ( $site_logo_id && $site_logo_id == $id ) {
delete_option( 'site_logo' );
}
if ( $header_image && $header_image == $attachment_image ) { if ( $header_image && $header_image == $attachment_image ) {
remove_theme_mod( 'header_image' ); remove_theme_mod( 'header_image' );
remove_theme_mod( 'header_image_data' ); remove_theme_mod( 'header_image_data' );

View File

@ -16,7 +16,7 @@
* *
* @global string $wp_version * @global string $wp_version
*/ */
$wp_version = '6.6-alpha-58212'; $wp_version = '6.6-alpha-58213';
/** /**
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema. * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.