Für Menschen · Seien Sie begeistert und Sie werden begeistern !

In einer der letzten Beiträge habe ich für die Autoren von Plugins schon erklärt, wie ich Möglichkeiten ab Version 2.7 von WordPress nutze, um das Backend zu bereichern und an die Möglichkeiten anzupassen. Dabei kam es in den Kommentaren schon zur Frage, wie man denn eine Icon für Menupunkte, Top-Level, übergeben kann. Im Kommentar habe ich dabei nur sehr kurz eine Möglichkeit geschildert, die so funktioniert aber aus meiner Sicht besser und komfortabler für den User geht. Daher nun also eine ausführliche Lösung mit dem Hovereffekt für das Icon.
add_menu_page()Die Funktion add_menu_page() existiert seit beginn von WordPress und hat nun ab Version 2.7 einen Parameter mehr – $icon_url.
add_menu_page( $page_title, $menu_title, $access_level, $file, $function = '', $icon_url = '' )
Dieser Parameter kann entweder einen Pfad zum Icon übergeben oder einen div, der dann via CSS angesprochen wird. Im weiteren möchte ich den Weg via CSS zeigen, weil man so die Möglichkeit des Hover-Effekt nutzen kann, der ab Version 2.7 von WordPress Standard ist und die Benutzerführung sehr angenehm gestaltet.
Im folgenden ist ein kleines Beispiel zum Nachvollziehen. Dabei habe ich das Plugin wie folgt erstellt und im Ordner /plugins/ der WP-Installation abgelegt.
→ plugins
→ test
⊥→ css
⊥→ style.css
⊥→ images
⊥→ fb_menu.png
⊥→ test.php
Im Plugin gibt es dann die folgende Funktion um den Menu-Punkt im Top-Level Bereich zu erzeugen. Dabei wird als letzter Parameter der Wert div übergeben.
Im Anschluss wird die Funktion via Hook aufgerufen, so dass der Menupunkt erzeugt wird und der Inhalt der Funktion zur Verfügung steht.
function add_menu_page_in_27() {
add_menu_page(__('Test', 'test'), __('Test Description', 'test'), 9, basename(__FILE__), '', 'div');
}
add_action('admin_menu', 'add_menu_page_in_27');
Nun steht das HTML im backend, ein Icon ist damit aber noch nicht da und so nutzen wir die Möglichkeiten via CSS und erzeugen je nach Effekt das entsprechende Icon. Dazu nutze ich die Möglichkeit der CSS Sprites, die ich im Artikel „CSS Sprites einfach erklärt“ näher erläutere.

