Wie so viele Projekte in WordPress hat auch WooCommerce mal klein angefangen. Dicht am WordPress-Kern gebaut hat das E-Commerce-System seinen Siegeszug angetreten und wird inzwischen für ziemlich große Shops genutzt. Je größer und erfolgreicher die Shops wurden, desto deutlicher zeichnete sich allerdings eine architektonische Entscheidung des WordPress-Kerns ab, die bei Shops mit jeder Bestellung ein kleines Gewicht auf die Bremse gelegt hat

Selbst ein Shop mit nur einem ultra erfolgreichen Produkt wurde so über die Zeit immer etwas langsamer. Und zwar langsamer für die Personen, die die Website oder speziell Bestellungen bearbeiten. Gerade in dem spannendsten Moment: der Verarbeitung des Klicks auf den „Jetzt  kaufen“-Knopf. Keine gute Entwicklung in Zeiten, in denen wir von der Technik erwarten, dass sie immer schneller wird.

High Performance Order Storage: Bestellungen besser speichern

So wie die Datenbank in WordPress aufgebaut ist, wurden alle „Hauptinhalte“ z.B. Seiten, Blogbeiträge, Produkte, Menüeinträge, aber auch früher Bestellungen in einer großen Tabelle namens wp_posts gespeichert. Die Zusatzinformationen (Metadaten) zu den Hauptinhalte wurden zudem alle in der Tabelle wp_postmeta abgelegt.

Nun sind diese Tabellen mit jeder Bestellung immer größer und die Datenbankabfragen ein winziges Stück länger geworden. Es wurde also für jeden Aufruf einer öffentlichen Information, z.B. eines Blogbeitrags, ein wachsender Stapel an öffentlichen und nicht-öffentlichen Daten (Bestellungen) durchsucht, um den richtigen Hauptinhalt zu finden. Ziemlich unnötige Arbeit.

Um das alles zu verbessern, wurde am 17. Januar 2022 angekündigt, die Speicherung und Strukturierung von Bestellungen neu zu gestalten. Das Projekt startete unter dem Namen „Custom Order Tables“, aber wurde dann umbenannt und heißt seitdem „High Performance Order Storage“. Die deutsche Übersetzung dafür lautet „Leistungsstarke Speicherung von Bestellungen“. Wie üblich werden solche Fachbegriffe abgekürzt, in diesem Fall wurde daraus „HPOS“. Die komplette Planung, Überarbeitung und Überprüfung hat 1 1/4 Jahre gedauert, etwa ein Viertel Jahr länger als anfänglich vorgesehen.

Große Auswahl an günstigen Domain-Endungen – schon ab 0,08 € /Monat
Jetzt Domain-Check starten

Was ändert sich?

Für Besuchende der Website oder das Shop-Management ändert sich optisch und in ihren Klick-Pfaden nichts.

Die Bestelldaten werden aber auf der technischen Ebene anders abgelegt. Die Daten landen statt zuvor in zwei nun in vier Tabellen.

wp_wc_orders

Dies ist die zentrale Tabelle für alle Bestellungen. Hier werden die Eckdaten der Bestellung gespeichert: Die ID, das Datum und die Uhrzeit, die Bestellsumme, die Summe der Steuern, der Typ der Bestellung, ob es sich z.B. um ein Abo handelt, sowie der Bestellkommentar. Hier werden auch die verbundenen Daten wie Transaktions-ID oder Kunden-ID gespeichert, mit denen ggf. weitere Daten abgerufen werden können.

wp_wc_order_addresses

Durch die Schaffung einer eigenen Tabelle können nun die Adressen einer Bestellung in jeweils eine Zeile geschrieben werden – und nicht wie zuvor in 10 Zeilen. Wenn eine Bestellung an eine andere Adresse als die Rechnungsadresse versendet werden soll, wird die Lieferadresse ebenfalls hier abgelegt und über die Bestellungs-ID verbunden.

