| 1 |
<?php |
| 2 |
/** |
| 3 |
* Admin bar compatibility. |
| 4 |
* |
| 5 |
* @package gutenberg |
| 6 |
*/ |
| 7 |
|
| 8 |
/** |
| 9 |
* Replaces the home/odometer dashicon on the site-name node with the actual |
| 10 |
* site icon, when one is set. |
| 11 |
* |
| 12 |
* Ported from https://github.com/WordPress/wordpress-develop/pull/11781. |
| 13 |
* |
| 14 |
* @param WP_Admin_Bar $wp_admin_bar The WP_Admin_Bar instance. |
| 15 |
*/ |
| 16 |
function gutenberg_admin_bar_site_icon( WP_Admin_Bar $wp_admin_bar ): void { |
| 17 |
if ( is_network_admin() || is_user_admin() ) { |
| 18 |
return; |
| 19 |
} |
| 20 |
|
| 21 |
$node = $wp_admin_bar->get_node( 'site-name' ); |
| 22 |
if ( ! $node ) { |
| 23 |
return; |
| 24 |
} |
| 25 |
|
| 26 |
if ( isset( $node->meta['class'] ) && false !== strpos( $node->meta['class'], 'has-site-icon' ) ) { |
| 27 |
return; |
| 28 |
} |
| 29 |
|
| 30 |
/** This filter is documented in wp-includes/admin-bar.php */ |
| 31 |
$show_site_icons = apply_filters( 'wp_admin_bar_show_site_icons', true ); |
| 32 |
if ( true !== $show_site_icons || ! has_site_icon() ) { |
| 33 |
return; |
| 34 |
} |
| 35 |
|
| 36 |
$site_icon_url = get_site_icon_url( 32 ); |
| 37 |
$site_icon_url_2x = get_site_icon_url( 64 ); |
| 38 |
$srcset = ( $site_icon_url_2x && $site_icon_url !== $site_icon_url_2x ) ? sprintf( ' srcset="%s 2x"', esc_url( $site_icon_url_2x ) ) : ''; |
| 39 |
$site_icon = sprintf( |
| 40 |
'<img class="site-icon" src="%s"%s alt="" width="20" height="20" />', |
| 41 |
esc_url( $site_icon_url ), |
| 42 |
$srcset |
| 43 |
); |
| 44 |
|
| 45 |
$wp_admin_bar->add_node( |
| 46 |
array( |
| 47 |
'id' => 'site-name', |
| 48 |
'title' => $site_icon . $node->title, |
| 49 |
'meta' => array( 'class' => 'has-site-icon' ), |
| 50 |
) |
| 51 |
); |
| 52 |
} |
| 53 |
add_action( 'admin_bar_menu', 'gutenberg_admin_bar_site_icon', 31 ); |
| 54 |
|
| 55 |
/** |
| 56 |
* Enqueues the styles for the admin bar site icon. |
| 57 |
*/ |
| 58 |
function gutenberg_admin_bar_site_icon_styles(): void { |
| 59 |
$css = <<<CSS |
| 60 |
#wpadminbar .quicklinks li img.blavatar { |
| 61 |
border-radius: 2px; |
| 62 |
} |
| 63 |
#wpadminbar #wp-admin-bar-site-name.has-site-icon > .ab-item { |
| 64 |
display: flex; |
| 65 |
align-items: center; |
| 66 |
gap: 6px; |
| 67 |
} |
| 68 |
#wpadminbar #wp-admin-bar-site-name.has-site-icon > .ab-item:before { |
| 69 |
content: none; |
| 70 |
} |
| 71 |
#wpadminbar #wp-admin-bar-site-name > .ab-item .site-icon { |
| 72 |
width: 20px; |
| 73 |
height: 20px; |
| 74 |
background: #f0f0f1; |
| 75 |
border-radius: 2px; |
| 76 |
} |
| 77 |
@media screen and (max-width: 782px) { |
| 78 |
#wpadminbar #wp-admin-bar-site-name > .ab-item .site-icon { |
| 79 |
position: absolute; |
| 80 |
top: 9px; |
| 81 |
left: 12px; |
| 82 |
width: 28px; |
| 83 |
height: 28px; |
| 84 |
margin: 0; |
| 85 |
border-radius: 4px; |
| 86 |
} |
| 87 |
} |
| 88 |
CSS; |
| 89 |
wp_add_inline_style( 'admin-bar', $css ); |
| 90 |
} |
| 91 |
add_action( 'admin_bar_init', 'gutenberg_admin_bar_site_icon_styles' ); |
| 92 |
|