Kein schwarzer Tag: Das ist neu in WordPress 5.6 für Entwickler 🤓

Es ist Black Friday und nun wirklich kein schwarzer Tag. Sondern ein Tag voller Angebote. Mein Plugin SNIP – Das Strukturierte Daten Plugin für WordPress – ist auch wieder mit dabei. Es wurde vom Marketing-Team bei Envato, zu denen CodeCanyon und Themeforest gehört, wieder zu diesem besonderen Event ausgewählt. Es ist deshalb 50% günstiger und nur für eine Woche. Bei CodeCanyon heißt das Event übrigens CyberMonday. Umgerechnet ca. 25€ ist schon fast unverschämt günstig. Wer da nicht zugreift… Selber Schuld 😂

Darüber hinaus erblickt WordPress 5.6 voraussichtlich am 8. Dezember das Licht der Welt. Zeit also mal genauer hinzuschauen, was es alles Neues gibt.

Die WordPress Revue erscheint im neuen Jahr nur noch einmal im Quartal. Dann mit der geballten Ladung WordPress-News.

Ich wünsche Ihnen eine gute Adventszeit und schon vorab einen guten Start ins neue Jahr. Vielen Dank für die Treue in 2020!

Ihr Dipl. Ing. (FH) Florian Simeth

WordPress News

WordPress 5.5.2 hatte leider einen blöden Bug: Das Auto-Update System von WordPress hatte ein paar Seiten von Version 5.5.2 auf Version 5.5.3-alpha aktualisiert. Das wurde in 5.5.3 korrigiert. Zusammen einem kleinen Datenbank-Fix.


PHP 8 ist gestern erschienen. WP 5.6 wurde bereits angepasst, es gibt allerdings ein paar Fallstricke, deswegen sollten Sie diesen Artikel hier an Ihre Entwickler weiterleiten ⚠️


Nicht alle Plugins werden mit PHP 8 kompatibel sein. Ein direkter Umstieg ist also derzeit nicht anzuraten.


Mit dem Rollout von WP 5.6 gilt es wieder die Wünsche zu erfassen: Was soll in WP 5.7 alles hinein? Ein großer Patzen ist ja schon bekannt: Full Site Editing zum Beispiel. Nichtsdestotrotz sollte man seinen Senf mal dazugeben.


Benutzer können sich nun sogenannte Application-Passwörter erstellen. Damit wird der Zugriff auf die REST-API einfacher. Den detaillierten Integration Guide gibt es hier.


Plugin-Auto-Updates war ja schon Bestandteil früherer WP-Versionen. Was nun nachgereicht wird, ist die Auto-Update-Funktion für WordPress selbst. Nach dem Update bleibt alles aber erst einmal so, wie es war: Wichtige Sicherheitsupdates werden automatisch eingespielt. Für größere, automatische Updates (so genannte „Major Updates“) gibt es dann ein freiwilliges Opt-In.

WordPress Update-Dashboard mit freiwilligem Opt-In

Auch am Blockeditor („Gutenberg“) wurde fleißig weiterentwickelt. Die Enwicklungsversionen 8.6 bis 9.2 werden in die neue WP-Version fließen. Ebenfalls alle Fehlerbehebungen aus 9.3 und 9.4. Das hat sich im Detail getan:

  • Gutenberg 8.6:
    • Der Video-Cover-Block lässt sich nun besser Positionieren.
    • Updates bei einigen Block-Vorlagen.
  • Gutenberg 8.7:
    • Viele kleinere Detailverbesserungen.
  • Gutenberg 8.8:
    • Detailverbesserung hinsichtlich der Zugänglichkeit für eingeschränkte Personen sowie im Mobile-Browser.
  • Gutenberg 8.9:
    • Der neue Widget-Bereich ist nicht länger experimentell. (Trotzdem landet er nicht mehr in WP 5.6).
    • Es gibt wieder eine Wörter- und Zeichen-Zählung.
    • Im „Neueste Blogposts“-Block können die Links zu den Featured-Bildern angepasst werden.
    • Der List-Block gibt’s jetzt in Farbe.
  • Gutenberg 9.0:
    • Fokuspunkt war der neue Navigation-Screen.
    • Dazu bekam der Query-Block neue Abfragemöglichkeiten. Man kann nun Suchwörter angeben, nach Autoren und Tags suchen und eine Sortierung angeben.
  • Gutenberg 9.1:
    • Intensive Arbeiten am Widget-Bildschirm.
    • Mithilfe einer theme.json-Datei lässt sich der Block-Editor nun besser kontrollieren.
  • Gutenberg 9.2:
    • Videos können nun mit Untertitel ausgezeichnet werden.
    • Mehrere ausgewählte Blöcke können in einen Spalten-Block umgewandelt werden.
    • Hintergrundmuster für den Cover-Block.

