Omnibus in WooCommerce: niedrigster Preis der letzten 30 Tage

Omnibus in WooCommerce: niedrigster Preis der letzten 30 Tage

Zuletzt überprüft: 27. Oktober 2026
28 Min. Lesezeit
Leitfaden
WooCommerce-Experte

Wer in Deutschland einen Preis als reduziert bewirbt, muss daneben den niedrigsten Gesamtpreis nennen, den er in den 30 Tagen vor der Ermäßigung verlangt hat. So steht es in § 11 der Preisangabenverordnung (PAngV), die Art. 6a der Richtlinie 98/6/EG in der Fassung der Omnibus-Richtlinie umsetzt. WooCommerce speichert keine Preishistorie, also muss ein Plugin oder eigener Code diese Zahl berechnen. Dieser Artikel zeigt, was die Vorschrift genau verlangt, wie eine Preishistorie in WooCommerce funktionieren sollte, an welchen Stellen typische Umsetzungen scheitern und wie Sie in etwa einer Stunde prüfen, ob Ihr Shop die richtige Zahl anzeigt.

Der Artikel beschreibt den Inhalt der Vorschriften und das Verhalten der Software zum Zeitpunkt der Veröffentlichung. Er ist keine Rechtsberatung für Ihren konkreten Shop.

#Was verlangt die Omnibus-Richtlinie bei Preisermäßigungen?

Die Richtlinie (EU) 2019/2161, bekannt als Omnibus-Richtlinie (EUR-Lex), hat in die Preisangabenrichtlinie 98/6/EG einen neuen Art. 6a eingefügt (EUR-Lex, konsolidierte Fassung). Der Artikel hat fünf Absätze:

  1. Jede Bekanntgabe einer Preisermäßigung nennt den vorherigen Preis, den der Händler für einen bestimmten Zeitraum vor der Ermäßigung angewendet hat.
  2. Der vorherige Preis ist der niedrigste Preis, den der Händler in einem Zeitraum von mindestens 30 Tagen vor Anwendung der Ermäßigung angewendet hat.
  3. Die Mitgliedstaaten können für Waren, die schnell verderben oder ablaufen, andere Regeln vorsehen.
  4. Für Produkte, die weniger als 30 Tage auf dem Markt sind, können die Mitgliedstaaten einen kürzeren Zeitraum vorsehen.
  5. Die Mitgliedstaaten können festlegen, dass bei einer schrittweise erhöhten Ermäßigung der Preis ohne Ermäßigung vor der ersten Anwendung als vorheriger Preis gilt.

Deutschland hat diesen Artikel in § 11 der Preisangabenverordnung 2022 umgesetzt. Der Kern der Pflicht steht in Absatz 1:

(1) Wer zur Angabe eines Gesamtpreises verpflichtet ist, hat gegenüber Verbrauchern bei jeder Bekanntgabe einer Preisermäßigung für eine Ware den niedrigsten Gesamtpreis anzugeben, den er innerhalb der letzten 30 Tage vor der Anwendung der Preisermäßigung gegenüber Verbrauchern angewendet hat.

Quelle: § 11 Abs. 1 PAngV (gesetze-im-internet.de).

Aus diesem Satz ergeben sich vier technische Anforderungen an den Shop. Es geht um den Gesamtpreis, und den definiert § 2 Nr. 3 PAngV als den Preis einschließlich Umsatzsteuer und sonstiger Preisbestandteile. Die Pflicht greift bei jeder Bekanntgabe einer Ermäßigung, also auf der Produktseite genauso wie im Banner auf der Startseite oder im Newsletter mit Aktionspreis. Das Fenster läuft vor der Anwendung der Preisermäßigung, also rückwärts ab dem Starttag der Aktion. Gezählt wird nur ein Preis, den der Händler angewendet hat, zu dem also tatsächlich gekauft werden konnte. Ein Preis, der im Backend für nächsten Monat hinterlegt ist, wurde noch nicht angewendet.

§ 11 PAngV spricht von einer Preisermäßigung für eine Ware. Dienstleistungen sind nicht erfasst. Ein WooCommerce-Shop, der nur Kurse, Beratungen oder Termine verkauft, muss den 30-Tage-Preis nach dieser Vorschrift nicht nennen. Sobald derselbe Shop auch Waren rabattiert, gilt die Pflicht für diese Waren. Außerdem wirkt die Vorschrift nur gegenüber Verbrauchern. Ein reiner B2B-Shop hinter einem Händlerlogin fällt nicht darunter, ein gemischter Shop schon.

Absatz 3 erweitert die Pflicht auf Unternehmer, die nach § 4 Abs. 2 PAngV lediglich einen Grundpreis angeben müssen. Für Shops mit Lebensmitteln, Kosmetik oder Meterware heißt das: Wo ein Grundpreis neben einem reduzierten Preis steht, gehört der niedrigste Preis dazu. Der Screenshot weiter unten zeigt genau diese Kombination.

Wie Preisangaben aussehen müssen, regelt § 1 Abs. 3 PAngV. Sie sind dem Angebot oder der Werbung eindeutig zuzuordnen und leicht erkennbar und deutlich lesbar zu machen. Für einen Onlineshop lässt sich das praktisch so lesen: Überall, wo ein durchgestrichener Preis und ein Aktionspreis stehen, steht auch der niedrigste Preis der letzten 30 Tage, und zwar so nah, dass klar ist, zu welchem Produkt er gehört. Ein Hinweis, der nur im Beschreibungsreiter auftaucht, erfüllt das nicht.

Ein Verstoß ist nicht folgenlos. § 20 Nr. 1 PAngV führt die fehlende, falsche oder unvollständige Angabe nach § 11 Abs. 1 ausdrücklich als Ordnungswidrigkeit auf. Verfolgt wird sie von den zuständigen Behörden. Eine Bußgeldhöhe nennen wir hier nicht, weil sie sich nicht aus der PAngV selbst ergibt.

Für Shops in Österreich und der Schweiz gilt § 11 PAngV nicht: Österreich hat Art. 6a in seinem eigenen Preisauszeichnungsrecht umgesetzt, und die Schweiz ist nicht Mitglied der EU, die Richtlinie gilt dort also nicht unmittelbar. Wer aus Deutschland nach Österreich verkauft, sollte die dortige Umsetzung gesondert prüfen lassen.