wp_wc_order_operational_data

Hierbei handelt es sich um eine hoch spezialisierte Tabelle für technische Informationen, die dem Verfolgen des Bestellverlaufs und der weiteren Verarbeitung dienen. Es wird protokolliert, auf welchem Weg die Bestellung eingegangen ist und welche Version von WooCommerce in dem Moment installiert war. Ebenso wird der Zeitpunkt der Bezahlung und Fertigstellung genau erfasst. Sowie eine Reihe an Infos wie z.B. ob die Bestellbestätigung versendet, der Lagerbestand bereits vermindert oder die Bestellung in der Verkaufsstatistik aufgenommen wurde.

Diese Tabelle ist sehr spezifisch in ihren Spalten und nicht einfach erweiterbar. Damit ist die Tabelle ein Ort exklusiv für den WooCommerce-Kern. Anders als zuvor werden Plugins, die viele spezifische Daten speichern wollen, nun aufgefordert, eigene Tabellen zu erstellen.

wp_wc_orders_meta

Als direkter Nachfolger von wp_postmeta ist diese Tabelle das Auffangbecken für alle Informationen, die zur Bestellung gehören, aber nicht in die anderen Tabellen passen, z.B. ein Text, der für die Geschenkverpackung der Bestellung genutzt werden soll.

Kompatibilität signalisieren

Um größere Unglücke zu verhindern, müssen Plugins über das folgende Snippet erklären, dass sie mit HPOS kompatibel sind. Diese Komplexität ist nötig, um die gewohnte Stabilität und Kompatibilität von WordPress zu gewährleisten.

add_action( 'before_woocommerce_init', function() {
if ( class_exists( \Automattic\WooCommerce\Utilities\FeaturesUtil::class ) ) {
\Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'custom_order_tables', __FILE__, true );
}
} );

Was bleibt?

Unverändert, weil schon seit Beginn in eigenen Tabellen, bleiben die Tabellen für die Bestellinhalte. Erkennbar aus einer anderen Zeit an ihren Namen wp_woocommerce_order_items sowie wp_woocommerce_order_itemmeta.

Schnittstellen werden nochmal wichtiger

Für Plugins, die auf WooCommerce aufbauen, ist es nun nochmal wichtiger, sich an die bereitgestellten Schnittstellen, Klassen und Funktionen zu halten. Die veränderte Struktur in der Datenbank lässt einige vermeintliche Abkürzungen, die im Code stecken können, plötzlich ins Leere laufen und erzeugt damit Fehler im Onlineshop. Seit WooCommerce 3.0 wird ohnehin dazu aufgefordert, keine alternativen Wege mehr zu nutzen, damit diese und zukünftige große Änderungen geschmeidiger ablaufen.

Welche Vorteile bringt HPOS?

Kleine und gezieltere Backups möglich

Besonders ärgerlich ist es, wenn Bestelldaten auf Grund von technischen Fehlern verloren gehen. Mit den neuen Tabellen lassen sich nun ganz gezielt nur die Bestelldaten sichern. So können die Bestellungen z.B. stündlich gesichert werden. Bei Beiträgen, Seiten und Produkten reicht es vielleicht, dies nur einmal pro Nacht zu tun. Somit müssen weniger Daten aufbewahrt werden.

Einfachere Migrationen und Wiederherstellung

Beim Erstellen einer Staging-Website oder einer lokalen Kopie, um die Website weiter zu entwickeln, müssen nun nicht mehr alle Daten übertragen werden. Die mehr oder weniger große Menge an Bestelldaten ist für die lokale Entwicklung meistens ohnehin irrelevant. HPOS macht die lokale Entwicklung einfacher und verringert Fehleranfälligkeit beim Datenschutz. Auch lässt sich so eine Website im Notfall schneller wiederherstellen, um weiterhin Bestellungen entgegenzunehmen.

Weniger Ressourcenverbrauch und schnellere Website