WordPress 5.6 setzt Teil 2 des dreistufigen Plans, jQuery zu erneuern, in die Tat um. WordPress-Nutzer, die zuvor schon Probleme hatten, sollten das Enable jQuery Migrate Helper Plugin installieren. Die ganze Thematik ist nicht ganz unproblematisch. Das Plugin hat schon mehr als 200’000 Installationen.


Neues Default Theme namens „Twenty Twenty One“. Es ist quasi nur eine Art „leeres“ Theme für den Block Editor und seine Funktionen. So sieht’s aus:


Das TwentyTwentyOne Theme hat auch einen DarkMode, der sich über den Customizer einstellen lässt.


Ein neues Plugin Passwordless WP rüstet unser beliebtes CMS mit einer schönen Funktion nach: Login via TouchID oder FaceID.


Auch ein gutes Plugin: Find My Blocks zeigt übersichtlich an, auf welcher Seite man welche Gutenberg-Blöcke nutzt.


Wie oben bereits erwähnt, wird der Neue, auf Blöcken basierende Widget-Screen nicht Teil von WordPress 5.6 sein, sondern auf 5.7 verschoben.

WordPress Entwickler News

Darauf haben wir alle gewartet: PHP 8 ist gestern erschienen. Es ist an der Zeit, die eigenen Themes und Plugins daran anzupassen. Aber Achtung: Nicht alles ist supported. So zum Beispiel die sogenannten Named Parameters. Eine Übersicht, was es in PHP 8 alles Neues gibt, finden Sie hier. Schöne Dinge aus dem Blogpost sind z.B.

Union types:

public function foo(Foo|Bar $input): int|float;

Nullable unions:

public function foo(Foo|null $foo): void;
# Das Wort "null" kann man sich auch sparen. Dafür steht das Fragezeichen:
public function bar(?Bar $bar): void;

Null Coalescing Operator bei Funktionen:

$dateAsString = $startDate ? $startDate->asDateTimeString() : null;
# wird zu:
$dateAsString = $booking->getStartDate()?->asDateTimeString();

Named arguments:

# Folgende Funktion:
function foo(string $a, string $b, ?string $c = null, ?string $d = null) 
{ /* … */ }

# lässt sich auch so aufrufen:
foo(
    b: 'value b', 
    a: 'value a', 
    d: 'value d',
);

Der mixed-Datentyp:

function bar(): mixed {}

Braucht man öfter als gedacht:

# Statt:
if (strpos('string with lots of words', 'words') !== false) { /* … */ }

# geht jetzt auch:
if (str_contains('string with lots of words', 'words')) { /* … */ }

Oder:

str_starts_with('haystack', 'hay'); // true
str_ends_with('haystack', 'stack'); // true

Der WordPress 5.6 Field Guide zeigt im Detail, was sich für Entwickler alles verändert hat. Unten noch einmal aufgelistet, was für Entwickler besonders wichtig ist:


Die BlockAPI liegt in Version 2 vor. Hauptziel war es, den DOM-Baum des Editors leichtgewichtiger zu machen. Um die neue API zu nutzen, muss man diese explizit aktivieren:

registerBlockType( name, { apiVersion: 2 } );

Eine weitere API heißt createBlocksFromInnerBlocksTemplate. Damit lassen sich Blöcke aus InnerBlocks-Templates erstellen.


Blöcke können viele weitere „Block-Supports“ angeben. Unter anderem für Hintergrundfarben, Verläufe, Schriftgröße und viele mehr. So muss man diese Funktionen nicht selbst in die Blöcke integrieren. Allerdings muss das aktive Theme das (über ein Opt-In) unterstützen.


Im Editor selbst wurde das Styling verändert. Größenangaben nutzen jetzt relative statt absolute Werte. Zuvor wurden hart gecodete Pixelwerte benutzt. Dies führt also möglicherweise dazu, dass eure Blöcke nicht mehr passend aussehen.


Die Reusable-Blocks-API ist jetzt ein separates Paket unter @wordpress/reusable-blocks. Zuvor war es Teil von @wordpress/editor.


Die Handhabung von Toolbar-Komponenten hat sich verändert. Die Toolbar-Komponente sollte nicht (mehr) zur Gruppierung genutzt werden. Dazu gibt es jetzt die ToolbarGroup-Komponente.


Teil 2 des dreistufigen Plans, jQuery zu erneuern, wird umgesetzt. So findet man in WP 5.6 nun die jQuery Version 3.5.1 mit jQuery Migrate 3.3.2. Es wird empfohlen, SCRIPT_DEBUG in der wp-config.php zu aktivieren um genauere nachvollziehen zu können, wo es Probleme mit Plugins gibt, die ältere jQuery-Funktionen nutzen.


In der REST-API gibt es nun die Möglichkeit, eine Serie von REST-API-Aufrufen in einen einzigen Request abzusetzen. Dazu setzt man das allow_batch-Flag beim Registrieren der REST-Route.

register_rest_route( 'my-ns/v1', 'my-route', array(
    'methods'             => WP_REST_Server::CREATABLE,
    'callback'            => 'my_callback',
    'permission_callback' => 'my_permission_callback',
    'allow_batch'         => array( 'v1' => true ),
) );

Batch-Requests werden dann an die neue Route abgesetzt. Erwartet wird ein Array von REST-Routen, die abgefragt werden sollen:

https://yoursite.test/wp-json/batch/v1
{
  "requests": [
    {
      "path": "/my-ns/v1/route"
    }
  ]
}

Es gibt wieder mal einen neuen Action-Hook: wp_after_insert_post existiert, um Theme- und Plugin-Entwicklern zu ermöglichen, benutzerdefinierten Code auszuführen, nachdem ein Beitrag, seine Terme und Metadaten aktualisiert wurden.


Asynchrone JavaScript-Health-Checks ziehen um und bekommen eine neue REST-Route spendiert: /wp-json/wp-site-health/v1.

Darüber hinaus werden nun einige Health-Checks nach Zeitplan abgearbeitet, um ressourcenintensive Checks beim Aufruf der Seite zu vermeiden.


Überdies interessant für alle Entwickler unter Ihnen:

  • Sämtliche Vorkommen von Type-Conversion-Funktionen intval(), strval(), etc. wurden ersetzt durch (int), (string), etc.
  • Die WP_Error-Klasse hat nun eine Funktion zum Zusammenführen mehrerer Fehler: merge_from().
  • Neue Filter: new_site_email_filter, send_new_site_email und network_site_info_form.
  • Die Spalte posts.post-category in der Datenbank wird in WP 5.6 gelöscht. Sie hatte seit Version 2.8 keine Funktion mehr.
  • Die JSON-Response-Funktionen (z.B. wp_send_json()) bekommen ein neuen Paramter: $options.
  • Composer 2.0 Support.
  • Einige Libraries erhalten ein Updaten: Lodash, React, React-Dom Twemoji.

Das war’s! Bis zum nächsten Mal!

Ihr Dipl. Ing. (FH) Florian Simeth