Adds the command palette trigger button.
Description
Displays a button in the admin bar that shows the keyboard shortcut for opening the command palette.
Parameters
$wp_admin_barWP_Admin_Barrequired- The WP_Admin_Bar instance.
Source
function wp_admin_bar_command_palette_menu( WP_Admin_Bar $wp_admin_bar ): void {
if ( ! is_admin() || ! wp_script_is( 'wp-core-commands', 'enqueued' ) ) {
return;
}
$shortcut_labels = array(
'appleOS' => _x( '⌘K', 'keyboard shortcut to open the command palette' ),
'default' => _x( 'Ctrl+K', 'keyboard shortcut to open the command palette' ),
);
$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(
'<span class="ab-icon" aria-hidden="true"></span><span class="ab-label"><kbd>%s</kbd><span class="screen-reader-text"> %s</span></span>',
$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'
( applePattern, appleOSLabel ) => {
if ( ! ( new RegExp( applePattern, 'i' ) ).test( navigator.userAgent ) ) {
return;
}
const kbd = document.querySelector( '#wp-admin-bar-command-palette .ab-label kbd' );
if ( kbd ) {
kbd.textContent = appleOSLabel;
}
}
JS;
$script = sprintf(
'( %s )( %s, %s );',
$function,
wp_json_encode( $apple_pattern, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ),
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',
'title' => $title,
'href' => '#',
'meta' => array(
'class' => 'hide-if-no-js',
'onclick' => 'wp.data.dispatch( "core/commands" ).open(); return false;',
'html' => wp_get_inline_script_tag( $script ),
),
)
);
}
Changelog
| Version | Description |
|---|---|
| 7.0.0 | Introduced. |
User Contributed Notes
You must log in before being able to contribute a note or feedback.