WordPress 3.8 a introduit dans le noyau le plugin MP6 qui utilise entre autres une police iconique appelée Dashicons pour afficher les polices dans le tableau de bord.
Maintenant, il est bien connu que register_post_type a un argument 'menu_icon'
qui permet de spécifier une icône personnalisée pour l'entrée du menu d'administration CPT.
Dans mes plugins / thèmes, j'utilise souvent cet argument avec mes images d'icônes personnalisées qui sont normalement sombres car avant le menu d'administration de la version 3.8 avait un fond clair. Avec l'arrière-plan du menu sombre par défaut dans WP 3.8, mes icônes deviennent presque invisibles.
Cela mis à part, je pense que l'utilisation des nouveaux dashicons pour mon CPT sera cool.
Après quelques recherches, je sais que je peux simplement utiliser le CSS des dashicons, quelque chose comme
#menu-posts-mycpt div.wp-menu-image:before { content: "\f226"; }
Cependant, l'utilisation à la fois de l' 'menu_icon'
argument de register_post_type
et du CSS précédent affichera les deux icônes dans WP 3.8 et une icône + un caractère étrange dans WP 3.8-, et sans utilisation'menu_icon'
argument , sur les anciennes versions, l'icône par défaut est utilisée.
Je sais que je peux ajouter conditionnellement 'menu_icon'
dans register_post_type
pour WP 3.8- versions et ajouter conditionnellement précédente pour WP css supérieure à 3,8, mais:
- cela implique d'ajouter du code (2 instructions conditionnelles) pour chaque CPT enregistré, donc la mise à jour des plugins / thèmes est un travail assez difficile
- il me semble plus une solution de contournement qu'une solution élégante
Donc, les questions sont:
Est-il possible d'utiliser dashicons css pour WP 3.8+ et d'utiliser une configuration d'image personnalisée via 'menu_icon'
param pour les versions précédentes d'une manière "plus simple" qui n'implique pas d'ajouter 2 conditionnelles pour chaque CPT enregistré?
Et, si c'est le cas, est-il possible de le faire de manière automagique directement register_post_type
sans aucun code supplémentaire?
la source
menu_icon
vous ne pouvez pas utiliser l'URL de l'image pour les versions précédentes ... mais qui se soucie du passé? :)Facile: il suffit de lire la partie pertinente du
register_post_type()
phpDocBlock puis d'utiliser le bon argument pourmenu_icon
: Ddashicon-groups
data:image/svg+xml;base64,
.'none'
pour laisserdiv.wp-menu-image
vide, donc une icône peut être ajoutée via CSS.la source
svg-painer.js
, la bibliothèque js de base utilisée pour gérer le changement de couleur, peut prendre beaucoup de temps si l'icône est plus "complexe" que les tirets standard. * La troisième option (icône vide) est valable non seulement pour WP 3.8+, mais depuis longtemps ... et l'utilisation de css est quelque chose que je veux éviter (selon la question). Donc +1 pour avoir rassemblé toutes les options, mais je pense que la réponse acceptée répond déjà à ma question. PS heureux de voir ce diamant près de votre nom :)svg-painter.js
fichier. Je ne le savais pas car je n'ai pas encore essayé.Je me réponds parce qu'aujourd'hui je me suis posé les 2 questions que j'ai postées, et j'ai passé un peu de temps à trouver une réponse. Une fois que j'ai trouvé une solution, je veux la partager, mais toute autre solution est extrêmement appréciée et je suis prêt à accepter toute solution que j'ai trouvée meilleure que la mienne. Les modifications et améliorations apportées à ma solution sont appréciées, voire encouragées.
Éditer
Après la réponse de Rarst, j'ai édité le code. Maintenant, la fonction utilise des classes dashicons standard, mais permet également de spécifier une URL d'image de style ancien dans l'
menu_icon
argument et une toute nouvelle classe dashicons dans l'menu_dashicon
argument.Workflow
Tout d'abord, je pensais que c'était
register_post_type
, déclenche une actionregistered_post_type
, qui passent aux fonctions de hookingregister_post_type
, sans les filtrer, il est donc possible de créer des arguments personnalisés pour ces fonctions.J'ai donc décidé de passer l'argument
'menu_dashicon'
pour passer un dashicon personnalisé.Après cela, j'ai pensé à créer une classe qui écoute cet argument, en enregistrant l'icône dans une variable de classe. La même classe peut être responsable de
$menu
tableau sur le crochet approprié et:'menu_icon'
et'menu_dashicon'
paramJe crée le code dans un seul fichier, de cette façon, il peut être facilement inclus dans n'importe quel thème / plugin ou même utilisé comme plugin MU et après cela, on peut simplement utiliser le tout nouveau
'menu_dashicon'
argument dans chaque thème et / ou plugin installé.J'ai également ajouté un en-tête de plugin minimal qui permet de l'utiliser en tant que plugin autonome, mais c'est probablement la façon la moins utile d'utiliser.
Comment utiliser
À l'intérieur,
register_post_type
passez simplement l''menu_dashicon'
argument avec la valeur de la classe dashicon ( sans le préfixe 'dashicons-'):C'est tout. Obtenez le nom de la classe d'icônes Dashicons sur son site .
Voici donc le code:
Il est également disponible en Gist
Deux CPT: "Idées" et "Galerie" utilisant Dashicons. Notez le changement de couleur automatique avec différents schémas de couleurs d'administration.
la source
J'ai simplement ajouté cette ligne au code qui enregistre le type de message personnalisé:
Voici le code complet
Pas besoin d'ajouter de CSS.
la source