diff --git a/src/wp-admin/css/admin-menu.css b/src/wp-admin/css/admin-menu.css
index 2bb6a7df7d821..dd6bd9c46f4b0 100644
--- a/src/wp-admin/css/admin-menu.css
+++ b/src/wp-admin/css/admin-menu.css
@@ -280,6 +280,19 @@
background-size: 20px auto;
}
+#adminmenu div.wp-menu-image.svg-icon {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+#adminmenu div.wp-menu-image.svg-icon svg {
+ width: 24px;
+ height: 24px;
+ fill: currentColor;
+ transition: color 0.1s ease-in-out;
+}
+
div.wp-menu-image::before {
color: #a7aaad;
color: rgba(240, 246, 252, 0.6);
@@ -287,24 +300,35 @@ div.wp-menu-image::before {
transition: all 0.1s ease-in-out;
}
-#adminmenu div.wp-menu-image::before {
+#adminmenu div.wp-menu-image::before,
+#adminmenu div.wp-menu-image.svg-icon svg {
color: #a7aaad;
color: rgba(240, 246, 252, 0.6);
}
#adminmenu li.wp-has-current-submenu:hover div.wp-menu-image::before,
+#adminmenu li.wp-has-current-submenu:hover div.wp-menu-image.svg-icon svg,
#adminmenu .wp-has-current-submenu div.wp-menu-image::before,
+#adminmenu .wp-has-current-submenu div.wp-menu-image.svg-icon svg,
#adminmenu .current div.wp-menu-image::before,
+#adminmenu .current div.wp-menu-image.svg-icon svg,
#adminmenu a.wp-has-current-submenu:hover div.wp-menu-image::before,
+#adminmenu a.wp-has-current-submenu:hover div.wp-menu-image.svg-icon svg,
#adminmenu a.current:hover div.wp-menu-image::before,
+#adminmenu a.current:hover div.wp-menu-image.svg-icon svg,
#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image::before,
-#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image::before {
+#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image.svg-icon svg,
+#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image::before,
+#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image.svg-icon svg {
color: #fff;
}
#adminmenu li:hover div.wp-menu-image::before,
+#adminmenu li:hover div.wp-menu-image.svg-icon svg,
#adminmenu li a:focus div.wp-menu-image::before,
-#adminmenu li.opensub div.wp-menu-image::before {
+#adminmenu li a:focus div.wp-menu-image.svg-icon svg,
+#adminmenu li.opensub div.wp-menu-image::before,
+#adminmenu li.opensub div.wp-menu-image.svg-icon svg {
color: #72aee6;
}
@@ -315,6 +339,10 @@ div.wp-menu-image::before {
z-index: 25;
}
+.folded #adminmenu div.wp-menu-image.svg-icon {
+ height: 34px;
+}
+
.folded #adminmenu a.menu-top {
height: 34px;
}
@@ -492,35 +520,34 @@ ul#adminmenu > li.current > a.current::after {
#collapse-button .collapse-button-icon {
width: 36px;
height: 34px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
}
.folded #collapse-button .collapse-button-label {
display: none;
}
-#collapse-button .collapse-button-icon::after {
- content: "\f148";
- content: "\f148" / "";
- display: block;
+#collapse-button .collapse-button-icon svg {
+ width: 24px;
+ height: 24px;
+ fill: currentColor;
position: relative;
- top: 7px;
- text-align: center;
- font: 400 20px/1 dashicons !important;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
+ top: -1px;
}
/* rtl:ignore */
-.folded #collapse-button .collapse-button-icon::after,
-.rtl #collapse-button .collapse-button-icon::after {
+.folded #collapse-button .collapse-button-icon svg,
+.rtl #collapse-button .collapse-button-icon svg {
transform: rotate(180deg);
}
-.rtl.folded #collapse-button .collapse-button-icon::after {
+.rtl.folded #collapse-button .collapse-button-icon svg {
transform: none;
}
-#collapse-button .collapse-button-icon::after,
+#collapse-button .collapse-button-icon svg,
#collapse-button .collapse-button-label {
transition: all 0.1s ease-in-out;
}
@@ -600,6 +627,10 @@ li#wp-admin-bar-menu-toggle {
z-index: 25;
}
+ .auto-fold #adminmenu div.wp-menu-image.svg-icon {
+ height: 34px;
+ }
+
.auto-fold #adminmenu a.menu-top {
min-height: 34px;
}
@@ -641,11 +672,11 @@ li#wp-admin-bar-menu-toggle {
}
/* rtl:ignore */
- .auto-fold #collapse-button .collapse-button-icon::after {
+ .auto-fold #collapse-button .collapse-button-icon svg {
transform: rotate(180deg);
}
- .rtl.auto-fold #collapse-button .collapse-button-icon::after {
+ .rtl.auto-fold #collapse-button .collapse-button-icon svg {
transform: none;
}
@@ -805,26 +836,25 @@ li#wp-admin-bar-menu-toggle {
border: 1px solid transparent;
}
- #wpadminbar #wp-admin-bar-menu-toggle .ab-icon::before {
- content: "\f228";
- display: inline-block;
+ #wpadminbar #wp-admin-bar-menu-toggle .ab-icon {
+ display: flex;
+ align-items: center;
+ justify-content: center;
float: left;
- font: 400 40px/45px dashicons;
- vertical-align: middle;
- outline: none;
margin: 0;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
height: 44px;
width: 50px;
padding: 0;
border: none;
- text-align: center;
- text-decoration: none;
box-sizing: border-box;
}
- .wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon::before {
+ #wpadminbar #wp-admin-bar-menu-toggle .ab-icon svg {
+ width: 36px;
+ height: 36px;
+ }
+
+ .wp-responsive-open #wpadminbar #wp-admin-bar-menu-toggle .ab-icon {
color: #72aee6;
}
}
diff --git a/src/wp-admin/css/colors/_admin.scss b/src/wp-admin/css/colors/_admin.scss
index 366f1b86b4f16..6587020d37f7b 100644
--- a/src/wp-admin/css/colors/_admin.scss
+++ b/src/wp-admin/css/colors/_admin.scss
@@ -261,7 +261,8 @@ input[type="radio"]:focus {
color: variables.$menu-text;
}
-#adminmenu div.wp-menu-image:before {
+#adminmenu div.wp-menu-image:before,
+#adminmenu div.wp-menu-image.svg-icon svg {
color: variables.$menu-icon;
}
@@ -274,7 +275,9 @@ input[type="radio"]:focus {
}
#adminmenu li.menu-top:hover div.wp-menu-image:before,
-#adminmenu li.opensub > a.menu-top div.wp-menu-image:before {
+#adminmenu li.menu-top:hover div.wp-menu-image.svg-icon svg,
+#adminmenu li.opensub > a.menu-top div.wp-menu-image:before,
+#adminmenu li.opensub > a.menu-top div.wp-menu-image.svg-icon svg {
color: variables.$menu-highlight-icon;
}
@@ -345,13 +348,21 @@ ul#adminmenu > li.current > a.current:after {
}
#adminmenu li.wp-has-current-submenu div.wp-menu-image:before,
+#adminmenu li.wp-has-current-submenu div.wp-menu-image.svg-icon svg,
#adminmenu a.current:hover div.wp-menu-image:before,
+#adminmenu a.current:hover div.wp-menu-image.svg-icon svg,
#adminmenu li.current div.wp-menu-image:before,
+#adminmenu li.current div.wp-menu-image.svg-icon svg,
#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image:before,
+#adminmenu li.wp-has-current-submenu a:focus div.wp-menu-image.svg-icon svg,
#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image:before,
+#adminmenu li.wp-has-current-submenu.opensub div.wp-menu-image.svg-icon svg,
#adminmenu li:hover div.wp-menu-image:before,
+#adminmenu li:hover div.wp-menu-image.svg-icon svg,
#adminmenu li a:focus div.wp-menu-image:before,
-#adminmenu li.opensub div.wp-menu-image:before {
+#adminmenu li a:focus div.wp-menu-image.svg-icon svg,
+#adminmenu li.opensub div.wp-menu-image:before,
+#adminmenu li.opensub div.wp-menu-image.svg-icon svg {
color: variables.$menu-current-icon;
}
@@ -422,6 +433,7 @@ ul#adminmenu > li.current > a.current:after {
color: variables.$menu-submenu-focus-text;
}
+#wpadminbar:not(.mobile) li:hover .ab-icon,
#wpadminbar:not(.mobile) li:hover .ab-icon:before,
#wpadminbar:not(.mobile) li:hover .ab-item:before,
#wpadminbar:not(.mobile) li:hover .ab-item:after,
@@ -462,11 +474,15 @@ ul#adminmenu > li.current > a.current:after {
#wpadminbar .quicklinks .menupop.hover ul li a:focus,
#wpadminbar.nojs .quicklinks .menupop:hover ul li a:hover,
#wpadminbar.nojs .quicklinks .menupop:hover ul li a:focus,
+#wpadminbar li:hover .ab-icon,
#wpadminbar li:hover .ab-icon:before,
#wpadminbar li:hover .ab-item:before,
+#wpadminbar li a:focus .ab-icon,
#wpadminbar li a:focus .ab-icon:before,
#wpadminbar li .ab-item:focus:before,
+#wpadminbar li .ab-item:focus .ab-icon,
#wpadminbar li .ab-item:focus .ab-icon:before,
+#wpadminbar li.hover .ab-icon,
#wpadminbar li.hover .ab-icon:before,
#wpadminbar li.hover .ab-item:before,
#wpadminbar li:hover #adminbarsearch:before,
@@ -478,11 +494,13 @@ ul#adminmenu > li.current > a.current:after {
#wpadminbar .quicklinks li a:focus .blavatar,
#wpadminbar .quicklinks .ab-sub-wrapper .menupop.hover > a .blavatar,
#wpadminbar .menupop .menupop > .ab-item:hover:before,
+#wpadminbar.mobile .quicklinks .hover .ab-icon,
#wpadminbar.mobile .quicklinks .hover .ab-icon:before,
#wpadminbar.mobile .quicklinks .hover .ab-item:before {
color: variables.$menu-submenu-focus-text;
}
+#wpadminbar.mobile .quicklinks .ab-icon,
#wpadminbar.mobile .quicklinks .ab-icon:before,
#wpadminbar.mobile .quicklinks .ab-item:before {
color: variables.$menu-icon;
diff --git a/src/wp-admin/menu-header.php b/src/wp-admin/menu-header.php
index 5cced0ceaed96..05ea7e89fc8c7 100644
--- a/src/wp-admin/menu-header.php
+++ b/src/wp-admin/menu-header.php
@@ -125,7 +125,8 @@ function _wp_menu_output( $menu, $submenu, $submenu_as_parent = true ) {
* If the string 'none' (previously 'div') is passed instead of a URL, don't output
* the default menu image so an icon can be added to div.wp-menu-image as background
* with CSS. Dashicons and base64-encoded data:image/svg_xml URIs are also handled
- * as special cases.
+ * as special cases. Any other value is looked up as a registered icon name and, if
+ * found, rendered as inline SVG; otherwise it is treated as an image URL.
*/
if ( ! empty( $item[6] ) ) {
$img = '
';
@@ -140,6 +141,12 @@ function _wp_menu_output( $menu, $submenu, $submenu_as_parent = true ) {
} elseif ( str_starts_with( $item[6], 'dashicons-' ) ) {
$img = '
';
$img_class = ' dashicons-before ' . sanitize_html_class( $item[6] );
+ } else {
+ $icon = wp_get_icon( $item[6] );
+ if ( '' !== $icon ) {
+ $img = $icon;
+ $img_class = ' svg-icon';
+ }
}
}
@@ -283,7 +290,7 @@ function _wp_menu_output( $menu, $submenu, $submenu_as_parent = true ) {
echo '
';
}
diff --git a/src/wp-admin/menu.php b/src/wp-admin/menu.php
index 2a3430ebc3df8..ab7e61758a349 100644
--- a/src/wp-admin/menu.php
+++ b/src/wp-admin/menu.php
@@ -26,7 +26,7 @@
* @global array $menu
*/
-$menu[2] = array( __( 'Dashboard' ), 'read', 'index.php', '', 'menu-top menu-top-first menu-icon-dashboard', 'menu-dashboard', 'dashicons-dashboard' );
+$menu[2] = array( __( 'Dashboard' ), 'read', 'index.php', '', 'menu-top menu-top-first menu-icon-dashboard', 'menu-dashboard', 'core/dashboard' );
$submenu['index.php'][0] = array( __( 'Home' ), 'read', 'index.php' );
@@ -70,7 +70,7 @@
// $menu[5] = Posts.
-$menu[10] = array( __( 'Media' ), 'upload_files', 'upload.php', '', 'menu-top menu-icon-media', 'menu-media', 'dashicons-admin-media' );
+$menu[10] = array( __( 'Media' ), 'upload_files', 'upload.php', '', 'menu-top menu-icon-media', 'menu-media', 'core/media' );
$submenu['upload.php'][5] = array( _x( 'Library', 'media library menu item' ), 'upload_files', 'upload.php' );
$submenu['upload.php'][10] = array( __( 'Add Media File' ), 'upload_files', 'media-new.php' );
@@ -86,7 +86,7 @@
unset( $taxonomy, $submenu_index );
-$menu[15] = array( __( 'Links' ), 'manage_links', 'link-manager.php', '', 'menu-top menu-icon-links', 'menu-links', 'dashicons-admin-links' );
+$menu[15] = array( __( 'Links' ), 'manage_links', 'link-manager.php', '', 'menu-top menu-icon-links', 'menu-links', 'core/link' );
$submenu['link-manager.php'][5] = array( _x( 'All Links', 'admin menu' ), 'manage_links', 'link-manager.php' );
$submenu['link-manager.php'][10] = array( __( 'Add Link' ), 'manage_links', 'link-add.php' );
@@ -110,7 +110,7 @@
'',
'menu-top menu-icon-comments',
'menu-comments',
- 'dashicons-admin-comments',
+ 'core/comment',
);
unset( $awaiting_moderation );
@@ -142,19 +142,18 @@
: ++$_wp_last_object_menu; // If we're to use $_wp_last_object_menu, increment it first.
$post_type_for_id = sanitize_html_class( $post_type );
- $menu_icon = 'dashicons-admin-post';
+ $menu_icon = 'core/pin';
if ( is_string( $post_type_obj->menu_icon ) ) {
- // Special handling for an empty div.wp-menu-image, data:image/svg+xml, and Dashicons.
+ // Special handling for an empty div.wp-menu-image, data:image/svg+xml, Dashicons, and registered icons.
if ( 'none' === $post_type_obj->menu_icon || 'div' === $post_type_obj->menu_icon
|| str_starts_with( $post_type_obj->menu_icon, 'data:image/svg+xml;base64,' )
|| str_starts_with( $post_type_obj->menu_icon, 'dashicons-' )
+ || WP_Icons_Registry::get_instance()->is_registered( $post_type_obj->menu_icon )
) {
$menu_icon = $post_type_obj->menu_icon;
} else {
$menu_icon = esc_url( $post_type_obj->menu_icon );
}
- } elseif ( in_array( $post_type, $builtin, true ) ) {
- $menu_icon = 'dashicons-admin-' . $post_type;
}
$menu_class = 'menu-top menu-icon-' . $post_type_for_id;
@@ -206,7 +205,7 @@
$appearance_capability = current_user_can( 'switch_themes' ) ? 'switch_themes' : 'edit_theme_options';
-$menu[60] = array( __( 'Appearance' ), $appearance_capability, 'themes.php', '', 'menu-top menu-icon-appearance', 'menu-appearance', 'dashicons-admin-appearance' );
+$menu[60] = array( __( 'Appearance' ), $appearance_capability, 'themes.php', '', 'menu-top menu-icon-appearance', 'menu-appearance', 'core/brush' );
$count = '';
if ( ! is_multisite() && current_user_can( 'update_themes' ) ) {
@@ -320,7 +319,7 @@ function _add_plugin_file_editor_to_tools() {
}
/* translators: %s: Number of available plugin updates. */
-$menu[65] = array( sprintf( __( 'Plugins %s' ), $count ), 'activate_plugins', 'plugins.php', '', 'menu-top menu-icon-plugins', 'menu-plugins', 'dashicons-admin-plugins' );
+$menu[65] = array( sprintf( __( 'Plugins %s' ), $count ), 'activate_plugins', 'plugins.php', '', 'menu-top menu-icon-plugins', 'menu-plugins', 'core/plugins' );
$submenu['plugins.php'][5] = array( __( 'Installed Plugins' ), 'activate_plugins', 'plugins.php' );
@@ -337,9 +336,9 @@ function _add_plugin_file_editor_to_tools() {
unset( $update_data );
if ( current_user_can( 'list_users' ) ) {
- $menu[70] = array( __( 'Users' ), 'list_users', 'users.php', '', 'menu-top menu-icon-users', 'menu-users', 'dashicons-admin-users' );
+ $menu[70] = array( __( 'Users' ), 'list_users', 'users.php', '', 'menu-top menu-icon-users', 'menu-users', 'core/people' );
} else {
- $menu[70] = array( __( 'Profile' ), 'read', 'profile.php', '', 'menu-top menu-icon-users', 'menu-users', 'dashicons-admin-users' );
+ $menu[70] = array( __( 'Profile' ), 'read', 'profile.php', '', 'menu-top menu-icon-users', 'menu-users', 'core/people' );
}
if ( current_user_can( 'list_users' ) ) {
@@ -387,7 +386,7 @@ function _add_plugin_file_editor_to_tools() {
);
}
-$menu[75] = array( __( 'Tools' ), 'edit_posts', 'tools.php', '', 'menu-top menu-icon-tools', 'menu-tools', 'dashicons-admin-tools' );
+$menu[75] = array( __( 'Tools' ), 'edit_posts', 'tools.php', '', 'menu-top menu-icon-tools', 'menu-tools', 'core/tool' );
$submenu['tools.php'][5] = array( __( 'Available Tools' ), 'edit_posts', 'tools.php' );
$submenu['tools.php'][10] = array( __( 'Import' ), 'import', 'import.php' );
$submenu['tools.php'][15] = array( __( 'Export' ), 'export', 'export.php' );
@@ -402,7 +401,7 @@ function _add_plugin_file_editor_to_tools() {
$submenu['tools.php'][50] = array( __( 'Network Setup' ), 'setup_network', 'network.php' );
}
-$menu[80] = array( __( 'Settings' ), 'manage_options', 'options-general.php', '', 'menu-top menu-icon-settings', 'menu-settings', 'dashicons-admin-settings' );
+$menu[80] = array( __( 'Settings' ), 'manage_options', 'options-general.php', '', 'menu-top menu-icon-settings', 'menu-settings', 'core/settings' );
$submenu['options-general.php'][10] = array( _x( 'General', 'settings screen' ), 'manage_options', 'options-general.php' );
$submenu['options-general.php'][12] = array( __( 'Connectors' ), 'manage_options', 'options-connectors.php' );
$submenu['options-general.php'][15] = array( __( 'Writing' ), 'manage_options', 'options-writing.php' );
diff --git a/src/wp-admin/network/menu.php b/src/wp-admin/network/menu.php
index e74dc93452a2a..6937e94d8dec3 100644
--- a/src/wp-admin/network/menu.php
+++ b/src/wp-admin/network/menu.php
@@ -13,7 +13,7 @@
}
/* translators: Network menu item. */
-$menu[2] = array( __( 'Dashboard' ), 'manage_network', 'index.php', '', 'menu-top menu-top-first menu-icon-dashboard', 'menu-dashboard', 'dashicons-dashboard' );
+$menu[2] = array( __( 'Dashboard' ), 'manage_network', 'index.php', '', 'menu-top menu-top-first menu-icon-dashboard', 'menu-dashboard', 'core/dashboard' );
$submenu['index.php'][0] = array( __( 'Home' ), 'read', 'index.php' );
@@ -53,11 +53,11 @@
$menu[4] = array( '', 'read', 'separator1', '', 'wp-menu-separator' );
/* translators: Sites menu item. */
-$menu[5] = array( __( 'Sites' ), 'manage_sites', 'sites.php', '', 'menu-top menu-icon-site', 'menu-site', 'dashicons-admin-multisite' );
+$menu[5] = array( __( 'Sites' ), 'manage_sites', 'sites.php', '', 'menu-top menu-icon-site', 'menu-site', 'core/sites' );
$submenu['sites.php'][5] = array( __( 'All Sites' ), 'manage_sites', 'sites.php' );
$submenu['sites.php'][10] = array( __( 'Add Site' ), 'create_sites', 'site-new.php' );
-$menu[10] = array( __( 'Users' ), 'manage_network_users', 'users.php', '', 'menu-top menu-icon-users', 'menu-users', 'dashicons-admin-users' );
+$menu[10] = array( __( 'Users' ), 'manage_network_users', 'users.php', '', 'menu-top menu-icon-users', 'menu-users', 'core/people' );
$submenu['users.php'][5] = array( __( 'All Users' ), 'manage_network_users', 'users.php' );
$submenu['users.php'][10] = array( __( 'Add User' ), 'create_users', 'user-new.php' );
@@ -77,10 +77,10 @@
'',
'menu-top menu-icon-appearance',
'menu-appearance',
- 'dashicons-admin-appearance',
+ 'core/brush',
);
} else {
- $menu[15] = array( __( 'Themes' ), 'manage_network_themes', 'themes.php', '', 'menu-top menu-icon-appearance', 'menu-appearance', 'dashicons-admin-appearance' );
+ $menu[15] = array( __( 'Themes' ), 'manage_network_themes', 'themes.php', '', 'menu-top menu-icon-appearance', 'menu-appearance', 'core/brush' );
}
$submenu['themes.php'][5] = array( __( 'Installed Themes' ), 'manage_network_themes', 'themes.php' );
$submenu['themes.php'][10] = array( __( 'Add Theme' ), 'install_themes', 'theme-install.php' );
@@ -102,16 +102,16 @@
'',
'menu-top menu-icon-plugins',
'menu-plugins',
- 'dashicons-admin-plugins',
+ 'core/plugins',
);
} else {
- $menu[20] = array( __( 'Plugins' ), 'manage_network_plugins', 'plugins.php', '', 'menu-top menu-icon-plugins', 'menu-plugins', 'dashicons-admin-plugins' );
+ $menu[20] = array( __( 'Plugins' ), 'manage_network_plugins', 'plugins.php', '', 'menu-top menu-icon-plugins', 'menu-plugins', 'core/plugins' );
}
$submenu['plugins.php'][5] = array( __( 'Installed Plugins' ), 'manage_network_plugins', 'plugins.php' );
$submenu['plugins.php'][10] = array( __( 'Add Plugin' ), 'install_plugins', 'plugin-install.php' );
$submenu['plugins.php'][15] = array( __( 'Plugin File Editor' ), 'edit_plugins', 'plugin-editor.php' );
-$menu[25] = array( __( 'Settings' ), 'manage_network_options', 'settings.php', '', 'menu-top menu-icon-settings', 'menu-settings', 'dashicons-admin-settings' );
+$menu[25] = array( __( 'Settings' ), 'manage_network_options', 'settings.php', '', 'menu-top menu-icon-settings', 'menu-settings', 'core/settings' );
if ( defined( 'MULTISITE' ) && defined( 'WP_ALLOW_MULTISITE' ) && WP_ALLOW_MULTISITE ) {
$submenu['settings.php'][5] = array( __( 'Network Settings' ), 'manage_network_options', 'settings.php' );
$submenu['settings.php'][10] = array( __( 'Network Setup' ), 'setup_network', 'setup.php' );
diff --git a/src/wp-includes/admin-bar.php b/src/wp-includes/admin-bar.php
index 5ba568792209c..8b803b5c2d5de 100644
--- a/src/wp-includes/admin-bar.php
+++ b/src/wp-includes/admin-bar.php
@@ -115,6 +115,20 @@ function wp_admin_bar_render() {
$rendered = true;
}
+/**
+ * Returns inline SVG markup wrapped for use as an admin bar node icon.
+ *
+ * @since 7.1.0
+ * @access private
+ *
+ * @param string $icon_name Namespaced core icon name, e.g. 'core/wordpress'.
+ * @return string Admin bar icon markup.
+ */
+function _wp_admin_bar_icon( $icon_name ) {
+ $svg = wp_get_icon( $icon_name );
+ return '' . $svg . '';
+}
+
/**
* Adds the WordPress logo menu.
*
@@ -136,7 +150,7 @@ function wp_admin_bar_wp_menu( $wp_admin_bar ) {
$wp_logo_menu_args = array(
'id' => 'wp-logo',
- 'title' => '' .
+ 'title' => _wp_admin_bar_icon( 'core/wordpress' ) . '' .
/* translators: Hidden accessibility text. */
__( 'About WordPress' ) .
'',
@@ -242,7 +256,7 @@ function wp_admin_bar_sidebar_toggle( $wp_admin_bar ) {
$wp_admin_bar->add_node(
array(
'id' => 'menu-toggle',
- 'title' => '' .
+ 'title' => _wp_admin_bar_icon( 'core/menu' ) . '' .
/* translators: Hidden accessibility text. */
__( 'Menu' ) .
'',
@@ -281,7 +295,7 @@ function wp_admin_bar_my_account_item( $wp_admin_bar ) {
array(
'id' => 'my-account',
'parent' => 'top-secondary',
- 'title' => $howdy . $avatar,
+ 'title' => $howdy . ( empty( $avatar ) ? _wp_admin_bar_icon( 'core/people' ) : $avatar ),
'href' => $profile_url,
'meta' => array(
'class' => empty( $avatar ) ? '' : 'with-avatar',
@@ -384,10 +398,11 @@ function wp_admin_bar_site_menu( $wp_admin_bar ) {
$blogname = sprintf( __( 'User Dashboard: %s' ), esc_html( get_network()->site_name ) );
}
- $title = wp_html_excerpt( $blogname, 40, '…' );
- $meta = array(
+ $title = wp_html_excerpt( $blogname, 40, '…' );
+ $meta = array(
'menu_title' => $title,
);
+ $has_site_icon = false;
if ( ! is_network_admin() && ! is_user_admin() ) {
/** This filter is documented in wp-includes/admin-bar.php */
@@ -405,9 +420,14 @@ function wp_admin_bar_site_menu( $wp_admin_bar ) {
$title = $site_icon . $title;
$meta['class'] = 'has-site-icon';
+ $has_site_icon = true;
}
}
+ if ( ! $has_site_icon ) {
+ $title = _wp_admin_bar_icon( ( is_admin() || ! current_user_can( 'read' ) ) ? 'core/home' : 'core/dashboard' ) . $title;
+ }
+
$wp_admin_bar->add_node(
array(
'id' => 'site-name',
@@ -495,7 +515,7 @@ function wp_admin_bar_edit_site_menu( $wp_admin_bar ) {
$wp_admin_bar->add_node(
array(
'id' => 'site-editor',
- 'title' => __( 'Edit Site' ),
+ 'title' => _wp_admin_bar_icon( 'core/brush' ) . __( 'Edit Site' ),
'href' => add_query_arg(
array(
'postType' => 'wp_template',
@@ -550,7 +570,7 @@ function wp_admin_bar_customize_menu( $wp_admin_bar ) {
$wp_admin_bar->add_node(
array(
'id' => 'customize',
- 'title' => __( 'Customize' ),
+ 'title' => _wp_admin_bar_icon( 'core/brush' ) . __( 'Customize' ),
'href' => $customize_url,
'meta' => array(
'class' => 'hide-if-no-customize',
@@ -587,7 +607,7 @@ function wp_admin_bar_my_sites_menu( $wp_admin_bar ) {
$wp_admin_bar->add_node(
array(
'id' => 'my-sites',
- 'title' => __( 'My Sites' ),
+ 'title' => _wp_admin_bar_icon( 'core/sites' ) . __( 'My Sites' ),
'href' => $my_sites_url,
)
);
@@ -708,7 +728,7 @@ function wp_admin_bar_my_sites_menu( $wp_admin_bar ) {
( wp_lazy_loading_enabled( 'img', 'site_icon_in_toolbar' ) ? ' loading="lazy"' : '' )
);
} else {
- $blavatar = '';
+ $blavatar = '' . wp_get_icon( 'core/wordpress', array( 'size' => 16 ) ) . '
';
}
$blogname = $blog->blogname;
@@ -922,7 +942,7 @@ function wp_admin_bar_edit_menu( $wp_admin_bar ) {
$wp_admin_bar->add_node(
array(
'id' => 'edit',
- 'title' => $post_type_object->labels->edit_item,
+ 'title' => _wp_admin_bar_icon( 'core/pencil' ) . $post_type_object->labels->edit_item,
'href' => $edit_post_link,
)
);
@@ -934,7 +954,7 @@ function wp_admin_bar_edit_menu( $wp_admin_bar ) {
$wp_admin_bar->add_node(
array(
'id' => 'edit',
- 'title' => $tax->labels->edit_item,
+ 'title' => _wp_admin_bar_icon( 'core/pencil' ) . $tax->labels->edit_item,
'href' => $edit_term_link,
)
);
@@ -945,7 +965,7 @@ function wp_admin_bar_edit_menu( $wp_admin_bar ) {
$wp_admin_bar->add_node(
array(
'id' => 'edit',
- 'title' => __( 'Edit User' ),
+ 'title' => _wp_admin_bar_icon( 'core/pencil' ) . __( 'Edit User' ),
'href' => $edit_user_link,
)
);
@@ -976,8 +996,8 @@ function wp_admin_bar_command_palette_menu( WP_Admin_Bar $wp_admin_bar ): void {
$apple_pattern = 'Macintosh|Mac OS X|Mac_PowerPC';
$is_apple_os = (bool) preg_match( "/{$apple_pattern}/i", $_SERVER['HTTP_USER_AGENT'] ?? '' );
$shortcut_label = $is_apple_os ? $shortcut_labels['appleOS'] : $shortcut_labels['default'];
- $title = sprintf(
- '%s %s',
+ $title = _wp_admin_bar_icon( 'core/search' ) . sprintf(
+ '%s %s',
$shortcut_label,
/* translators: Hidden accessibility text. */
__( 'Open command palette' ),
@@ -1074,7 +1094,7 @@ function wp_admin_bar_new_content_menu( $wp_admin_bar ) {
return;
}
- $title = '' . _x( 'New', 'admin bar menu group label' ) . '';
+ $title = _wp_admin_bar_icon( 'core/plus' ) . '' . _x( 'New', 'admin bar menu group label' ) . '';
$wp_admin_bar->add_node(
array(
@@ -1132,7 +1152,7 @@ function wp_admin_bar_comments_menu( $wp_admin_bar ) {
number_format_i18n( $awaiting_mod )
);
- $icon = '';
+ $icon = _wp_admin_bar_icon( 'core/comment' );
$title = '' . number_format_i18n( $awaiting_mod ) . '';
$title .= '';
@@ -1247,7 +1267,7 @@ function wp_admin_bar_updates_menu( $wp_admin_bar ) {
number_format_i18n( $update_data['counts']['total'] )
);
- $icon = '';
+ $icon = _wp_admin_bar_icon( 'core/update' );
$title = '' . number_format_i18n( $update_data['counts']['total'] ) . '';
$title .= '' . $updates_text . '';
@@ -1273,6 +1293,7 @@ function wp_admin_bar_search_menu( $wp_admin_bar ) {
}
$form = '