#Wann zählen die 30 Tage anders?

Absatz 1 beschreibt den Normalfall. Vier Situationen ändern die Rechnung oder verlangen eine bewusste Entscheidung vom Shop.

#Produkt ist erst seit weniger als 30 Tagen im Angebot

Die Richtlinie erlaubt in Art. 6a Abs. 4 einen kürzeren Zeitraum für neue Produkte. § 11 PAngV enthält dafür keine eigene Regel. Der Text kennt nur das 30-Tage-Fenster aus Absatz 1 und die Ausnahmen in Absatz 2 und 4. Für die Preishistorie heißt das praktisch: Das Fenster beginnt nicht vor dem ersten Preiseintrag des Produkts, und wenn ein Produkt erst seit zehn Tagen verkauft wird, gibt es eben nur zehn Tage, aus denen sich ein Minimum bilden lässt. Wer neue Produkte direkt mit Einführungsrabatt startet, sollte sich die Formulierung im Shop rechtlich abstimmen lassen.

Hier steckt eine Falle für Shops, die gerade erst ein Plugin installieren. Ein Produkt, das seit zwei Jahren verkauft wird, hat im neuen Plugin eine Historie, die heute beginnt. Das Plugin weiß nicht, dass das Produkt alt ist, und hat keinen Eintrag von vor der Installation. Ein brauchbares Plugin hat deshalb eine Einstellung für den Fall ohne Historie, und Sie müssen bewusst entscheiden, was der Shop in den ersten 30 Tagen nach der Installation anzeigt. Am sichersten ist es, keine neuen Ermäßigungen zu starten, bis die Historie ein volles Fenster abdeckt, oder die Historie aus dem bisherigen Plugin zu importieren, falls es eines gab.

#Schnell verderbliche Waren

§ 11 Abs. 4 Nr. 2 PAngV nimmt Preisermäßigungen für schnell verderbliche Waren oder Waren mit kurzer Haltbarkeit ganz aus, wenn der Preis wegen drohenden Verderbs oder Ablaufs der Haltbarkeit herabgesetzt wird und das für Verbraucher in geeigneter Weise kenntlich gemacht ist. Die Angabe entfällt, aber nur, wenn der Grund sichtbar ist.

Ein Shop mit Lebensmitteln, Blumen oder Ware mit kurzem Mindesthaltbarkeitsdatum braucht deshalb zwei Modi: das normale 30-Tage-Fenster und einen Modus “Ermäßigung wegen Haltbarkeit, mit Hinweis”. Das Plugin sollte solche Produkte markieren lassen, etwa über eine Kategorie oder ein Produktfeld, und der Hinweis auf den Grund muss tatsächlich im Shop erscheinen. Ohne den Hinweis gilt wieder Absatz 1.

#Rabatt, der schrittweise steigt

Art. 6a Abs. 5 der Richtlinie erlaubt den Mitgliedstaaten eine Sonderregel für Ermäßigungen, die in mehreren Schritten größer werden. Deutschland hat sie in § 11 Abs. 2 PAngV übernommen: Bei einer schrittweisen, ohne Unterbrechung ansteigenden Ermäßigung kann während der gesamten Aktion der niedrigste Preis angegeben werden, der vor Beginn der schrittweisen Ermäßigung galt.

Ein Rechenbeispiel zur Veranschaulichung: Ein Produkt kostet 100, sinkt am Montag auf 90 und eine Woche später auf 80. Bei wörtlicher Anwendung von Absatz 1 wäre die zweite Stufe eine neue Ermäßigung mit eigenem Fenster, und der niedrigste Preis wäre 90. Nach Absatz 2 darf der Shop bis zum Ende der Aktion 100 als Referenz zeigen. Das Wort “kann” macht daraus eine Option, keine Pflicht.

Die Bedingung ist “ohne Unterbrechung”. Geht der Preis zwischen zwei Stufen wieder auf 100 zurück, oder endet die Aktion und beginnt später neu, gilt wieder Absatz 1 mit einem frischen 30-Tage-Fenster. Für die Technik heißt das: Ein Plugin, das jede Stufe stur als neue Ermäßigung behandelt, ist auf der sicheren Seite, verschenkt aber die Möglichkeit aus Absatz 2. Wer Kampagnen nach dem Muster “jede Woche günstiger” plant, muss den Starttag der ersten Stufe kennen und sicherstellen, dass Streichpreis, Prozentangabe und angezeigter Referenzpreis dieselbe Logik verwenden. Sonst sieht der Kunde “-20 %” neben einem niedrigsten Preis von 90 und einem Preis von 80.

#Individuelle Preisermäßigungen

§ 11 Abs. 4 Nr. 1 PAngV nimmt individuelle Preisermäßigungen aus. Ein Gutschein, den ein einzelner Kunde für seine Bestellung erhält, ist etwas anderes als ein Aktionspreis, der allen Besuchern angezeigt wird. Wo genau die Grenze zu Preisen für Kundengruppen verläuft, entscheidet der Einzelfall. Technisch ist wichtig, dass das Plugin klar unterscheidet, welche Preise es als angewendeten Gesamtpreis in die Historie schreibt und welche nicht.

#Hat WooCommerce einen eingebauten niedrigsten Preis der letzten 30 Tage?

Nein. Wir haben den Code von WooCommerce im Hauptzweig des Repositorys auf GitHub am 27. Oktober 2026 durchsucht: Die Suche nach “omnibus” und “lowest price” liefert nichts, und im Kern gibt es weder eine Tabelle noch ein Feld mit Preishistorie.

Ein Produkt in WooCommerce speichert den aktuellen Zustand:

DatenMethode in WC_ProductWas sie über die Vergangenheit sagt
Regulärer Preisget_regular_price()Nur der aktuelle Wert
Angebotspreisget_sale_price()Nur der aktuelle Wert, auch wenn die Aktion noch nicht läuft
Aktionsbeginnget_date_on_sale_from()Geplantes Datum, keine Spur früherer Aktionen
Aktionsendeget_date_on_sale_to()Wie oben
Aktiver Preisget_price()Der Preis, der jetzt gilt