Bessere Performance hat oft auch den Vorteil, weniger Ressourcen zu verbrauchen. Somit muss weniger oft zu größeren Hosting-Paketen gegriffen werden.

Nach Angaben von WooCommerce selber werden Bestellungen nach dem Klick auf den „Jetzt-Kaufen“-Knopf fünf mal schneller erstellt und die Kasse allgemein 1,5 mal schneller geladen. Außerdem wird eine Bestellung 40 mal schneller im Backend gefunden.

HPOS für den eigenen Shop nutzen

Onlineshops, die mit der Version 8.2 oder neuer, also nach dem Oktober 2023, gestartet wurden, benutzen HPOS automatisch. Frisch gestartete Shops sind damit in der Regel schon auf der besseren Struktur unterwegs.

Wenn nun ein Plugin installiert und aktiviert wird, das nicht kompatibel ist, tauchen eine Reihe Hinweise auf, die auf potenzielle Fehler hinweisen. Das Plugin wird aber nicht an der Arbeit gehindert. Es trotzdem zu nutzen ist also möglich, wenn auch ein Auseinandersetzen mit der Thematik sinnvoll ist.

Um nachzuschauen, was der eigenen Shop verwendet, geht man im WP-Admin unter WooCommerce auf Einstellungen. Danach zum Tab Erweitert und darin zum Unterpunkt Funktionen. Im oberen Bereich der Seite sieht man nun Datenspeicher für Bestellungen.

Bestehenden Shop auf HPOS umstellen

Wenn der eigene Shop nun aber anzeigt, dass Speichern als WordPress-Beiträge (alt) aktiv ist, hat WooCommerce auch dafür einen Lösungsweg vorgesehen. Nein, das heißt nicht alles neu bauen!

Die im vorherigen Schritt aufgerufene Einstellungsseite hilft bei der Umstellung. Sie zeigt an, ob es Plugins gibt, die auf Grund von erklärter Inkompatibilität eine Umstellung verhindern.
 Das Problem muss als erstes gelöst werden. Dies kann heißen, sich mit dem Hersteller auseinandersetzen, um die Kompatibilität zu erreichen oder wenn das Plugin verzichtbar ist, es zu deaktivieren und zu löschen.

Der nächste Schritt ist es, die bestehenden Bestellungen zwischen dem alten und neuen Schema zu synchronisieren. Die Anzahl der nicht synchronisierten Bestellungen wird in einem der Hinweistexte dargestellt. Diese Aufgabe kann mit einem Klick auf den Link Bestellungen jetzt synchronisieren gestartet werden. Um nicht den Server in die Knie zu zwingen, werden immer 25 Bestellungen am Stück bearbeitet. Dazu wird die eingebaute Aufgabenverwaltung verwendet.

Je nach Umfang der Aufgabe kann dies einige Zeit dauern. Je mehr die Website während der Abarbeitung genutzt wird, desto zügiger erfolgt alles. Wie viele Bestellungen noch ausstehen, wird angezeigt und kann durch das erneute Laden der Einstellungsseite aktualisiert werden. Wenn einmal alle Bestellungen synchronisiert wurden und in der Zwischenzeit aber neue Bestellungen eingehen, muss der Prozess für die Neuzugänge erneut angestoßen werden.

HSPO in WooCommerce Abbildung 4 - Bestellungen-waren-auf-syncronisierung-fokus

Wenn alles synchronisiert ist, verschwinden alle Hinweise auf die Synchronisation. Und der Weg ist frei für den dritten Schritt. Das Kästchen neben Leistungsstarke Speicherung von Bestellungen (empfohlen) kann ausgewählt und die Änderung gespeichert werden. Nun ist das neue Schema aktiv.

HSPO in WooCommerce Abbildung 5 -Bereit zur Umstellung

Der Weg zurück

Wenn nach der Umstellung auf HPOS doch noch Fehler aufgezeigt werden, gibt es zwei Möglichkeiten.

