@@ -92,3 +92,86 @@ static function () use ( $admin_color_class ) {
9292}
9393
9494add_action ( 'site-editor-v2_init ' , 'gutenberg_enable_omnibar_in_site_editor_v2 ' );
95+
96+ /**
97+ * Replaces the home/odometer dashicon in the admin bar site menu with the
98+ * actual site icon, if one is set.
99+ *
100+ * @param WP_Admin_Bar $wp_admin_bar The WP_Admin_Bar instance.
101+ */
102+ function gutenberg_omnibar_site_icon ( $ wp_admin_bar ) {
103+ if (
104+ ! is_admin_bar_showing () ||
105+ ! gutenberg_is_experiment_enabled ( 'gutenberg-omnibar ' )
106+ ) {
107+ return ;
108+ }
109+
110+ $ node = $ wp_admin_bar ->get_node ( 'site-name ' );
111+ if ( ! $ node ) {
112+ return ;
113+ }
114+
115+ $ site_icon_url = get_site_icon_url ( 64 );
116+ if ( ! $ site_icon_url ) {
117+ return ;
118+ }
119+
120+ $ meta = (array ) $ node ->meta ;
121+ $ meta ['class ' ] = isset ( $ meta ['class ' ] ) ? trim ( $ meta ['class ' ] . ' has-site-icon ' ) : 'has-site-icon ' ;
122+
123+ $ wp_admin_bar ->add_node (
124+ array (
125+ 'id ' => 'site-name ' ,
126+ 'title ' => '<img class="site-icon" src=" ' . esc_url ( $ site_icon_url ) . '" alt="" /> ' . $ node ->title ,
127+ 'meta ' => $ meta ,
128+ )
129+ );
130+ }
131+
132+ add_action ( 'admin_bar_menu ' , 'gutenberg_omnibar_site_icon ' , 31 );
133+
134+ /**
135+ * Adds the styles for the admin bar site icon.
136+ */
137+ function gutenberg_omnibar_site_icon_styles () {
138+ if (
139+ ! is_admin_bar_showing () ||
140+ ! gutenberg_is_experiment_enabled ( 'gutenberg-omnibar ' )
141+ ) {
142+ return ;
143+ }
144+
145+ $ css = <<<CSS
146+ #wpadminbar #wp-admin-bar-site-name.has-site-icon > .ab-item:before {
147+ content: none;
148+ }
149+
150+ #wpadminbar #wp-admin-bar-site-name > .ab-item .site-icon {
151+ width: 20px;
152+ height: 20px;
153+ margin: 0;
154+ margin-inline-end: 6px;
155+ vertical-align: -5px;
156+ background: #f0f0f1;
157+ border-radius: 2px;
158+ }
159+
160+ @media screen and (max-width: 782px) {
161+ #wpadminbar #wp-admin-bar-site-name > .ab-item .site-icon {
162+ position: absolute;
163+ top: 9px;
164+ inset-inline-start: 12px;
165+ width: 28px;
166+ height: 28px;
167+ margin: 0;
168+ border-radius: 4px;
169+ }
170+ }
171+ CSS ;
172+
173+ wp_add_inline_style ( 'admin-bar ' , $ css );
174+ }
175+
176+ add_action ( 'wp_enqueue_scripts ' , 'gutenberg_omnibar_site_icon_styles ' );
177+ add_action ( 'admin_enqueue_scripts ' , 'gutenberg_omnibar_site_icon_styles ' );
0 commit comments