Wenn Sie einen Preis ändern, ist der alte Wert weg. Eine geplante Aktion schaltet WooCommerce über eine Hintergrundaufgabe (woocommerce_scheduled_sales) ein, die den aktiven Preis zum Startzeitpunkt umstellt. Nach Ende der Aktion gilt wieder der reguläre Preis, und der Shop hält nicht fest, dass es die Aktion überhaupt gab.

Daraus folgt: Der niedrigste Preis der letzten 30 Tage lässt sich aus den WooCommerce-Daten weder berechnen noch nachträglich rekonstruieren. Sie brauchen eine eigene Preishistorie, die ab dem Tag der Installation geführt wird. Das übernimmt ein Plugin oder eigener Code. Wenn Sie das bei einem Entwickler in Auftrag geben, muss die Spezifikation die Historie und die Regeln zur Minimumberechnung beschreiben. Das Etikett allein ist in einer halben Stunde eingebaut, eine korrekte Historie ist ein eigenes Modul mit Tests. Wenn Sie so ein Modul oder ein Audit des bestehenden brauchen, finden Sie die Details auf der Seite WooCommerce-Entwickler.

#Wie funktioniert eine korrekte Preishistorie im Shop?

Eine Preishistorie ist eine Tabelle mit Einträgen: Produkt (oder Variante), Preis, Währung und das Datum, ab dem dieser Preis gilt. Daraus berechnen Sie das Minimum im Fenster. Das klingt einfach, aber jede der folgenden Regeln geht auf einen Fehler zurück, den schon jemand gemacht hat.

#Der Eintrag entsteht, wenn der Preis gilt

Einen Eintrag schreiben Sie in dem Moment, in dem sich der aktive Preis ändert, also der Preis, zu dem Kunden kaufen können. Das Speichern des Produkts im Backend reicht nicht als Auslöser, denn beim selben Speichern können Sie eine Aktion für den nächsten Monat einrichten. Schreibt das Plugin dann den Angebotspreis weg, landet dieser Preis in der Historie, bevor jemand zu ihm kaufen konnte, und wird nach dem Start der Aktion zum “niedrigsten Preis der letzten 30 Tage”. Bei einer geplanten Aktion sollte der Eintrag entstehen, wenn WooCommerce sie startet.

Die zweite Regel betrifft Änderungen innerhalb eines Tages. Wenn Sie morgens den Preis senken und nachmittags zurücknehmen, konnten Kunden einige Stunden lang günstiger kaufen. Eine Historie, die nur einen Preis pro Tag speichert, verliert diese Änderung, obwohl der Preis angewendet wurde.

#Das Fenster zählt ab dem Start der Ermäßigung

Das 30-Tage-Fenster endet mit dem Beginn der Ermäßigung und wandert nicht mit dem heutigen Datum mit. Ein Beispiel: Eine Aktion startet am 1. November und läuft drei Wochen. Am 15. November ist der niedrigste Preis der letzten 30 Tage immer noch das Minimum aus dem Zeitraum vom 2. bis 31. Oktober. Rechnet das Plugin “die letzten 30 Tage ab heute”, fällt nach einigen Aktionstagen der Aktionspreis selbst ins Fenster, und der Shop zeigt “niedrigster Preis der letzten 30 Tage: 80” neben dem Preis 80. So eine Angabe sagt dem Kunden nichts und widerspricht der Vorschrift.

#Der Preis, der beim Öffnen des Fensters galt

An diesem Fall scheitern die meisten einfachen Umsetzungen. Einträge entstehen nur bei Preisänderungen. Ein Beispiel: Ein Produkt kostet 40 Tage lang 100, heute startet eine Ermäßigung auf 80. Der letzte Eintrag mit 100 ist 40 Tage alt, im 30-Tage-Fenster liegt also kein einziger Eintrag. Eine Abfrage “Minimum aller Einträge der letzten 30 Tage” liefert dann ein leeres Ergebnis oder nur den Preis 80.

Die korrekte Logik nimmt das Minimum aus zwei Quellen: den Einträgen innerhalb des Fensters und dem letzten Eintrag vor Fensterbeginn, weil dieser Preis beim Öffnen des Fensters noch galt. In diesem Beispiel ist das Ergebnis 100. Dieselbe Bedingung gilt für das Aufräumen der Historie: Eine Aufgabe, die Einträge älter als 30 Tage löscht, darf den letzten Eintrag vor dem Fenster nicht entfernen, weil er der einzige Beleg für den Preis 100 ist.

#Die Währung steht bei jedem Eintrag

Ein Shop, der seine Basiswährung umgestellt hat, oder ein Shop mit Mehrwährungs-Plugin hat Preise in verschiedenen Währungen in der Historie. Jeder Eintrag braucht seine Währung, und die Abfrage nach dem Minimum muss nach der Währung filtern, in der der Kunde das Produkt gerade sieht. Sonst steht neben einem Preis in Euro ein niedrigster Preis in Schweizer Franken, oder das Minimum wird aus Zahlen gebildet, die sich nicht vergleichen lassen. Für Shops, die von Deutschland aus auch in die Schweiz verkaufen und dort in Franken anzeigen, ist das kein theoretisches Problem.

#Steuer so wie beim Preis daneben

§ 11 PAngV verlangt den niedrigsten Gesamtpreis, und der Gesamtpreis enthält nach § 2 Nr. 3 PAngV die Umsatzsteuer. WooCommerce erlaubt, Preise netto oder brutto einzugeben und separat einzustellen, wie sie im Shop und im Warenkorb angezeigt werden. Der niedrigste Preis muss dieselben Anzeigeeinstellungen durchlaufen wie der Preis daneben, zum Beispiel über wc_get_price_to_display(). Gibt der Shop Nettopreise ein und zeigt Bruttopreise an, ist die rohe Zahl aus der Historie um die Steuer zu niedrig und führt den Kunden in die Irre.

#Variables Produkt, berechnet pro Variante

Ein variables Produkt in WooCommerce hat keinen eigenen Preis. Preise haben die Varianten, und die Produktseite zeigt eine Spanne. Die Historie muss für jede Variante getrennt geführt werden, und die Angabe des niedrigsten Preises sollte erscheinen, sobald eine Variante gewählt ist, zusammen mit deren Preis. In Produktlisten, in denen eine Spanne steht, braucht der Shop eine durchdachte Regel, etwa die Angabe für die Variante, die die Untergrenze der Spanne bildet.

