Heute morgen wurde WordPress 3.3 RC 2 veröffentlicht. Somit ist WordPress 3.3 einen sehr großen Schritt in Richtung Release gegangen. Für Entwickler bedeutet das testen und eventuelles umbauen der eigenen Plugins und Themes. Die wichtigsten Änderungen haben wir hier für euch zusammen gefasst.

Die neue Admin Bar

Mit WordPress 3.3 wurde eine völlig neue Admin-Bar eingeführt. Dafür wurde die “alte” Admin-Bar sehr stark modifiziert und dauerhaft in das Layout im Backend integriert; kein einfaches Abschalten via Userrechten mehr.. Bisher hinzugefügte oder gelöschte Admin-Bar-Menüeinträge über die Methoden in $wp_admin_bar->menu->... werden nicht mehr berücksichtigt. Dafür gibt es für den Entwickler einige neue Funktionen.

  • Hinzufügen eines Menüpunktes: add_node( $args ) oder add_menu( $args ) (add_menu ist ein alias für add_node)
  • Löschen eines Menüpunktes: remove_node( $args ) oder remove_menu( $args ) ( remove_menu ist ein alias für remove_node )
  • Einstellungen eines Menüpunktes bekommen: get_node( $id )
  • Einstellungen einer Menügruppe bekommen: get_nodes( $args )
  • Eine Menügruppe erstellen, welche Menüpunkte in sich einschließt: add_group( $args )

Die Argumente und Filter sind recht vielfältig und können am Besten in der Quelldatei nachgelesen werden. Über den Hook ‘admin_bar_menu’ kann man sich übrigens an die Admin-Bar dran hängen. Dabei wird das Objekt $wp_admin_bar übergeben, welche die oben beschriebenen Methoden enthält.

Im Übrigen wurde der Hook admin_user_info_links entfernt, da das “Willkommen, $user” Menü komplett in die Admin-Bar gewandert ist.

jQuery und JavaScript

WordPress 3.3 führt neue jQuery Bibliotheken ein. So wurde jQuery auf die Version 1.7.1 angehoben. Das kann einige JavaScript-Teile außer Gefecht setzen. Die einzige Möglichkeit das raus zu finden, ist Testen und die entsprechende jQuery-Dokumentation zu lesen.

Ebenso wurden die jQueryUI auf Version 1.8.16 gebracht und nun auch alle weiteren Tools wie Effekte oder Widgets implementiert. Das macht die Entwicklung von Features mit jQueryUI einfacher, da man keine externen Bibliotheken mehr einbinden muss. Auch hier gilt Testen und die jQueryUI-Dokumentation lesen.

Der WordPress Editor lässt sich nun ganz einfach über die Funktion wp_editor( $content, $editor_id, $args ) in Plugins einbinden. Ohne viel “Gefrickel” sollte es nun möglich sein, den internen WordPress-Editor zu verwenden. Ein Blick in die API hilft aber auf jeden Fall.

Als neuer Medien-Uploader dient das Projekt Plupload. Entsprechend entfällt die komplette API für den Flash-Uploader, jedoch kann der neue Uploader über die API ( media_upload_form() ) ohne große Probleme in seine eigenen Plugins eingebunden werden; zu beachten sind die entsprechenden Filte.

Bei den Quicktags gab es einen kompletten Rewrite. Der Code war extrem veraltet und konnte nicht mehr genutzt werden. Die entsprechende Codex-Seite wird gerade angepasst. Solange sind die Änderung in den Tickets nachzulesen.

is_main_query() – eine neue Wunderwaffe?

In WordPress ist es mittlerweile üblich, dass mehrere Queries in einem Theme verwendet werden. Manchmal benötigt man jedoch den Hauptquery. Über den Filter pre_get_posts lässt sich jetzt mit der Methode is_main_query() ohne größere Umstände prüfen, ob der aktuelle Query auch wirklich der Haupt-Query, der aus $wp_the_query, ist. Mehr Informationen gibt es in diesem Ticket.

Hilfe und Options API

Mit WordPress 3.3 wird eine komplett neue API für die Hilfen pro Seite im Backend angeboten. Die Funktion add_contextual_help() erhält den deprecated-Status und sollte bis zur Version 3.4 aus den Plugins und Themes verschwunden sein.

Dafür kann man nun über einen load-{$pagenow}-Hook und der Methode add_help_tab() aus dem get_current_screen() Funktionsobjekt recht einfach seine Hilfe-Bereiche zusammen bauen. Um bestehende Core-Seiten mit weiteren Hilfe-Texten zu versehen, sollte man den Hook admin-head-{$pagenow} nutzen. Ein ausführliches Beispiel gibt es im englischen WordPress Development Blog.

Und wer alles ganz genau wissen möchte, für den gibt es hier den aktuellen Diff zwischen der Version 3.2.1. und dem aktuellen Entwicklungsstand.