$menu_item ) { if ( ! is_array( $menu_item ) || ! isset( $menu_item[2] ) || ! is_string( $menu_item[2] ) ) { continue; } $classes = isset( $menu_item[4] ) && is_string( $menu_item[4] ) ? $menu_item[4] : ''; $menu[ $index ][4] = trim( $classes . ' ' . self::identity_class( $menu_item[2] ) ); } return $menu; } /** * Enqueues AdminGrip only on normal site-admin screens with a menu. * * @return void */ public function enqueue_assets() { global $menu; if ( ! Admin_Menu_Order::is_supported_context() || ! is_array( $menu ) || empty( $menu ) ) { return; } $slug_map = array(); foreach ( $menu as $menu_item ) { if ( is_array( $menu_item ) && isset( $menu_item[2] ) && is_string( $menu_item[2] ) ) { $slug_map[ self::identity_class( $menu_item[2] ) ] = $menu_item[2]; } } wp_enqueue_style( 'admingrip-admin', plugins_url( 'assets/admin.css', ADMINGRIP_FILE ), array(), ADMINGRIP_VERSION ); wp_enqueue_script( 'admingrip-admin', plugins_url( 'assets/admin.js', ADMINGRIP_FILE ), array( 'jquery', 'jquery-ui-sortable', 'wp-a11y' ), ADMINGRIP_VERSION, true ); wp_localize_script( 'admingrip-admin', 'admingripSettings', array( 'ajaxUrl' => admin_url( 'admin-ajax.php' ), 'nonce' => wp_create_nonce( 'admingrip_menu_order' ), 'slugMap' => $slug_map, 'actions' => array( 'save' => 'admingrip_save_order', 'reset' => 'admingrip_reset_order', ), 'i18n' => array( 'arrange' => __( 'Arrange Menu', 'admingrip' ), 'done' => __( 'Done', 'admingrip' ), 'reset' => __( 'Reset', 'admingrip' ), 'saving' => __( 'Saving…', 'admingrip' ), 'saved' => __( 'Saved', 'admingrip' ), 'couldNotSave' => __( 'Could not save', 'admingrip' ), 'resetConfirm' => __( 'Reset your admin menu to the default order?', 'admingrip' ), /* translators: %s: visible admin menu item name. */ 'moveLabel' => __( 'Move %s', 'admingrip' ), /* translators: 1: visible admin menu item name, 2: one-based menu position. */ 'moved' => __( '%1$s moved to position %2$d.', 'admingrip' ), 'instructions' => __( 'Menu arrangement mode. Use drag handles or Alt plus Arrow Up or Arrow Down.', 'admingrip' ), 'saveSucceeded' => __( 'Menu order saved.', 'admingrip' ), 'saveFailed' => __( 'Menu order could not be saved. The previous order was restored.', 'admingrip' ), 'resetFailed' => __( 'Menu order could not be reset.', 'admingrip' ), ), ) ); } /** * Derives a CSS-safe identity while retaining exact slugs in the map. * * @param string $slug Exact WordPress menu slug. * @return string */ private static function identity_class( $slug ) { return 'admingrip-slug-' . hash( 'sha256', $slug ); } }