#Das Aufräumen lässt den Eintrag vor dem Fenster stehen

Die Historie wächst mit jeder Preisänderung, also kürzt das Plugin sie. Die Aufräumaufgabe löscht alte Einträge, lässt aber für jedes Produkt den letzten Eintrag vor dem Fenster stehen. Diese Aufgabe muss auch nach einem Plugin-Update laufen, ohne dass jemand das Plugin neu aktiviert.

#Wie berechnet man den niedrigsten Preis bei einer geplanten Aktion?

Geplante Aktionen sind die häufigste Quelle falscher Zahlen, weil der Angebotspreis im WooCommerce-Backend schon existiert, bevor er gilt. Ein Beispiel Schritt für Schritt:

  1. Ein Produkt kostet seit Langem 100. Die Historie hat einen Eintrag: 100, vor 60 Tagen.
  2. Am 20. Oktober setzen Sie einen Angebotspreis von 80 mit Startdatum 1. November und speichern das Produkt.
  3. Bis zum 31. Oktober zahlt der Kunde 100. Die Historie darf keinen Eintrag mit 80 haben, weil dieser Preis nicht angewendet wurde.
  4. Am 1. November startet WooCommerce die Aktion. Erst jetzt bekommt die Historie den Eintrag 80.
  5. Das Fenster ist der 2. bis 31. Oktober. Darin liegen keine Einträge, also zählt der Eintrag vor dem Fenster: 100.
  6. Der Shop zeigt den Preis 80, durchgestrichen 100 und den Hinweis “niedrigster Preis der letzten 30 Tage vor der Ermäßigung: 100”.
  7. Am 15. November ist das Ergebnis dasselbe, weil das Fenster am 1. November festgemacht ist.

Schreibt das Plugin in Schritt 2 sofort 80 in die Historie, zeigt es in Schritt 6 einen niedrigsten Preis von 80. Ignoriert es in Schritt 5 den Eintrag vor dem Fenster, zeigt es nichts oder 80. Zählt es in Schritt 7 das Fenster ab heute, zeigt es 80. Jedes dieser Ergebnisse ist ein anderer Fehler, und alle drei sehen im Shop gleich aus.

#Was geht beim niedrigsten Preis in der Praxis schief?

Jede Umsetzung einer Preishistorie, ob fertiges Plugin oder individuell geschriebener Code, kann in dieselben Fallen laufen. Hier jede einzeln: woher sie kommt, wie Sie sie im eigenen Shop erkennen und was eine korrekte Umsetzung tut.

#Geplante Aktion vor dem Start gespeichert

Woher es kommt. Die Umsetzung schreibt die Historie beim Speichern des Produkts im Backend. Richten Sie dabei eine Aktion für nächste Woche ein, landet der Angebotspreis in der Historie, bevor er gilt, und kann zum niedrigsten Preis der letzten 30 Tage werden.

Wie Sie es erkennen. Planen Sie eine Aktion für morgen und prüfen Sie die Produktseite nach dem Start. Ist der niedrigste Preis gleich dem Aktionspreis, hat die Historie die Aktion zu früh gespeichert.

Was eine korrekte Umsetzung tut. Sie speichert nur eine laufende Aktion, und zwar in dem Moment, in dem WooCommerce sie startet.

#Aktionspreis als niedrigster Preis angezeigt

Woher es kommt. Das 30-Tage-Fenster wird ab dem heutigen Datum berechnet. Nach ein paar Aktionstagen fällt der Aktionspreis ins Fenster und wird zum Minimum. Denselben Effekt hat eine Historie, die nur einen Preis pro Tag speichert und Änderungen innerhalb des Tages verliert.

Wie Sie es erkennen. Vergleichen Sie bei einem reduzierten Produkt den Aktionspreis mit dem “niedrigsten Preis der letzten 30 Tage”. Sind beide gleich, obwohl das Produkt vor der Aktion mehr gekostet hat, ist die Berechnung falsch.

Was eine korrekte Umsetzung tut. Sie beendet das Fenster mit dem Start der Ermäßigung und speichert jede Änderung des aktiven Preises, auch mehrere an einem Tag.

#Kein Eintrag im Fenster bei einem Produkt mit stabilem Preis

Woher es kommt. Einträge entstehen nur bei Preisänderungen, also hat ein Produkt, dessen Preis sich seit über 30 Tagen nicht geändert hat, keinen Eintrag im Fenster. Eine Abfrage, die das Minimum nur aus Einträgen innerhalb des Fensters bildet, findet nichts. Ein Aufräumen, das alles löscht, was älter als 30 Tage ist, entfernt den einzigen Beleg für den Preis vor der Ermäßigung.

Wie Sie es erkennen. Nehmen Sie ein Produkt, dessen Preis seit über einem Monat unverändert ist, und reduzieren Sie es. Die Angabe muss den alten Preis zeigen.

Was eine korrekte Umsetzung tut. Sie bildet das Minimum aus den Einträgen im Fenster plus dem letzten Eintrag davor, und das Aufräumen lässt diesen Eintrag immer stehen.

#Niedrigster Preis in einer anderen Währung

Woher es kommt. Die Historie speichert Beträge ohne Währung, oder sie speichert die Währung, aber die Abfrage nach dem Minimum nutzt sie nicht. Ein Shop, der die Basiswährung umgestellt hat, oder ein Shop mit Mehrwährungs-Plugin, das die Währung pro Anfrage wechselt, zeigt dann einen niedrigsten Preis in einer Währung neben einem Preis in einer anderen.

Wie Sie es erkennen. Wechseln Sie im Shop die Währung und sehen Sie sich ein reduziertes Produkt an. Der niedrigste Preis muss in derselben Währung stehen wie der Verkaufspreis.

Was eine korrekte Umsetzung tut. Sie speichert die Währung bei jedem Eintrag und filtert das Minimum nach der Währung der aktuellen Anfrage.

#Einstellungen, die ein nicht konformes Ergebnis liefern

Woher es kommt. Plugins haben meist Einstellungen für die Länge des Fensters und das Verhalten in Grenzfällen. Manche davon führen zu einem Ergebnis, das nicht der Vorschrift entspricht: ein Fenster unter 30 Tagen, die Option “heute” als Quelle für den niedrigsten Preis oder die Anzeige des aktuellen Preises als niedrigsten.