Zunächst kann man die Bestellungen synchronisieren, wie schon oben beschrieben, und die Einstellung wieder auf den alten Weg zurückzustellen. Außerdem kann man die Einstellung Kompatibilitätsmodus aktivieren (sodass Bestellungen mit Beitragstabelle synchronisiert werden). aktivieren. Dann werden die Daten sowohl im alten als auch im neuen Schema gespeichert. Für die Vermeidung von Fehlern ist das sicherlich am Besten, aber nicht gut für den Ressourcenverbrauch. Alle Bestellungen werden doppelt gespeichert. Für die Zeit, bis die Fehler ausgemerzt sind,ist dies machbar, aber sicherlich keine Dauerlösung.

Auch per WC-CLI machbar

Der beschriebene Weg über die Einstellungsseite und dem WP-Cron ist für Shops mit vielen Bestellungen nicht der beste Weg. Darum gibt es für diese, sowie allgemeine, umfangreiche Aufgaben in WooCommerce ein Kommandline-Interface. Aufbauend auf die WP-CLI können, wenn das Hosting es unterstützt, Aufgaben auch auf diesem Weg gelöst werden. Der Vorteil dabei ist die schnellere und ununterbrochene Abarbeitung.

Auch bei diesem Werkzeug ist die Herangehensweise vergleichbar. Die Prüfung, ob der Shop bereits mit HPOS unterwegs ist, führt man mit dem folgenden Kommando aus:

# wp wc hpos status

HPOS aktiviert?: no

Kompatibilitätsmodus aktiviert?: no

Nicht synchronisierte Bestellungen: 0

Zu bereinigende Bestellungen: 0

Mit dem folgenden Kommando lässt sich die Funktionalität aktivieren.

# wp wc hpos enable

Dies führt die Aktivierung aber nicht stumpf aus. Bei inkompatiblen Plugins oder nicht synchronen Bestellungen wird ein Fehler ausgegeben.

Prüfungen vor der Aktivierung werden ausgeführt …
Warning: [Fehlgeschlagen] Es müssen noch Bestellungen synchronisiert werden. Führe bitte „wp wc hpos sync“ aus, um ausstehende Bestellungen zu synchronisieren.
Error: Fehler bei Vorabprüfungen von HPOS, siehe Fehler oben

Die Fehlermeldung verrät es schon, um ggf. Bestellungen anzupassen, kann dieser Befehl genutzt werden.

# wp wc hpos sync

Auch hier kann der Kompatibilitätsmodus aktiviert werden.

# wp wc hpos enable --with-sync

Prüfungen vor der Aktivierung werden ausgeführt …
Success: Kompatibilitätsmodus aktiviert.
Success: HPOS aktiviert.

Für alle, die eine Reihe an Shops umstellen müssen, bietet der CLI-Weg eine tolle Zeitersparnis.

Egal, auf welchem Weg die Daten migriert werden, eine ausführliche Prüfung aller Prozesse, wie Versand und Darstellungen der Bestellungen, z.B. im Kundenkonto, ist immer wertvoll.

HPOS in WooCommerce – Fazit: Mit Schwung in die Zukunft

Die Umstellung, wie Bestellungen in WooCommerce gespeichert werden, ist nach der Verpflichtung zur Nutzung der Methoden und Helfer schon die zweite richtig große Änderung im technischen Unterbau der E-Commerce-Engine. In Ruhe geplant und mit einem robusten Weg zur Datenmigration kann es als ein sauberes und erfolgreiches Projekt bezeichnet werden. Mit den Vorteilen bei der Website-Geschwindigkeit ist dies ein Schritt der positiven Entwicklung in die Zukunft.

Titelmotiv: Bild von Adrian auf Pixabay

Ralf Wiechers

Große Auswahl an günstigen Domain-Endungen – schon ab 0,08 € /Monat
Jetzt Domain-Check starten