Wo WordPress gerade steht (Stand 17. August 2026)
WordPress 7.0 erschien am 20. Mai 2026. Die 7.0-Linie steht heute bei 7.0.4 vom 12. August 2026, und der Weg dorthin gehört in die Lagebeurteilung. 7.0.1 vom 9. Juli 2026 war ein reines Wartungsrelease mit 31 Bugfixes in Core und Block-Editor. 7.0.2 vom 17. Juli 2026 war ein Sicherheitsrelease mit zwei Lücken — einer SQL-Injection und einer Verwechslung von Routen in der Batch-Verarbeitung der REST-API —, die verkettet zu Remote Code Execution führten; wegen der Schwere aktivierte WordPress.org erzwungene Auto-Updates für betroffene Installationen. 7.0.3 vom 6. August 2026 war ebenfalls ein Sicherheitsrelease, mit zwölf gemeldeten Lücken, darunter mehrere Stored-XSS-Fälle, eine SSRF in der URL-Validierung und ein Pre-Auth-XSS auf der Login-Seite. 7.0.4 vom 12. August 2026 schließt eine authentifizierte Remote Code Execution ab der Rolle Autor über einen Datei-Upload, die nur Installationen mit Imagick und Ghostscript trifft. WordPress 7.1 erscheint am 19. August 2026, parallel zur WordCamp US in Phoenix, die vom 16. bis 19. August läuft. Das ist der Rahmen, in dem sich jede Update-Planung dieses Sommers bewegt: eine 7.0-Linie mit drei Sicherheitsreleases in vier Wochen, und ein Major-Release, das in zwei Tagen verfügbar ist und dessen Bruchstellen bekannt sind.
Erzwungenes Update heißt konkret: Die Fassung wurde über denselben Mechanismus verteilt, mit dem WordPress seit Version 3.7 Minor-Releases automatisch einspielt — nicht nur im Dashboard zum Klicken angeboten. Daraus folgen zwei Dinge. Erstens ist die Lücke auf den meisten Installationen bereits geschlossen, ohne dass jemand etwas getan hat. Zweitens hat sich auf diesen Installationen etwas geändert, das niemand vorher auf einem Testsystem gesehen hat. Beides ist bemerkenswert, und der zweite Punkt ist der Grund, warum wir bei einer Bestandsaufnahme nie mit dem vermuteten Versionsstand arbeiten, sondern mit dem gemessenen. Nachsehen lässt sich das unter Dashboard → Aktualisierungen, über die Kommandozeile mit wp core version und wp core check-update. Wichtig ist der umgekehrte Fall: Wo AUTOMATIC_UPDATER_DISABLED gesetzt ist, wo ein Filter den Mechanismus abschaltet oder wo das Dateisystem für den Webserver nicht schreibbar ist, kommt auch ein erzwungenes Update nicht an. Solche Installationen stehen heute möglicherweise noch auf 7.0.0 oder 7.0.1 — genau die Fassungen der 7.0-Linie, die von den 7.0.2-Lücken betroffen waren — und haben seither zwei weitere Sicherheitsreleases verpasst. Die Fehler sind öffentlich beschrieben, die Patches liegen bereit.
Ein Punkt gehört an den Anfang, weil er teure Fehlplanungen verhindert: React 19 kommt nicht mit WordPress 7.1. Diese Annahme ist verbreitet, sie stand lange in Roadmaps und Vorträgen, und sie ist falsch. Das Upgrade wurde zurückgenommen, nachdem Inkompatibilitäten zwischen alter und neuer React-Fassung auftraten und dazu Probleme in der Art, wie Plugins React einbinden. WordPress 7.1 bleibt auf React 18.3. Gutenberg bietet ein experimentelles Flag, mit dem sich React 19 testen lässt — als Testmöglichkeit, nicht als Auslieferungszustand. Wer auf Basis der Ankündigung ein Plugin oder ein Editor-Interface auf React 19 umgestellt hat, hat Aufwand für einen Zustand betrieben, der nicht eintritt. Die Lehre daraus ist allgemeiner: Eine Roadmap ist eine Absicht. Budgetiert wird gegen Release-Notes und gegen einen Testlauf, nicht gegen einen Plan.
Was in WordPress 7.1 tatsächlich bricht
Die erste und weitreichendste Bruchstelle in WordPress 7.1 ist der Post-Editor: Er ist jetzt immer iframed — unabhängig vom Theme-Typ, von den Block-API-Versionen der registrierten Blöcke und von denen der Blöcke im Inhalt. Bisher war das eine Entscheidung je Beitrag: In 7.0 wurde der Editor iframed, wenn jeder eingefügte Block Block-API-Version 3 oder höher hatte, und fiel bei einem einzigen älteren Block auf die frühere Darstellung zurück. Diese Bedingung ist entfallen, und mit ihr die Annahme, ein klassisches Theme oder ein alter Block halte den Editor aus dem iframe heraus. Code, der auf globales document oder window zugreift, bricht damit — er sucht in einem Dokument, in dem der Editor-Inhalt nicht mehr liegt. Der Weg führt über ownerDocument und defaultView an einem Element im Canvas: Man greift ein Element innerhalb des Editors, fragt dessen ownerDocument ab und arbeitet mit diesem Dokument beziehungsweise mit dessen defaultView statt mit den globalen Objekten; für Event-Listener am Canvas empfiehlt das Core-Team useRefEffect, damit Registrierung und Aufräumen zusammenbleiben. Betroffen sind in der Praxis Skripte an Meta-Boxen, eigene Editor-Erweiterungen, Custom-Field-Lösungen, TinyMCE-Anpassungen und alles, was per document.querySelector in den Editor greift — auch dann, wenn es dort seit fünf Jahren zuverlässig funktioniert hat.
Die zweite Bruchstelle sitzt in den Listentabellen des Backends. Das führende th mit scope="row" wanderte von der Checkbox- in die Titelspalte. Das ist die erste Änderung an dieser Stelle seit 2010, und sie ist inhaltlich richtig, weil die Zeile durch ihren Titel identifiziert wird und nicht durch eine Auswahlbox. Für Erweiterungen ist sie trotzdem ein Bruch: Alles, was auf die CSS-Klasse check-column selektiert, greift ins Leere. Das betrifft eigene Spalten in Beitrags-, Seiten-, Medien- oder Benutzerlisten, Bulk-Aktionen, Sortierlogik und Backend-CSS, das die Spaltenbreiten korrigiert. Die dritte Änderung ist kleiner und fällt dafür sofort auf: Die Eigenschaft __next40pxDefaultSize ist wirkungslos geworden, Formularelemente rendern unbedingt mit 40 px. Auch __next40pxDefaultSize={false} führt nicht mehr zurück auf die früheren 36 px — die Eigenschaft gehört ersatzlos aus dem Code. Wer damit in Sidebar-Panels, Block-Einstellungen oder eigenen Metaboxen ein kompaktes Layout gebaut hat, sieht danach ein anderes Layout — nicht kaputt, aber verschoben, und in engen Panels reicht das für Überlappungen.
Diese drei Punkte haben eine Gemeinsamkeit, die für die Abnahme entscheidend ist: Sie liegen im Backend, nicht im Frontend. Ein Aufruf der Startseite nach dem Update zeigt keinen davon. Sie zeigen sich, wenn eine Redakteurin einen Beitrag öffnet und speichert, wenn jemand ein Bild in die Mediathek zieht, wenn in einer Listentabelle eine eigene Spalte gebraucht wird. Deshalb steht auf unserer Abnahmeliste nicht „Seite lädt", sondern eine Reihe von Backend-Wegen mit echten Inhalten. Und deshalb ist 7.1 kein Pflichttermin am 19. August: Sicherheitsreleases innerhalb der 7.0-Linie spielen wir zeitnah ein, der Sprung auf 7.1 folgt nach einem Testlauf. Dazu gehört die Einschränkung, die WordPress selbst in jedes Sicherheitsrelease schreibt: Aktiv unterstützt ist nur die jeweils neueste Fassung, die Fixes für ältere Linien liefert das Projekt ausdrücklich als Kulanz. Ein Verbleib auf 7.0 ist damit eine Frist, kein Zustand. Wer beides gleich behandelt, verwechselt Dringlichkeit mit Aktualität.
PHP: der unterschätzte Teil des Updates
In einem guten Teil der Fälle ist nicht WordPress der Grund, warum ein Update nicht geht, sondern PHP. Der Zusammenhang ist eine Klemme: Aktuelle Plugin- und Theme-Fassungen setzen eine PHP-Version voraus, die auf dem Server nicht läuft; ein PHP-Sprung wiederum bringt alten Plugin-Code zum Absturz. Wer PHP zuerst hebt, bekommt Fatal Errors aus Erweiterungen, die noch nicht soweit sind. Wer die Plugins zuerst hebt, bekommt Requirement-Fehler oder ein Composer-Setup, das nicht auflöst. Die Zahlen dazu sind hart und öffentlich: PHP 7.4 bekommt seit dem 28. November 2022 keine Sicherheitsupdates mehr, PHP 8.1 seit dem 31. Dezember 2025. PHP 8.2 wird noch bis zum 31. Dezember 2026 mit Sicherheitsfixes versorgt, PHP 8.3 bis zum 31. Dezember 2027, PHP 8.4 bis zum 31. Dezember 2028. Wer im Sommer 2026 auf 8.2 als Zielversion plant, plant die nächste Migration für dasselbe Jahr. Zielversion ist bei uns deshalb 8.3 oder 8.4, nicht der kleinste Sprung, der gerade funktioniert.
Geprüft wird das gemessen, nicht gelesen. Die Angabe „Requires PHP" im Plugin- oder Theme-Header ist ein Hinweis, keine Zusage — sie wird nicht überall gepflegt, und sie sagt nichts darüber, ob der Code auf der Zielversion Warnungen produziert. Belastbar ist ein Durchlauf auf einer Staging-Kopie mit der Zielversion und einem Log, das Deprecations mitschreibt: einmal durch das Backend, einmal durch die relevanten Frontend-Wege, einmal durch die Cronjobs. Was dabei typischerweise auffällt, ist nicht exotisch. Dynamische Eigenschaften sind seit PHP 8.2 deprecated, was ältere Plugin-Klassen zuverlässig trifft, solange sie kein #[\AllowDynamicProperties] tragen. Falsche Argumenttypen, die PHP 7 als Warnung durchgelassen hat, werfen in PHP 8 einen TypeError und beenden den Request. Und Bibliotheken, die ein Plugin mitbringt, statt sie über Composer zu beziehen, altern unbemerkt mit — sie stehen in keiner Update-Liste. Das 7.0.4-Beispiel zeigt, warum die Laufzeitumgebung mit auf die Liste gehört: Die dort geschlossene Lücke betrifft nur Installationen, auf denen Imagick zusammen mit Ghostscript arbeitet. Ob das bei Ihnen der Fall ist, steht nicht im WordPress-Dashboard, sondern in der PHP-Konfiguration.
Wenn der Termin vom Hoster kommt, ist die Reihenfolge fremdbestimmt, und dann gilt eine andere Priorität: erst die Staging-Kopie auf die Zielversion heben, dort die Plugin- und Theme-Seite nachziehen, dann live umschalten — nicht umgekehrt. Ein angekündigter PHP-Wechsel beim Hoster ist der häufigste Auslöser dafür, dass ein liegengebliebenes Update plötzlich ein Termin ist. Wir betreiben WordPress-Installationen auch auf eigenen Servern in Deutschland, auf Proxmox-PVE-Clustern; dort ist der PHP-Wechsel ein vereinbarter Termin und keine Mitteilung. Ein Umzug ist aber keine Bedingung: Wenn SSH-Zugang, ein sauberer Deployment-Weg und eine wählbare PHP-Version vorhanden sind, arbeiten wir auf Ihrem Hosting.
Automatische Updates: wann sie helfen und wann nicht
Minor-Releases aktualisiert WordPress seit Version 3.7 automatisch, Plugins und Themes seit Version 5.5 auf Wunsch. Das ist keine Notlösung, sondern die richtige Voreinstellung für einen bestimmten Fall: Core-Minor innerhalb einer Linie. Der Änderungsumfang ist klein, innerhalb der Linie bricht keine API, und nach der Veröffentlichung eines Sicherheitsfixes ist der Angriffsdruck messbar höher als das Risiko eines ungetesteten kleinen Sprungs. Wer diesen Mechanismus abschaltet, übernimmt damit die Pflicht, Sicherheitsreleases wie 7.0.2, 7.0.3 und 7.0.4 selbst und zeitnah zu bemerken — drei Stück zwischen Mitte Juli und Mitte August. Das ist eine legitime Entscheidung, wenn ein Prozess dahintersteht. Ohne Prozess ist sie einfach nur eine offene Lücke mit Vorsatz.
Bei Plugins ist die Antwort nicht pauschal, sondern eine Liste. Automatisch sinnvoll sind Erweiterungen ohne Frontend-Ausgabe und ohne Eingriff in Templates: Backend-Hilfen, Verwaltungswerkzeuge, kleine Ergänzungen ohne eigene Datenstrukturen. Nicht sinnvoll ist Automatik überall dort, wo ein Update fachlich ein Deployment ist — in Formularen mit Mailversand, in Zahlungs- und Bestellprozessen bei WooCommerce, in allem, was Templates überschreibt, und in allem, was am Editor hängt. Der Grund ist einfach: Ein automatisches Update prüft, ob es durchläuft. Es prüft nicht, ob die Seite danach richtig aussieht und ob das Formular noch eine Mail verschickt. Der Unterschied zwischen „läuft ohne Fehler" und „tut das Richtige" ist genau der Teil, den eine Maschine nicht abnimmt.
Was bei aktivierter Automatik trotzdem liegen bleibt, ist der teurere Teil: der Sprung auf einen neuen Major wie 7.1, Themes mit eigenem Code, die PHP-Version, verwaiste Plugins ohne Nachfolger. Dazu kommt ein Konflikt, der in gewachsenen Projekten regelmäßig übersehen wird: Updates aus dem Dashboard und ein Git-basiertes Deployment schließen sich gegenseitig aus. Was im Dashboard aktualisiert wird, landet nicht im Repository und wird beim nächsten Deployment überschrieben — im besten Fall fällt das sofort auf, im schlechteren Fall kommt eine gepatchte Fassung still zurück auf den alten Stand. Genau so verliert eine Installation ein erzwungenes Sicherheitsupdate wieder. Wir legen deshalb vorher fest, welcher Weg gilt: Core-Minor automatisch, Plugin-Automatik nach einer begründeten Liste, alles mit eigenem Code über Git und Staging. Und eine Automatik ohne funktionierende Backup-Kette richten wir nicht ein. Das wäre ein Risiko mit Zeitschaltuhr.
Der geordnete Weg: Inventar, Staging, Reihenfolge, Rollback
Am Anfang steht ein Plugin- und Theme-Inventar, und es ist mehr als eine Liste von Namen. Darin stehen je Erweiterung: installierte Version, Quelle (wordpress.org, kommerziell, Eigenentwicklung, unbekannt), auf wen die Lizenz ausgestellt ist, wann sie zuletzt aktualisiert wurde, ob sie im Frontend sichtbar ist und ob sie an einem Geschäftsprozess hängt. Daraus ergeben sich vier Klassen: aktuell, veraltet aber gepflegt, verwaist, und ersetzbar durch ein paar Zeilen im Theme. Die härteste Frage ist dabei nicht, ob es ein Update gibt, sondern ob die Erweiterung noch gebraucht wird. Erfahrungsgemäß fällt bei diesem Schritt ein nennenswerter Teil der Liste weg — nicht weil wir aufräumen wollen, sondern weil niemand mehr eine Funktion benennen kann, die daran hängt. Jedes Plugin, das nicht mitkommt, ist ein Plugin, das nie wieder bricht. Ein Werkzeug dafür ist wp plugin list --update=available; die Bewertung macht es nicht.
Dann die Reihenfolge, und die ist nicht verhandelbar. Erstens: Backup von Datenbank und Dateien, mit einem Rückweg, den jemand schon einmal gegangen ist. Zweitens: eine Staging-Kopie, die tatsächlich eine Kopie ist — URLs ersetzt, Mailversand abgeklemmt, Indexierung gesperrt, Zahlungsanbindungen auf Sandbox, Cronjobs kontrolliert. Ein Staging, das echte Bestellbestätigungen an echte Kunden schickt, ist ein zweites Produktivsystem. Drittens: PHP auf die Zielversion, mit Deprecation-Log. Viertens: Plugins einzeln oder in kleinen Gruppen mit Zwischenprüfung. Fünftens: der Core. Sechstens: Theme und eigener Code, hier landen die 7.1-Punkte — iframed Editor, check-column, 40 px. Siebtens: Abnahme. Achtens: das Live-Fenster. Der Grund für die Kleinteiligkeit in Schritt vier ist Diagnostik, nicht Vorsicht: Wer zwei Dutzend Plugins in einem Zug aktualisiert und danach einen Fehler hat, hat zwei Dutzend Verdächtige und keine Spur.
Rückweg heißt bei uns: Datenbank-Dump und Dateistand unmittelbar vor dem Fenster, und ein geprobter Weg zurück. Dabei gehört eine unangenehme Einschränkung offen dazu. Datenbank-Migrationen einzelner Plugins sind nicht immer umkehrbar. Der Rückweg ist dann ein Restore auf den Stand vor dem Fenster, kein Downgrade — und alles, was zwischen Dump und Restore passiert ist, an Bestellungen, Kommentaren, Formulareingängen oder redaktionellen Änderungen, ist damit weg. Genau deshalb liegt das Fenster außerhalb der Geschäftszeiten und ist kurz, und genau deshalb steht vorher eine Abnahmeliste: Beitrag anlegen und speichern, Medien-Upload, Formularversand mit echter Mail, Suche, Feeds, Objekt-Cache, Backend-Listen mit eigenen Spalten, Rechte der Redaktionsrollen. Und wenn sich beim Inventar zeigt, dass eine zentrale Erweiterung keinen Nachfolger hat, sagen wir das vor dem Angebot: Dann ist das Update kein Update mehr, sondern ein kleines Entwicklungsprojekt. Das macht die Zahl größer, und es ist trotzdem die ehrlichere Zahl. Wer die Pflege danach nicht selbst übernehmen will, findet die laufende Betreuung samt Service-Level-Staffel unter WordPress-Wartung; diese Seite endet mit dem Go-Live.