Wie Sie es erkennen. Gehen Sie die Einstellungen des Omnibus-Plugins in Ihrem Shop durch: Fensterlänge und Verhalten ohne Historie.

Was eine korrekte Umsetzung tut. Sie hat Standardwerte, die der Vorschrift entsprechen, und warnt, wenn jemand sie auf nicht konforme Werte ändert.

#Fehlende Angabe in Produktrastern eines Block-Themes

Woher es kommt. In Block-Themes baut der Block Product Collection die Produktlisten. WooCommerce löst die klassischen Hooks der Produktschleife nur im Shop-Raster aus, also zeigt eine Umsetzung, die auf diesen Hooks aufbaut, auf der Startseite, bei ähnlichen Produkten und bei den Cross-Sells im Warenkorb keine Angabe. Bei zwei Anzeigequellen kann dieselbe Angabe außerdem doppelt erscheinen.

Wie Sie es erkennen. Setzen Sie auf der Startseite einen Product-Collection-Block mit einem reduzierten Produkt ein und prüfen Sie, ob beim Streichpreis der niedrigste Preis der letzten 30 Tage steht, und zwar genau einmal.

Was eine korrekte Umsetzung tut. Sie ergänzt die Angabe in jedem Raster, das einen Streichpreis zeigt, unabhängig von Block oder Template.

#Fehlende Angabe auf einer Produktseite aus einem Elementor-Pro-Template

Woher es kommt. Das Produktseiten-Template von Elementor Pro ersetzt den Hook woocommerce_single_product_summary. Eine Umsetzung, die ihre Angabe nur an diesen Hook hängt, zeigt auf so einer Seite nichts.

Wie Sie es erkennen. Öffnen Sie ein reduziertes Produkt auf einer mit Elementor gebauten Produktseite und prüfen Sie, ob die Angabe beim Preis steht.

Was eine korrekte Umsetzung tut. Sie unterstützt die Templates des Page Builders oder setzt die Angabe auf der Ebene der Preisanzeige.

#Import zählt eine Aktion, die nur geplant war

Woher es kommt. Der Import aus dem alten Plugin liest das rohe Feld des Angebotspreises. Dieses Feld enthält auch Aktionen, die nur geplant waren, und so landet ein Preis, zu dem nie jemand gekauft hat, als angewendeter Preis in der Historie.

Wie Sie es erkennen. Vergleichen Sie nach dem Import den niedrigsten Preis eines Produkts, das eine geplante, aber nie gestartete Aktion hatte, mit dem Preis, zu dem es tatsächlich verkauft wurde.

Was eine korrekte Umsetzung tut. Sie übernimmt nur Preise, die angewendet wurden, mit Datum und Währung.

#Strukturierte Daten mit der Zahl aus der Historie überschrieben

Woher es kommt. Die Umsetzung setzt den niedrigsten Preis der letzten 30 Tage im JSON-LD des Produkts an die Stelle des Angebots- oder Listenpreises aus WooCommerce. Die Suchmaschine sieht dann einen anderen Preis als den, den der Kunde zahlt.

Wie Sie es erkennen. Öffnen Sie den Quelltext eines reduzierten Produkts und suchen Sie den Block application/ld+json. Das Feld price im Angebot muss dem Preis entsprechen, den der Kunde zahlt.

Was eine korrekte Umsetzung tut. Sie ergänzt den niedrigsten Preis neben Angebots- und Listenpreis, die unverändert bleiben.

#Technisches Präfix im Warenkorb

Woher es kommt. WooCommerce zeigt Daten einer Warenkorbposition im Format “Bezeichnung: Wert”. Landet die Angabe zum niedrigsten Preis dort mit einem technischen Schlüssel, sieht der Kunde zum Beispiel das Präfix “Omnibus:”.

Wie Sie es erkennen. Legen Sie ein reduziertes Produkt in den Warenkorb und lesen Sie, was unter dem Positionsnamen steht.

Was eine korrekte Umsetzung tut. Sie zeigt einen Satz, den der Kunde ohne Kenntnis des Plugins versteht.

#Aufräumaufgabe, die nach einem Update nicht mehr läuft

Woher es kommt. Die tägliche Aufgabe, die die Historie kürzt, wird nur bei der Aktivierung des Plugins eingeplant. Ein Update ohne erneute Aktivierung lässt sie ungeplant zurück.

Wie Sie es erkennen. Öffnen Sie in WooCommerce > Status > Geplante Aktionen (oder die Liste der WP-Cron-Aufgaben) und prüfen Sie, ob die Aufgabe des Omnibus-Plugins eingeplant ist.

Was eine korrekte Umsetzung tut. Sie prüft den Zeitplan nach jedem Update und plant die Aufgabe neu ein, wenn sie fehlt.

#Übersicht

FalleSymptom im ShopSo prüfen Sie es
Geplante Aktion sofort gespeichertNiedrigster Preis gleich Aktionspreis ab dem ersten TagAktion für morgen, Kontrolle nach dem Start
Fenster ab heute gezähltNach einigen Aktionstagen sinkt der niedrigste Preis auf den AktionspreisDasselbe Produkt am 1. und 10. Aktionstag
Preis vor dem Fenster fehltKeine Angabe oder Aktionspreis als niedrigsterErmäßigung eines Produkts mit seit über 30 Tagen stabilem Preis
Währung in der Abfrage ignoriertNiedrigster Preis in anderer Währung als VerkaufspreisWährungswechsel bei reduziertem Produkt
Steuer ignoriertNiedrigster Preis um die Umsatzsteuer zu niedrigShop mit Nettopreisen im Backend und Bruttopreisen im Frontend
Varianten fehlenKeine Angabe nach Auswahl einer VarianteVariables Produkt mit Aktion auf einer Variante
Product-Collection-RasterKeine Angabe auf Startseite und bei ähnlichen ProduktenProduct-Collection-Block mit reduziertem Produkt
Elementor-Pro-TemplateKeine Angabe auf der ProduktseiteReduziertes Produkt auf Elementor-Produktseite
Import aus altem PluginNiedrigster Preis aus einer nie gestarteten AktionHistorie vor und nach dem Import vergleichen
JSON-LD überschriebenAndere Preise in den strukturierten Daten als auf der SeiteQuelltext, Feld price
Aufräumen nicht geplantHistorie wächst ohne EndeListe der geplanten Aktionen

