From 465f98c37cbbb31ffcd1aac707466b68be0c2f91 Mon Sep 17 00:00:00 2001 From: Matt Gros <3311227+mpge@users.noreply.github.com> Date: Sun, 26 Apr 2026 23:34:19 -0400 Subject: [PATCH] feat(admin): use Escalated brand chevron icon in wp-admin sidebar Replaces the generic dashicons-tickets-alt with the actual Escalated double-chevron mark, embedded as an inline-SVG data URI so wp-admin's own CSS can recolor it via currentColor across hover/active states. --- assets/images/menu-icon.svg | 4 ++++ includes/Admin/class-admin-menu.php | 19 ++++++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 assets/images/menu-icon.svg diff --git a/assets/images/menu-icon.svg b/assets/images/menu-icon.svg new file mode 100644 index 0000000..7fee42d --- /dev/null +++ b/assets/images/menu-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/includes/Admin/class-admin-menu.php b/includes/Admin/class-admin-menu.php index 5b1701e..90903e7 100644 --- a/includes/Admin/class-admin-menu.php +++ b/includes/Admin/class-admin-menu.php @@ -18,7 +18,7 @@ public function add_menus(): void 'escalated_ticket_view', 'escalated', [new Admin_Tickets, 'render_list'], - 'dashicons-tickets-alt', + self::menu_icon_data_uri(), 30 ); @@ -35,6 +35,23 @@ public function add_menus(): void add_submenu_page('escalated', __('Settings', 'escalated'), __('Settings', 'escalated'), 'escalated_settings_view', 'escalated-settings', [new Admin_Settings, 'render']); } + /** + * Inline-SVG data URI for the wp-admin sidebar menu icon. Using a + * data URI rather than a file URL keeps the icon working on + * installs that lock down the uploads dir from script access. The + * SVG uses `currentColor` so wp-admin's own CSS can swap it + * between active/inactive sidebar states without two assets. + */ + private static function menu_icon_data_uri(): string + { + $svg = file_get_contents(ESCALATED_PLUGIN_DIR.'assets/images/menu-icon.svg'); + if ($svg === false) { + return 'dashicons-tickets-alt'; + } + + return 'data:image/svg+xml;base64,'.base64_encode($svg); + } + public function enqueue_assets(string $hook): void { // Only enqueue on Escalated pages