WordPress 3.8 führte im Kern das Plugin MP6 ein, das unter anderem eine Ikone namens Dashicons verwendet, um Schriften im Dashboard anzuzeigen.
Nun ist bekannt, dass register_post_type über ein Argument verfügt 'menu_icon'
, mit dem ein benutzerdefiniertes Symbol für den CPT-Administratormenüeintrag angegeben werden kann.
In meinen Plugins / Themes verwende ich dieses Argument oft mit meinen benutzerdefinierten Symbolbildern, die normalerweise dunkel sind, weil das 3.8-Admin-Menü einen hellen Hintergrund hatte. Mit dem standardmäßigen dunklen Menühintergrund in WP 3.8 werden meine Symbole fast unsichtbar.
Abgesehen davon denke ich, dass es cool sein wird, die neuen Dashicons für mein CPT zu verwenden.
Nach einigen Recherchen weiß ich, dass ich einfach das CSS von Dashicons verwenden kann, so etwas wie
#menu-posts-mycpt div.wp-menu-image:before { content: "\f226"; }
Wenn Sie jedoch sowohl das 'menu_icon'
Argument von register_post_type
als auch das vorherige CSS verwenden, werden beide Symbole in WP 3.8 und ein Symbol + ein seltsames Zeichen in WP 3.8- gedruckt. Bei 'menu_icon'
älteren Versionen wird ohne Argument das Standardsymbol verwendet.
Ich weiß , ich kann bedingt hinzufügen 'menu_icon'
in register_post_type
für WP 3.8- Versionen und bedingt vorherigen CSS für WP hinzufügen 3.8+, aber:
- Das bedeutet, dass für jedes registrierte CPT Code (2 bedingte Anweisungen) hinzugefügt werden muss. Das Aktualisieren von Plugins / Themes ist also eine harte Arbeit
- Es scheint mir eher ein Workaround als eine elegante Lösung
Fragen sind also:
Ist es möglich, Dashicons CSS für WP 3.8+ zu verwenden und benutzerdefinierte Images zu verwenden, die über 'menu_icon'
param für frühere Versionen auf "einfachere" Weise eingerichtet wurden, ohne dass für jedes registrierte CPT 2 Bedingungen hinzugefügt werden müssen?
Und wenn ja, ist das auf irgendeine automatische Weise direkt register_post_type
ohne zusätzlichen Code möglich?
quelle
menu_icon
, können Sie die Bild-URL für frühere Versionen nicht verwenden ... aber wen interessiert das? :)Ganz einfach:
register_post_type()
Lies einfach den relevanten Teil des phpDocBlocks und verwende dann das richtige Argument fürmenu_icon
: Ddashicon-groups
data:image/svg+xml;base64,
.'none'
verlassendiv.wp-menu-image
leer, so kann ein Symbol über CSS hinzugefügt werden.quelle
svg-painer.js
kann die Kernbibliothek js, die für die Farbänderung verwendet wird, sehr zeitaufwändig sein, wenn das Symbol "komplexer" ist als Standard-Dashicons. * Die dritte Option (leeres Symbol) gilt nicht nur für WP 3.8+, sondern seit langer Zeit ... und die Verwendung von CSS ist etwas, das ich vermeiden möchte (laut Frage). Also +1 für das Zusammenstellen aller Optionen, aber ich denke, die akzeptierte Antwort beantwortet meine Frage bereits. PS froh, diesen Diamanten in der Nähe Ihres Namens zu sehen :)svg-painter.js
Datei. Wusste es nicht, da ich es noch nicht ausprobiert habe.Ich antworte mir selbst, weil ich mir heute die beiden Fragen gestellt habe und einige Zeit damit verbracht habe, eine Antwort zu finden. Sobald ich eine Lösung gefunden habe, möchte ich sie teilen, aber jede andere Lösung wird sehr geschätzt und ich bin bereit, jede Lösung zu akzeptieren, die ich besser als meine gefunden habe. Änderungen und Verbesserungen an meiner Lösung sind ebenfalls erwünscht.
Bearbeiten
Nach der Antwort von Rarst habe ich den Code bearbeitet. Die Funktion verwendet jetzt Standard-Dashicons-Klassen, ermöglicht jedoch auch die Angabe einer alten Bild-URL im
menu_icon
Argument und einer brandneuen Dashicons-Klasse immenu_dashicon
Argument.Arbeitsablauf
Zuerst dachte ich mir, dass
register_post_type
eine Aktionregistered_post_type
ausgelöst wird, die die übergebenen Argumente an Hook-Funktionen übergibtregister_post_type
, ohne sie zu filtern. Auf diese Weise können benutzerdefinierte Argumente für diese Funktionen erstellt werden.Also habe ich beschlossen, das Argument
'menu_dashicon'
zu übergeben, um ein benutzerdefiniertes Dashicon zu übergeben.Danach überlegte ich, eine Klasse zu erstellen, die auf dieses Argument hört und das Symbol in einer Klassenvariablen speichert. Die gleiche Klasse kann dafür verantwortlich sein
$menu
Array auf den richtigen Hook und:'menu_icon'
und hinzugefügt wurden'menu_dashicon'
Fügen Sie den Inline-Stil entsprechend dem hinzu, was über den Parameter hinzugefügt wirdIch erstelle den Code in einer einzigen Datei, auf diese Weise kann er einfach in ein beliebiges Theme / Plugin eingefügt oder sogar als MU-Plugin verwendet werden. Danach kann man einfach das brandneue
'menu_dashicon'
Argument in jedem installierten Theme und / oder Plugin verwenden.Ich habe auch einen minimalen Plugin-Header hinzugefügt, mit dem es als eigenständiges Plugin verwendet werden kann, aber wahrscheinlich ist dies die weniger nützliche Methode.
Wie benutzt man
Innerhalb übergeben Sie
register_post_type
einfach das'menu_dashicon'
Argument mit dem Wert der Dashicon-Klasse ( ohne Präfix 'dashicons-'):Das ist alles. Ruft den Klassennamen des Dashicons-Symbols von seiner Site ab .
Also hier der Code:
Es ist auch als Gist erhältlich
Zwei CPTs: "Ideen" und "Galerie" mit Dashicons. Beachten Sie den automatischen Farbwechsel mit verschiedenen Admin-Farbschemata.
quelle
Ich habe einfach diese Zeile zum Code hinzugefügt, der den benutzerdefinierten Beitragstyp registriert:
Hier ist der vollständige Code
Es muss kein CSS hinzugefügt werden.
quelle