#Wie unsere Plugins das lösen

Wir entwickeln zwei WooCommerce-Plugins mit Omnibus-Unterstützung: Shoplex, ein Plugin für EU-Rechtspflichten in WooCommerce-Shops, und Polski for WooCommerce für Shops in Polen. Beide speichern eine geplante Aktion erst, wenn WooCommerce sie startet, und beide warnen, wenn Sie das Fenster auf weniger als 30 Tage einstellen. Die Optionen “heute” und “aktuellen Preis als niedrigsten anzeigen” kennzeichnen sie als nicht konform mit Art. 6a Abs. 2 der Richtlinie 98/6/EG.

Produktseite im Demoshop mit dem Plugin Shoplex: Preis 18,00 EUR durchgestrichen, Aktionspreis 13,50 EUR, Grundpreis und Angabe des niedrigsten Preises der letzten 30 Tage 16,00 EUR

Produktseite im Testshop mit Shoplex (Oberfläche auf Englisch). Der niedrigste Preis der letzten 30 Tage (16,00 EUR) steht unter dem Aktionspreis, in derselben Währung und zusammen mit dem Grundpreis. Das Beispiel zeigt auch eine Regel aus diesem Artikel: Der niedrigste Preis aus dem Fenster muss nicht dem Streichpreis entsprechen.

Polski for WooCommerce speichert außerdem die Währung bei jedem Historieneintrag und berechnet das Minimum in der Währung, in der der Kunde das Produkt sieht. Es berücksichtigt den Preis, der beim Öffnen des Fensters galt, und Preisänderungen innerhalb eines Tages. Die Angabe folgt den Steuereinstellungen von WooCommerce und erscheint bei Varianten variabler Produkte, in Product-Collection-Rastern von Block-Themes und auf Produktseiten aus Elementor-Pro-Templates. In den strukturierten Daten ergänzt es den niedrigsten Preis neben Angebots- und Listenpreis. Es hat eine eigene Einstellung für Produkte ohne Historie und kann die Preishistorie importieren, die das Omnibus-Plugin von iworks gespeichert hat.

#Wo zeigt der Shop sonst noch eine Ermäßigung an?

§ 11 PAngV greift bei jeder Bekanntgabe einer Preisermäßigung, und § 1 Abs. 3 PAngV verlangt, dass die Angabe dem Angebot oder der Werbung eindeutig zuzuordnen ist. In WooCommerce erscheint ein Streichpreis an vielen Stellen, und jede davon wird von anderem Code erzeugt.

Block-Themes. Shop-Archiv, Startseite, ähnliche Produkte und Cross-Sells im Warenkorb sind in einem Block-Theme getrennte Blöcke. Ein Plugin, das für klassische Hooks geschrieben ist, deckt das Archiv ab, die übrigen Raster bleiben ohne Angabe. Wenn Sie Ihren Shop auf ein Block-Theme umstellen, prüfen Sie jedes davon einzeln. Die Unterschiede zwischen klassischen und Block-Themes beschreiben wir im Artikel klassische Themes vs. Block-Themes.

Page Builder. Elementor Pro und andere Page Builder mit eigenen Produktseiten-Templates ersetzen die Standard-Hooks von WooCommerce. Die Angabe muss an der Stelle hängen, die der Builder verwendet, oder direkt am Preis.

Warenkorb und Bestellübersicht. Zeigt der Warenkorb einen Streichpreis, zeigt er eine Ermäßigung. Der Text der Angabe muss für den Kunden lesbar sein, ohne technische Bezeichnungen.

Strukturierte Daten. Die JSON-LD-Daten des Produkts liest die Suchmaschine, daraus entstehen Suchergebnisse mit Preis. Das Feld price im Angebot sollte der Verkaufspreis bleiben, den der Kunde zahlt. Der niedrigste Preis der letzten 30 Tage ersetzt weder den Angebots- noch den Listenpreis.

Staffelpreise und Preise für Kundengruppen. Ein Shop mit mengenabhängigen oder rollenabhängigen Preisen hat für dasselbe Produkt mehrere Preise gleichzeitig. Bevor Sie ein Omnibus-Plugin auswählen, prüfen Sie, welchen Preis es als aktiven Preis behandelt und ob ein Gruppenpreis in die Historie geht. Hier kommt auch § 11 Abs. 4 Nr. 1 PAngV ins Spiel: Was als individuelle Ermäßigung gilt und was als Preis für eine Gruppe, sollte vor der technischen Umsetzung geklärt sein. Die Architektur solcher Preise beschreiben wir im Artikel über Staffelpreise und Grundpreise in WooCommerce B2B.

Werbung mit Preis. Ein Aktionsbanner auf der Website mit reduziertem Preis und ein Newsletter mit Aktionspreis sind Bekanntgaben einer Preisermäßigung. Diese Inhalte entstehen außerhalb der Produktseite, also muss die Zahl aus der Historie dort von Hand oder über eine Integration hinein.

#Wie wechselt man das Omnibus-Plugin, ohne die Preishistorie zu verlieren?

Die Preishistorie ist der einzige Beleg dafür, welcher Preis vor der Ermäßigung galt. Ein Pluginwechsel ohne Import setzt sie auf null, und der Shop steht 30 Tage lang wieder ohne Historie da.

Prüfen Sie vor dem Wechsel drei Dinge:

  1. Importiert das neue Plugin die Historie aus dem bisherigen? Polski for WooCommerce importiert die Historie aus dem Omnibus-Plugin von iworks. Für andere Kombinationen prüfen Sie die Dokumentation oder lassen sich von einem Entwickler ein Migrationsskript schreiben.
  2. Was genau wird importiert? Der Import soll Preise übernehmen, die angewendet wurden, mit Datum und Währung. Das rohe Feld des Angebotspreises reicht nicht, weil es auch nur geplante Aktionen enthält.
  3. Wie verhält sich das neue Plugin ohne Historie? Für Produkte, die der Import nicht erfasst, greift die Einstellung für fehlende Historie. Prüfen Sie, was dann angezeigt wird, bevor Sie Ermäßigungen starten.

