diff --git a/src/wp-includes/admin-bar.php b/src/wp-includes/admin-bar.php
index b9c7872d0cc07..1e96ac794d8f2 100644
--- a/src/wp-includes/admin-bar.php
+++ b/src/wp-includes/admin-bar.php
@@ -949,16 +949,38 @@ function wp_admin_bar_command_palette_menu( WP_Admin_Bar $wp_admin_bar ): void {
return;
}
- $is_apple_os = (bool) preg_match( '/Macintosh|Mac OS X|Mac_PowerPC/i', $_SERVER['HTTP_USER_AGENT'] ?? '' );
- $shortcut_label = $is_apple_os
- ? _x( '⌘K', 'keyboard shortcut to open the command palette' )
- : _x( 'Ctrl+K', 'keyboard shortcut to open the command palette' );
- $title = sprintf(
+ $shortcut_labels = array(
+ 'appleOS' => _x( '⌘K', 'keyboard shortcut to open the command palette' ),
+ 'default' => _x( 'Ctrl+K', 'keyboard shortcut to open the command palette' ),
+ );
+ $is_apple_os = (bool) preg_match( '/Macintosh|Mac OS X|Mac_PowerPC/i', $_SERVER['HTTP_USER_AGENT'] ?? '' );
+ $shortcut_label = $is_apple_os ? $shortcut_labels['appleOS'] : $shortcut_labels['default'];
+ $title = sprintf(
'%s %s',
$shortcut_label,
/* translators: Hidden accessibility text. */
__( 'Open command palette' ),
);
+ /*
+ * Detect Apple OS via JavaScript for sites behind a CDN blocking the UA header.
+ *
+ * Running the script as the admin bar is rendered avoids a flash of incorrect content
+ * for users with Apple OS when the UA header is blocked. It also prevents the need for
+ * wp-i18n to be loaded as a dependency.
+ */
+ $function = <<<'JS'
+ ( appleOSLabel ) => {
+ if ( navigator.platform.startsWith("Mac") || navigator.platform === "iPhone" || navigator.platform === "iPad" ) {
+ document.querySelector( '#wp-admin-bar-command-palette .ab-label kbd' ).textContent = appleOSLabel;
+ }
+ }
+ JS;
+ $script = sprintf(
+ '( %s )( %s );',
+ $function,
+ wp_json_encode( $shortcut_labels['appleOS'], JSON_HEX_TAG | JSON_UNESCAPED_SLASHES )
+ );
+ $script .= "\n//# sourceURL=" . rawurlencode( __FUNCTION__ );
$wp_admin_bar->add_node(
array(
'id' => 'command-palette',
@@ -967,6 +989,7 @@ function wp_admin_bar_command_palette_menu( WP_Admin_Bar $wp_admin_bar ): void {
'meta' => array(
'class' => 'hide-if-no-js',
'onclick' => 'wp.data.dispatch( "core/commands" ).open(); return false;',
+ 'html' => wp_get_inline_script_tag( $script ),
),
)
);