Als Icon lege ich dabei im Plugin eine Datei ab, die beiden Zustände enthält, siehe Abbildung.
Das zugehörige CSS sieht in meinem Beispiel wie folgt aus, welches ich im Ordner css des Plugins ablege und im Anschluss aufrufe.
Dabei wird das ID für den Menupunkt aus dem Namen der Datei erstellt – toplevel_page_test = toplevel_page_ + test.php.
#adminmenu #toplevel_page_test div.wp-menu-image {
background: transparent url('../images/fb_menu.png') no-repeat scroll -1px -33px;
}
#adminmenu #toplevel_page_test:hover div.wp-menu-image,
#adminmenu #toplevel_page_test.wp-has-current-submenu div.wp-menu-image,
#adminmenu #toplevel_page_test.current div.wp-menu-image {
background: transparent url('../images/fb_menu.png') no-repeat scroll -1px -1px;
}
wp_enqueue_style( 'test_css', plugins_url( $path = '/test/css/style.css'), array() );
Damit steht eine saubere und übersichtliche Lösung bereit, die auch in kleineren Funktionen integriert werden kann, in dem man sie auf Basis der WP-Version abfragt.
if ( version_compare( $wp_version, '2.6.999', '>' ) ) {
// ab Version 2.6.999
} else {
// kleiner Version 2.6.999
}
Ist die Arbeit nicht 1 Euro wert?
Jede Spende wird dankbar angenommen und ermöglicht das weitere Arbeiten an freier Software.
Möchtest du mehr oder anders spenden, so besuche meine Wunschliste.
Download als zip-Datei: mymenu27_test.zip - 1 kByte
händischer Spam:
Beachte die Kommentarregeln, jede Form von versuchtem Spam wird gelöscht. Warum und wieso steht in einem meiner Beiträge.
Bezug auf Textstellen:
Du kannst direkt bezug auf Textstellen im Beitrag nehmen. Dazu muss lediglich der Bereich im Artikel markiert werden; daraufhin erscheint ein Button, der den markierten Text in das Kommentarfeld übernimmt und als Zitat auszeichnet. Die Funktion ist nur bei aktivem JavaScript nutzbar.
xHTML:
Du kannst folgende Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <blockquote cite=""> <code> <pre> <em> <strong> <strike> <ul> <ul> <li>
Achte darauf, wenn du Code im Kommentar hinterlegen willst, dann muss der Code maskiert sein. Dann wird er nicht interpretiert. Der Code muss mit Hilfe von HTML-Entities dargestellt werden, d.h. dass man z.B. < als < und > als > einfügt.
E-Mail-Benachrichtigung bei neuen Kommentaren ?
Wenn der Haken in der Checkbox gesetzt ist, dann wirst du über neue Kommentare vie E-Mail informiert. Der Versand erfolgt nur, wenn du die URL in der Bestätigungs-E-Mail genutzt hast oder schon Abonnent hier im Blog bist.
Kommentar erscheint nicht:
Alle Kommentare werden manuell geprüft, freigegeben und nach Möglichkeit beantwortet. Bitte um etwas Geduld und Nachsicht.
Identifikationsbilder (Avatare):
Auf Gravatar.com kann man sich mit seiner E-Mail-Adresse registrieren und ein Bild hochladen, dann erscheint dieses Gravatar hier und in vielen weiteren Blogs.
Spamschutz:
Das Kommentarformular ist mit einem Spamschutz ausgerüstet. Solltest du diesen Artikel ohne JavaScript besuchen und kommentieren wollen, so muss du die Frage beantworten und das jeweilige Wort in das Textfeld eingeben.
bueltge.de [by:ltge.de] wird von Frank Bültge geführt, administriert und gestaltet. Alle Inhalte sind persönlich von mir ausgewählt und erstellt, nach bestem Gewissen und Können, was die Möglichkeit von Fehlern nicht ausschließt.
Das Weblog wird angetrieben von WordPress und aktuell gibt es 971 Beiträge, 19462 Kommentare in 14 Kategorien und 459 Tags.
Das Blog wird liebevoll mit xHTML & CSS in Handarbeit gestaltet. Erstellt mit ♥ zum Befüllen und Erhalten.
Design und Code ist unter Copyright
© 2001 - 2012 bueltge.de [by:ltge.de]
8. Dezember 2008 um 09:55
Wow. Sehr sehr chic
Das wird direkt eingebaut. Vielen Dank für die Info und das Tutorial.
8. Dezember 2008 um 13:24
Danke für die Information, kann ich gut mal gebrauchen
10. Dezember 2008 um 00:27
10. Dezember 2008 um 06:58
Funktioniert alles soweit, aber da ich mich (noch) gar nicht mit WP-Plugins beschäftigt habe, war ich ein bisschen verwirrt, als da auf einmal ein Fehler auftauchte:
Warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'function_test' was given in C:\web\htdocs\cms\wordpress\wp-includes\plugin.php on line 339Ist das egal oder war das nicht gewollt? Wollte es nur mal gesagt haben, soll ja eher auch die Funktion des Icons in WP 2.7 erläutern
10. Dezember 2008 um 07:44
@Denis: nein, ein Fehler soll natürlich nicht auftauchen. In meinen Tests unter Version 2.7 läuft es wunderbar.
10. Dezember 2008 um 07:59
Ich benutze eigentlich auch die neueste Version soweit ich informiert bin. (Screenshot unten rechts)
http://img20.myimg.de/wpplgn9075c.jpgMich störts aber nicht.
11. Dezember 2008 um 00:30
Hat mir sehr geholfen.
Um das ganze perfekt zu machen, kann man noch per $userdata->admin_color zwischen einem Icon für das graue und blaue Thema unterscheiden.
11. Dezember 2008 um 07:48
14. Dezember 2008 um 02:01
Ich persönlich will ja gar keinen eigenen Registereintrag im Menü von WP mit meinem Plugin. Wenn jeder Plugin-Programmierer seinen eigenen Eintrag auf der obersten Ebene haben wollte, dann hätten wir bald ein Chaos im Admin-Bereich von WP.
Mein Problem ist ein ganz anderes.
Wie jeder Fortgeschrittene weiß kann man mit dem Befehl "add_menu_page" eine Seite dem Admin-Bereich hinzufügen. Ich hänge mich da immer in das Plugin-Register rein. Vorweg mein Plugin bekommt das Zugriffslevel 6 (also Redakteure / Herausgeber und Admins). Wenn nun im neuen WP 2.7 ein Herausgeber einloggt, dann erscheint natürlich nur der Name meines Plugins im Plugin-Register, denn für die anderen Funktionen des Plugin-Bereichs reichen die Rechte des Herausgebers nicht aus. Da momentan nur ein Eintrag im Plugin-Register vorhanden ist, erscheint auf der rechten Seite auch gleich die Seite meines Plugins.
Das Problem tritt auf, wenn man nun explizit auf den Namen meines Plugins klickt (was bei mehreren installierten Plugins eventuell notwendig wäre). Dann bekomme ich folgende Mitteilung "Ihre Zugriffsrechte reichen nicht aus, um diese Seite zu anzuzeigen.".
Und ich denke dann nur: "Was soll, denn das?" Unter WP 2.6.5 geht das doch auch ohne Problem.
Kann jemand helfen?
14. Dezember 2008 um 13:13
@Bernhard: ich hooke die neuen Seiten in den Hook
admin_menu, denn der baut die Variablen mit dem Array auf und prüft auf die Zugriffslevel.14. Dezember 2008 um 14:13
Ich mache es immer so:
add_action('admin_menu', 'myd_setMenu');
function myd_setMenu() {
[...]
add_submenu_page('plugins.php', '...', '...', 6, basename(__FILE__), 'myd_menuUebersicht');
[...]
}
function myd_menuUebersicht() {
[...]
}
Nur tritt jetzt im neuen WP 2.7 ja leider dieser Fehler im Admin-Menü auf. Da habe ich aber auch keinen Einfluss drauf, denn das Register wird ja von WP dynamisch generiert.
Hmm... Vielleicht verschiebe ich das Plugin in ein Register, dass schon mit niedrigeren Zugriffsrechten verfügbar ist. Irgendwie fehlt in der neuen Version etwas wie "Verwalten"...
14. Dezember 2008 um 14:36
@Bernhard: ich frage meist noch die Rechte ab:
if ( current_user_can('manage_options') ) {So stelle ich sicher, dass man auch bei veränderten Userrechten es nur darf, wenn man explizit das jeweilige Objekt darf. Eine Übersicht der Rechte findest du im Codex.14. Dezember 2008 um 15:41
Ich habe es jetzt mit einer Prüfung der installierten WP-Version erledigt. Wenn höher wie 2.699 (sprich ab 2.7) dann hänge ich das Plugin unter das neue Register-Blatt "Werkzeuge" (tools.php) und für ältere Versionen bleibt alles beim alten (plugins.php). Und weil das neue Registerblatt "Werkzeuge" auch für Herausgeber zugänglich ist, gibt es da auch keine Probleme mit den Rechten.
15. Dezember 2008 um 14:10
Seit WP2.7 wird es mit den meisten mobilen Browsern leider unmöglich, die Admin-Konsole zu nutzen. Viele Buttons und Optionen reagieren nicht usw. Schade, ich habe oft über Handy auf den Admin-Bereich Zugriff genommen, um z.B. Spam auszumustern usw.
Damit ist nun Essig.
Ein "Simple"-HTML-Plugin für die Admin-Konsole ist aus meiner Sicht die einzige Lösung.
Ob sowas machbar ist?
15. Dezember 2008 um 19:39
Ist sicher machbar, diverse Plugins ermöglichen das schon, mal suchen im Verzeichnis bei WP.
26. Dezember 2008 um 11:20
Vielen Dank für die netten Infos
5. Januar 2009 um 22:45
Gibt es eigentlich die Möglichkeit, die Reihenfolge, bzw die Position eines Menüpunktes zu bestimmen? Zum Beispiel, dass ein neues Top Level Menü direkt unter Dashboard erzeugt wird?
6. Januar 2009 um 00:26
@ocean90: so weit mir bekannt ist nicht, das regelt WordPress.