Die sicherste Reihenfolge: Datenbanksicherung, neues Plugin neben dem alten installieren, Import, niedrigste Preise bei einigen Produkten in beiden Plugins vergleichen, erst danach das alte deaktivieren. Ergeben die Historien beider Plugins für dasselbe Produkt unterschiedliche Zahlen, klären Sie die Ursache vor dem Deaktivieren, denn danach gibt es nichts mehr zum Vergleichen.

#Wie prüfen Sie, ob Ihr Shop den richtigen niedrigsten Preis anzeigt?

Der folgende Test dauert auf einer Kopie Ihres Shops (Staging) etwa eine Stunde. Die Zahlen sind Beispiele, und jeder Schritt sagt, welches Ergebnis richtig ist.

  1. Geplante Aktion. Wählen Sie ein Produkt zum Preis von 100, der sich seit über 30 Tagen nicht geändert hat. Planen Sie eine Aktion zu 80 mit Start morgen. Heute darf die Produktseite weder den Preis 80 noch eine Angabe zum niedrigsten Preis zeigen. Morgen, nach dem Start, muss die Angabe 100 zeigen.
  2. Produkt mit stabilem Preis. Wenn Sie nicht bis morgen warten wollen, nehmen Sie ein anderes Produkt mit seit 40 Tagen stabilem Preis und reduzieren es sofort. Der niedrigste Preis der letzten 30 Tage ist der alte Preis. Der Aktionspreis oder eine fehlende Angabe an dieser Stelle ist ein Fehler.
  3. Fenster am Start festgemacht. Gehen Sie nach einigen Aktionstagen zum Produkt aus Schritt 1 zurück. Die Angabe muss weiterhin 100 zeigen.
  4. Änderung innerhalb eines Tages. Senken Sie bei einem Testprodukt den Preis für eine Stunde und setzen Sie ihn zurück. Starten Sie danach eine neue Aktion. Der niedrigste Preis muss die einstündige Senkung berücksichtigen.
  5. Variables Produkt. Setzen Sie eine Aktion auf eine Variante eines variablen Produkts. Nach Auswahl dieser Variante muss die Angabe zusammen mit dem Variantenpreis erscheinen. Nach Auswahl einer Variante ohne Aktion muss sie verschwinden.
  6. Währung. Wenn der Shop ein Mehrwährungs-Plugin nutzt, wechseln Sie bei einem reduzierten Produkt die Währung. Der niedrigste Preis muss in derselben Währung stehen wie der Verkaufspreis.
  7. Steuer. Vergleichen Sie den niedrigsten Preis mit dem Verkaufspreis bei Einstellungen, in denen der Shop Nettopreise erfasst und Bruttopreise anzeigt. Beide Zahlen müssen die Umsatzsteuer auf dieselbe Weise enthalten.
  8. Startseite und andere Raster. Setzen Sie ein reduziertes Produkt in einen Product-Collection-Block auf der Startseite und prüfen Sie danach ähnliche Produkte und Cross-Sells im Warenkorb. Bei jedem Streichpreis muss eine Angabe stehen, und zwar genau eine.
  9. Builder-Template. Stammt die Produktseite aus Elementor Pro oder einem anderen Page Builder, prüfen Sie ein reduziertes Produkt auf dieser Seite.
  10. Warenkorb. Legen Sie ein reduziertes Produkt in den Warenkorb. Die Angabe muss ein Satz für den Kunden sein, ohne technische Präfixe.
  11. Strukturierte Daten. Öffnen Sie den Quelltext eines reduzierten Produkts oder den Test für Rich-Suchergebnisse von Google. Der Preis im Angebot muss dem Aktionspreis entsprechen.
  12. Aufräumaufgabe. Öffnen Sie WooCommerce > Status > Geplante Aktionen und prüfen Sie, ob die Aufgabe des Omnibus-Plugins eingeplant ist. Wiederholen Sie nach ihrem Lauf Schritt 2: Der Eintrag vor dem Fenster muss erhalten bleiben.
  13. Einstellungen. Prüfen Sie, ob das Fenster 30 Tage hat und keine Option den aktuellen Preis als niedrigsten anzeigt.

Halten Sie das Testergebnis mit Datum und Screenshots fest. Wenn der Shop das Theme, den Page Builder oder das Preis-Plugin wechselt, wiederholen Sie den Test, denn jede dieser Änderungen kann einen Preis an eine Stelle verschieben, die das Plugin nicht abdeckt.

Für Shops mit Lebensmitteln oder anderer verderblicher Ware lohnt ein vierzehnter Schritt: Reduzieren Sie ein als verderblich markiertes Produkt und prüfen Sie, ob der Hinweis auf den Grund der Ermäßigung im Shop sichtbar ist. Nur dann greift die Ausnahme aus § 11 Abs. 4 Nr. 2 PAngV.

#Was tun, wenn der Test einen Fehler zeigt?

Liegt der Fehler in den Einstellungen (Fenster unter 30 Tagen, Option mit aktuellem Preis), korrigieren Sie ihn selbst im Plugin. Betrifft er die Anzeige (keine Angabe im Block-Raster, im Builder-Template oder im Warenkorb), reicht meist ein Plugin-Update oder eine kleine Änderung im Theme. Betrifft er die Historie selbst (Aktionen vor dem Start gespeichert, Preis vor dem Fenster fehlt, Währung ignoriert), braucht die Korrektur Änderungen an der Speicherlogik und oft auch eine Bereinigung der falsch gesammelten Historie.

Eine fehlerhafte Historie repariert sich nach einem Plugin-Update nicht von selbst. Einträge von Aktionen, die vor dem Start gespeichert wurden, bleiben in der Datenbank und drücken das Minimum weiter nach unten, bis jemand sie löscht oder sie aus dem Fenster fallen. Prüfen Sie nach jeder Korrektur der Logik die Historie aller Produkte, die in den letzten 30 Tagen geplante Aktionen hatten.

Dasselbe Prinzip wenden wir bei anderen Verbraucherpflichten im Shop an, zum Beispiel beim Widerrufsbutton nach § 356a BGB: Die Vorschrift beschreibt das Ergebnis, und der Shop muss es aus Daten bauen, die WooCommerce selbst nicht sammelt. Einen Überblick über weitere Shop-Plugins finden Sie in unserer Zusammenstellung der WooCommerce-Plugins.

