Changeset 3414594
- Timestamp:
- 12/08/2025 05:37:56 PM (4 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
filikod/trunk/includes/admin/class-filikod-admin.php
r3413113 r3414594 23 23 add_action( 'admin_menu', array( $this, 'add_admin_menu' ) ); 24 24 add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_assets' ) ); 25 add_action( 'admin_footer', array( $this, 'inject_menu_icon_script' ) ); 25 26 } 26 27 … … 65 66 */ 66 67 public function enqueue_admin_assets( $hook ) { 67 // Charger uniquement sur les pages du plugin 68 // Charger le CSS sur toutes les pages admin pour que l'icône soit visible partout 69 // C'est nécessaire car le menu est visible sur toutes les pages admin 70 wp_enqueue_style( 71 'filikod-admin', 72 FILIKOD_PLUGIN_URL . 'assets/css/admin.css', 73 array(), 74 FILIKOD_VERSION 75 ); 76 77 // Charger uniquement le JS complet sur les pages du plugin 68 78 // Le hook pour le menu principal est 'toplevel_page_filikod' 69 79 // Le hook pour les sous-menus est 'filikod_page_filikod-settings' … … 77 87 return; 78 88 } 79 80 // CSS81 wp_enqueue_style(82 'filikod-admin',83 FILIKOD_PLUGIN_URL . 'assets/css/admin.css',84 array(),85 FILIKOD_VERSION86 );87 89 88 90 // JavaScript … … 127 129 ); 128 130 129 // Ajouter le script inline pour injecter l'icône SVG du menu 131 // Ajouter le script inline pour injecter l'icône SVG du menu (fallback pour les pages du plugin) 130 132 $svg = $this->get_svg_icon(); 131 133 $inline_script = sprintf( … … 139 141 }); 140 142 })(jQuery);", 141 wp_json_encode( $svg )143 wp_json_encode( $svg, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT ) 142 144 ); 143 145 wp_add_inline_script( 'filikod-admin', $inline_script ); 144 146 } 145 147 148 /** 149 * Injecter l'icône SVG du menu via JavaScript 150 * Utilise admin_footer pour s'exécuter sur toutes les pages admin 151 * Conforme aux bonnes pratiques WordPress 152 */ 153 public function inject_menu_icon_script() { 154 // Vérifier que le menu existe avant d'injecter le script 155 global $menu; 156 $menu_exists = false; 157 if ( is_array( $menu ) ) { 158 foreach ( $menu as $menu_item ) { 159 if ( isset( $menu_item[2] ) && 'filikod' === $menu_item[2] ) { 160 $menu_exists = true; 161 break; 162 } 163 } 164 } 165 166 if ( ! $menu_exists ) { 167 return; 168 } 169 170 $svg = $this->get_svg_icon(); 171 // Utiliser wp_json_encode avec les flags appropriés pour sécuriser le SVG 172 $svg_json = wp_json_encode( $svg, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT ); 173 ?> 174 <script type="text/javascript"> 175 (function() { 176 function injectFilikodIcon() { 177 var menuIcon = document.querySelector('#toplevel_page_filikod .wp-menu-image'); 178 if (menuIcon && !menuIcon.querySelector('svg')) { 179 menuIcon.innerHTML = <?php echo $svg_json; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped - wp_json_encode échappe déjà correctement ?>; 180 } 181 } 182 // Exécuter immédiatement et après le chargement du DOM 183 if (document.readyState === 'loading') { 184 document.addEventListener('DOMContentLoaded', injectFilikodIcon); 185 } else { 186 injectFilikodIcon(); 187 } 188 // Exécuter aussi après un court délai pour s'assurer que le menu est rendu 189 setTimeout(injectFilikodIcon, 100); 190 })(); 191 </script> 192 <?php 193 } 146 194 147 195 /**
Note: See TracChangeset
for help on using the changeset viewer.