Wenn wir die Preishistorie in Ihrem Shop prüfen, sie aus einem anderen Plugin übernehmen oder die Omnibus-Angabe für ein Block-Theme, einen Page Builder oder Kundengruppenpreise umsetzen sollen, schreiben Sie uns über die Seite WooCommerce-Entwickler. Wir beginnen mit dem Test aus diesem Artikel auf einer Kopie Ihres Shops und legen den Umfang nach seinem Ergebnis fest.

Letzte Aktualisierung: 27. Oktober 2026

Nächster Schritt

Machen Sie aus dem Artikel eine echte Umsetzung

Dieser Block stärkt die interne Verlinkung und führt Nutzer gezielt zum nächsten sinnvollen Schritt im Service- und Content-System.

Soll das Thema auf Ihrer Website umgesetzt werden?

Wenn es um Shop-Themen geht, übersetze ich das in bessere WooCommerce-Architektur, Performance und Conversion-Logik.

Relevanter Cluster

Weitere WordPress-Dienste und Wissensbasis entdecken

Stärken Sie Ihr Unternehmen mit professionellem technischen Support in den Kernbereichen des WordPress-Ökosystems.

Unterstützende Artikel

Cyber Resilience Act + NIS2 + DORA: der Compliance-Stack 2026 für headless WordPress
Cyber Resilience Act + NIS2 + DORA: der Compliance-Stack 2026 für headless WordPress

Der CRA erfasst Produkte mit digitalen Elementen. NIS2 erfasst Einrichtungen. DORA erfasst Finanzunternehmen. Headless WordPress trifft den CRA auf der Produktseite und NIS2 oder DORA auf der Kundenseite; für Finanzunternehmen gilt DORA anstelle von NIS2. Ich skizziere, wie das gemeinsame Nachweispaket 2026 aussieht.

53 Prozent WordPress-Seiten mit ungepatchten CVEs: GuardingWP-Audit 2026
53 Prozent WordPress-Seiten mit ungepatchten CVEs: GuardingWP-Audit 2026

Der erste "State of WordPress Security 2026"-Bericht von GuardingWP hat 424 bestätigte WordPress-Installationen aus mehr als 40 Branchen gescannt. Das Kernergebnis: über die Hälfte liefert mindestens ein Plugin mit bekannter ungepatchter CVE aus. Patchstack-Gründer Oliver Sild erklärte, WordPress 7.0 werde "einen absoluten Ansturm von Hackern auf API-Schlüssel" auslösen. Polemik: 53 Prozent sind kein Anwenderfehler, sondern strukturelles Ergebnis der Plugin-Ökonomie. Die Lösung steht in NIS2 Artikel 21 und DORA Artikel 28, sie verlangt jedoch ein Kontrollrahmenwerk und nicht den Kauf der nächsten Firewall.

NIS2 und DORA auf WordPress: was eine Website 2026 erfüllen muss
NIS2 und DORA auf WordPress: was eine Website 2026 erfüllen muss

Die NIS2-Richtlinie (2022/2555) sollte bis zum 2024-10-17 in nationales Recht umgesetzt werden. Die DORA-Verordnung (2022/2554) gilt unmittelbar ab dem 2025-01-17. Für Betreiber einer WordPress-Website bedeutet das konkrete Pflichten, sofern die Seite einen regulierten Akteur betrifft. Wir erklären es ohne Panik, mit Verweisen auf die Originaltexte.

Häufig gestellte Fragen

Praktische Antworten zur Umsetzung des Themas.

Zeigt WooCommerce den niedrigsten Preis der letzten 30 Tage von selbst an#
Nein. WooCommerce speichert nur den aktuellen regulären Preis, den Angebotspreis und die Daten einer geplanten Aktion. Welcher Preis vorher galt, wird nicht festgehalten, also gibt es keine Grundlage für den niedrigsten Preis der letzten 30 Tage. Sie brauchen ein Plugin oder eigenen Code, der ab der Installation jede Preisänderung aufzeichnet.
Ab wann zählen die 30 Tage bei einer geplanten Aktion#
Ab dem Tag, an dem die Ermäßigung angewendet wird. § 11 Abs. 1 PAngV spricht von den letzten 30 Tagen vor der Anwendung der Preisermäßigung. Wann das Produkt im Backend gespeichert wurde, spielt keine Rolle. Eine Aktion, die erst nächste Woche startet, darf beim Speichern nicht in die Historie wandern, sonst wird sie zum niedrigsten Preis, bevor jemand zu diesem Preis kaufen konnte.
Gilt § 11 PAngV auch für Dienstleistungen#
Nein. § 11 PAngV spricht von einer Preisermäßigung für eine Ware. Ein Shop, der über WooCommerce nur Kurse oder Beratungen verkauft, fällt nicht unter diese Pflicht. Andere Regeln zur Preisklarheit gelten trotzdem, und wer Waren und Leistungen mischt, braucht die Angabe bei jeder rabattierten Ware.
Was gilt bei Rabatten, die schrittweise steigen#
Nach § 11 Abs. 2 PAngV darf bei einer schrittweisen, ohne Unterbrechung ansteigenden Preisermäßigung während der gesamten Aktion der niedrigste Preis vor Beginn der ersten Stufe angegeben werden. Wird die Aktion unterbrochen, beginnt die Rechnung nach Abs. 1 neu.

Sie brauchen ein FAQ für Branche und Zielmarkt? Wir erstellen eine Version passend zu Ihren Business-Zielen.

Kontakt aufnehmen

Ähnliche Artikel

3 Euro Zoll pro Ware in der EU: was das für einen WooCommerce-Shop bedeutet

Vom 1. Juli 2026 bis zum 1. Juli 2028 kostet eine Sendung von außerhalb der EU mit einem Sachwert bis 150 EUR, verkauft über IOSS oder als Postsendung, 3 EUR Zoll pro Ware. Wen das betrifft, wie Shops aus der Schweiz und Dropshipping-Shops in Deutschland und Österreich rechnen, was die Bearbeitungsgebühr ab November 2026 bedeutet und wie der Zoll im WooCommerce-Warenkorb erscheint.