Inhalt zuletzt aktualisiert: 3. August 2021
Einige Anfragen von Bloglesern und ‑leserinnen kommen regelmäßig zu der Problematik, wie ein kostenfreier Versand ab einem bestimmten Bestellbetrag in WooCommerce umgesetzt wird.
Diesen Punkt finde ich auch ziemlich tricky bzw. von WooCommerce nicht allzu elegant gelöst.
Versandkostenfrei ab einem bestimmten Bestellwert: Vorgehensweise
Hier nochmals eine Fallbeschreibung:
Du entscheidest dich für kostenlosen Versand deiner Produkte, doch erst ab einem bestimmten Betrag, sagen wir mal ab einem Bestellwert von 50 Euro.
Liegt der Bestellwert darunter, fällt eine Versandkostenpauschale von 3,50 Euro an. (Meine hier genannten Werte sind natürlich beliebig austauschbar.)
Die nächsten Schritte sehen das Erstellen einer Versandkostenzone (z. B. Deutschland) vor, in der einmal der Name der Zone und dann die Zonen-Regionen festgelegt werden.
Da normalerweise bei der Wahl von Deutschland innerhalb des ganzen Landes Waren versendet wird, kann man bei den Zonen-Regionen auch “Deutschland” wählen, oder aber Postleitzahlen-Gebiete eintragen. Wenn letzteres der Fall sein sollte, gib bitte pro Zeile eine Postleitzahl ein.

Bild 1: Anlegen der Versandzone Deutschland
Im nächsten Schritt werden die Versandarten definiert.
Ich lege zuerst die Versandkostenpauschale über den Button Versandart hinzufügen an.

Bild 2: Versandkostenpauschale der Versandzone hinzufügen
Über Versandkostenpauschale im Bereich Bezeichnung werde ich diese nun bearbeiten. Ich wähle einen einfachen Betrag aus: 3,50 Euro plus MWSt. (über das Feld Steuerstatus (Besteuerbar) festgelegt), denn Versandkosten sind umsatzsteuerpflichtig, wenn du Mehrwertsteuer auf die Produkte erhebst (weitere Informationen findest du hier).
Als Kleinunternehmer brauchst du allerdings keine Mehrwertsteuer auf die Versandkosten zu berechnen.
In dem Feld Preis lässt sich auch eine Formel eintragen. Wer allerdings seine Versandkosten auf der Basis von Warenmenge, Gesamtkosten des Warenkorbs oder Gebühren berechnet, wird wohl kaum ab einem bestimmten Bestellwert kostenfreie Lieferung anbieten.

Bild 3: Preis der Versandkostenpauschale eintragen
Über den Button Versandart hinzufügen lege ich jetzt noch Kostenlose Lieferung an, der Mindestbestellwert liegt bei 50 Euro.

Bild 4: Kostenlose Lieferung festlegen
Wer in seinem Shop häufig mit Gutscheincodes hantiert, sollte in dem Feld Kostenloser Versand erfordert … statt Einen Mindestbestellwert den Wert Einen Mindestbestellwert ODER bzw. UND einen Gutschein auswählen.
Nun sind beide Versandarten im Shop festgelegt.

Bild 5: Warenkorb mit Versandkostenpauschale bei Einkaufswert von unter 50 Euro
Wenn ich jetzt in meinen Shop gehe und einen Warenwert von unter 50 Euro in den Warenkorbe lege, wird mir folgendes angezeigt:
Es wird auf eine Bestellung mit dem Wert 39,00 Euro eine Versandkostenpauschale 3,50 Euro mit 0,67 Euro MWSt. berechnet. Also genau so, wie es sein soll (siehe Bild 5).
Nun erhöhe ich den Warenkorb, damit er über 50 Euro Bestellwert liegt und keine Versandkosten anfallen sollen.

Bild 6: Trotz der Festlegung, dass ab 50 Euro Bestellwert versandkostenfrei geliefert wird, zeigt die Warenkorb-Summe neben Kostenlose Lieferung auch Versandkostenpauschale an.
Und nun passiert das, was nicht sein soll. Es wird einmal die Versandkostenpauschale (aktiv geschaltet) angezeigt und einmal die kostenlose Lieferung, d. h. der Kunde hat die Wahlmöglichkeit zwischen Versandkosten und kostenlosem Versand, was nicht sein soll, denn schließlich wird ihm ab einem bestimmten Bestellbetrag versandkostenfreie Lieferung versprochen.
Das ist aus meiner Sicht eine Schwachstelle bei WooCommerce: Wird versandkostenfrei neben Versandkostenpauschale in einer Versandzone festgelegt, wird beim Überschreiten des versandkostenpflichtigen Betrages immer auch die Versandkostenpauschale zusammen mit der kostenlosen Lieferung angezeigt.
Um diese Anzeige auszuschließen, benötigst du einen Code-Schnipsel, den du in die functions.php deines WordPress-Themes einfügen musst.
Hier ist der Code-Schnipsel:
// Alle anderen Lieferkosten ausblenden, wenn ein kostenloser Versand möglich ist
function my_hide_shipping_when_free_is_available( $rates ) {
$free = array();
foreach ( $rates as $rate_id => $rate ) {
if ( 'free_shipping' === $rate->method_id ) {
$free[ $rate_id ] = $rate;
break;
}
}
return ! empty( $free ) ? $free : $rates;
}
add_filter( 'woocommerce_package_rates', 'my_hide_shipping_when_free_is_available', 100 );
Wo findest du die functions.php?
Diese Datei kannst du unter Design -> Editor öffnen. In der rechten Spalte sind einige Theme-Dateien aufgeführt, die Datei müsste ganz schlicht functions.php oder functions plus Theme-Name heißen, wie an meinem Beispiel functions-enfold.php.
Den Code kopierst du einfach ans Ende der functions.php. Aber aufpassen, dass auch wirklich alles vollständig eingefügt wurde, sonst kommt es zu Fehlermeldungen. Die Änderungen solltest du abspeichern.

Bild 7: functions-enfold.php in meinem Beispiel (zum Vergrößern Bild anklicken)
Der Nachteil der direkten Einbindung ist der, dass bei jedem Theme-Update der Code wieder überschrieben und damit gelöscht wird.
Das Problem löst du entweder mit einem Child-Theme (dazu gibt es einige Anleitungen im Internet) oder mit dem Plugin My Custom Functions.
Ich selbst habe dieses Plugin für diesen Beitrag getestet und es hat funktioniert.
Wenn du das Plugin installiert und aktiviert hast, findest du unter Einstellungen den Punkt PHP Inserter vor. Darüber gelangst du zum Plugin und seiner Oberfläche.
Dort gibst du dann den oben aufgeführten Code-Schnipsel ein und schaltest das Plugin auf ON, erst jetzt wird es funktionieren.

Bild 8: Code-Schnipsel im Plugin My Custom Functions
Testest du jetzt den Warenkorb mit einem Mindestbestellbetrag von 50 Euro oder darüber, steht im Feld Versand bei der Warenkorb-Summe nur Kostenlose Lieferung, so wie es sein soll.

Bild 9: Nach Integration des Code-Schnipsels wird nur noch Kostenlose Lieferung ab dem festgelegten Bestellwert angezeigt.
Fazit
Ich hoffe, ich konnte mit dieser Erläuterung einige Ungereimtheiten bei der Einrichtung von kostenlosem Versand ab einem bestimmten Bestellwert ausräumen.
Ich würde mich freuen, wenn WooCommerce in einer der nächsten Versionen eine einfachere Lösung parat hätte. Dass dies umgesetzt wird, ist allerdings zu bezweifeln.
Willst du noch mehr über WooCommerce erfahren?
- WooCommerce Grundeinstellungen
- Produktverwaltung in WooCommerce
- Mehrwertsteuer und Steuerklassen in WooCommerce
- WooCommerce: Kasse, Bestellvorgang und Bezahloptionen
- PayPal im WooCommerce-Shop einrichten
- Versand, Versandarten und Versandklassen in WooCommerce
- E‑Mail-Versand in WooCommerce
- Gutscheine in WooCommerce anlegen und verwalten
- Bestellungen in WooCommerce verwalten
- Einfache Produkte im WooCommerce-Shop anlegen
- Variable Produkte in WooCommerce anlegen
- Gruppierte und Affiliate-Produkte in WooCommerce anlegen
- German Market für WooCommerce: Einstellungen
- Neue Versandeinstellungen in WooCommerce ab Version 2.6
Vielen Dank für diesen tollen Artikel!!!
Zu den Versandkosten habe ich noch eine Frage: Die Versandkosten sind also steuerbar.
Wenn bei mir die Versandkosten 3,95 Betragen und ich dann besteuerbar Auswähle, dann erscheint dann später eine Versandkostenpauschale von 4,70 Euro.
Muss ich dann also meine Versandkosten so wählen, dass inklusive der Mehrwertsteuer ein Wert von 3,95 herauskommt. Als Versandkosten gebe ich dann 3,95 geteilt durch 1,19 an bzw. das, was bei dieser Rechnung herauskommen.
Oder wie?
Hallo Herr Meyer,
was die MWSt. in den Versandkosten angeht, da habe ich vergessen, einen Hinweis in dem Artikel einzufügen. Das hole ich noch nach.
Wenn Sie als Kleinunternehmer tätig sind und keine Umsatzsteuer berechnen, brauchen Sie auch auf die Versandkosten keine Umsatzsteuer zu berechnen.
Falls doch, geben Sie in das Feld bei Versandkosten den Nettowert an: Bei Brutto-Versandkosten von 3,95 Euro wären das netto 3,32 Euro.
Recht herzlichen Dank für Ihre Antwort!
Hallo Susanne,
es ist toll, aber meine Kunde möchte die Ware bis zu 100 Euro kostenlos Liefern und danach muss bezahlen 6,00 € Versandkosten.
Was kann ich zu tun?
Oh, da fällt mir spontan auch keine Lösung ein. Da müsste wohl ein Versandplugin wie https://de.wordpress.org/plugins/flexible-shipping/ installiert werden. Ob das genannte Plugin DIE Lösung bietet, weiß ich nicht. Jedenfalls muss eine Formel erstellt werden können, dass ab einem Bestellwert von 100 Euro 6 Euro Versandkosten anfallen.
Hallo, das war schonmal super! Jetzt habe ich aber noch eine Frage: In unserem Shop soll für die meisten Produkte ab 150€ Bestellwert kein Versand anfallen, nur für eine Kategorie (die auf Palette verschickt wird) fällt immer Versand an. Kann man Artikel vom versandkostenfreien Versand ausnehmen?
Hallo Miriam,
das geht. Du erstellst für die speziellen Produkte eine eigene Versandklasse, die du ihnen in den Produktdetailseiten zuordnen kannst. Die Versandklasse kannst du in den Versandeinstellungen anlegen.
Hallo Susanne,
erst mal lieben Dank für den tollen Artikel.
Hat soweit ganz toll geholfen.
Ich habe ein Problem mit versandkostenfreien Produkten und Produkten mit Versand gleichzeitig im Warenkorb.
Sobald versandkostenfreie Produkte im Warenkorb sind, zeigt Woocommerce nur noch versanskostenfreie Lieferung an. Auch wenn Produkte mit Versandkosten enthalten sind und die Berechnungsart auf “pro Klasse” eingestellt ist.
Versandzonen habe ich schon erstellt und zugeordnet, das klappt aber nicht.
Geht das überhaupt mit den Einstellungen in Woocommerce, ohne ein zusätzliches Plugin?
Lieben Dank im Voraus für eine Antwort.
Grüße sendet Gisela
Hallo Gisela,
die Zuordnung mit Versandzonen funktioniert nicht, das ist klar. Aber auch das Einfügen des Code-Snippets (wie in dem Artikel beschrieben) funktioniert auch nicht?
Erst einmal vielen Dank für die vielen Infos. Ich habe gerade Ihren Code-Schnipsel verbaut. Das hat schon einmal mein Problem gelöst — toll! Jedoch wird jetzt die Möglichkeit “Abholen vor Ort” nicht mehr angezeigt, wenn “Versandkostenfrei” greift. Gibt es eine Möglichkeit, den Code dahingehend zu ändern?
Herzliche Grüße,
Linda
Hallo Linda,
stimmt, das ist mir jetzt auch aufgefallen, dass dann Abholen vor Ort wegfällt. Ich schaue nach, wie der Code umgeändert werden muss.
Gibt es schon eine Möglichkeit dass “Abholen vor Ort“ wieder funktioniert mit dem Code?
Nein, habe noch nichts gefunden. :-(
Hallo Peter,
was Ihre Anfrage bzgl. der Anzeige von “Abholung vor Ort” bei versandkostenfreier Bestellung angeht: Falls Sie das Plugin German Market verwenden, können Sie dieses Skript (wie es in diesem Artikel vorgestellt wird) wieder entfernen. In German Market gibt es unter Allgemein -> Bestellvorgang die Einstellung “Blende Versandkostenpauschalen aus, wenn eine kostenlose Lieferung verfügbar ist”. Aktivieren Sie diese Option, wird bei versandkostenfreier Lieferung auch die Alternative “Abholung vor Ort” angezeigt. Sollten Sie dieses Plugin nicht verwenden, kann ich es Ihnen nur empfehlen. :-) Auch wegen anderer Einstellungen, die den Shop für Deutschland rechtssicher machen.
Kann bitte jemand sagen, ob es nun eine Lösung bezüglichl. “Abholung vor Ort” gibt? Ich benutze das Plugin Woocommerce Germanized und möchte kein German Market Plugin installieren.
Bitte um Hilfe!
Hallo Sahin,
bietet WooCommerce Germanized hierzu keinen Support an? Wenn nicht, frage mal bei der WooCommerce-Community nach. Da müsste auf der WordPress-Seite ein Forum existieren.
Hey, super hilfreich! Meine Frage: Kann ich auch für eine bestimmte plz einen bestimmten Mindestbestellwert darüber festlegen. Also das bei der plz 8001 und 20€ die Meldung kommt, dass noch 10 € für den Versand fehlen. DANKE :-)
Hallo Marc,
sowas habe ich noch nicht umgesetzt.
Du müsstest zuerst ein Plugin für die Festsetzung eines Mindestbestellwertes installieren oder ein Code-Snippet erstellen (Quellen dazu findest du im Internet).
Ob sich dieser Mindestbestellwert dann mit einer Versandzone (für die PLZ brauchst du eine eigene Versandzone) verknüpfen lässt, kann ich dir leider nicht sagen.
Hallo Peter,
probier es mal mit diesem Code für die Anzeige Abholung vor Ort und Versandkostenfrei
/**
* Hide shipping rates when free shipping is available, but keep “Local pickup”
* Updated to support WooCommerce 2.6 Shipping Zones
*/
function hide_shipping_when_free_is_available( $rates, $package ) {
$new_rates = array();
foreach ( $rates as $rate_id => $rate ) {
//Only modify rates if free_shipping is present.
if ( ‘free_shipping’ === $rate->method_id ) {
$new_rates[ $rate_id ] = $rate;
break;
}
}
if ( ! empty( $new_rates ) ) {
//Save local pickup if it’s present.
foreach ( $rates as $rate_id => $rate ) {
if (‘local_pickup’ === $rate->method_id ) {
$new_rates[ $rate_id ] = $rate;
break;
}
}
return $new_rates;
}
return $rates;
}
add_filter( ‘woocommerce_package_rates’, ‘hide_shipping_when_free_is_available’, 10, 2 );
Vielen herzlichen Dank für diese gut nachvollziehbare Anleitung und einfache Umsetzungsmöglichkeit!
Hallo,
danke für den Beitrag.
Habe das Plugin downgeloadet und den Code eingefügt. Funktioniert aber leider nicht.
Gibt es mittlerweile einen anderen Code? Habe Woocommerce 3.9.1
Danke.
Hallo,
es müsste eigentlich noch funktionieren. Hast du das Plugin My custom functions verwendet? Ich muss es aber noch testen.
Ich habe das Snippet getestet und es funktioniert noch.
Hey, kennt ihr ein Plugin, das dann auch die Differenz bis zum versandkostenfreien Betrag prominent anzeigt und so den Kunden zu einem höheren Warenkorb motiviert?
Hallo Heiko,
so ein Plugin habe ich auch schon gesucht. Leider noch nichts gefunden. Wahrscheinlich muss man so einen Hinweis programmieren.
Hat mir auch sehr geholfen. Vielen Dank!
Super Tipp! Direkt umgesetzt. Danke sehr
Wirklich ein sehr guter Tipp! Habe es direkt functions.php eingefügt und es hat funktioniert! Dankeschön für die tolle Erklärung.
Vielen dank für den Schnipsel,
habe ich in der aktuellsten Version getestet.
VG Oliver
Hallo Susanne,
ich bedanke mich auch für den guten Artikel. Ich habe auch eine Frage, bwz. komme an einer Stelle nicht weiter. Ich habe zwei Versandklassen mit unterschiedlichen Versandkosten, versandkostenfreie Lieferung ab einem bestimmten Betrag und Abholung vor Ort. Wenn eigentlich eine Versandklasse greifen sollte, zeigt es nur die Option Abholung vor Ort an. Wenn die Option für die versandkostenfreie Lieferung gegeben ist, erscheint die Auswahl versandkostenfrei oder Abholung vor Ort. Haben Sie eine Idee, woran das liegen könnte? Viele Grüße, Michael
Hallo Michael,
ohne eine Einsicht in den Shop kann ich das leider schlecht beurteilen. Ich hatte so eine ähnliche Versandkonstellation auf meinem Testshop und da hat es funktioniert.
Hallo Susanne,
du benötigst einen Zugang zum Backend, richtig? Mittlerweile konnte ich es wechseln, allerdings nun nur versandkostenfreie Lieferung über einem Bestimmten Betrag, dafür nun keine Abholung vor Ort mehr.
Hallo Michael,
wenn du mit den neuen Versandoptionen zufrieden bist, ist es ok.
Hallo Susanne,
wirklich klasse und einfach erklärt.
Bin es ja mittlerweile gewohnt die function.php anzupassen, wenn noch etwas essentielles fehlt…
Ich habe WooCommerce 4.4.1 und Germanized 3.1.12.
Habe deinen Code auch mit My Custom Functions reinkopiert und aktiviert und es fiunktioniert leider nicht.
Es werden trotzdem beide Varianten angeboten (Pauschale und kostenfrei)
Auch wenn ich es in die functions.php direkt einfüge geht es leider nicht.
Hallo Matthias,
an deiner Stelle würde ich im WooCommerce-Forum eine Anfrage stellen: https://de.wordpress.org/support/forum/woocommerce/
Vielleicht wissen die, woran es hakt.
Hallo, danke für diese ausführliche Erklärung! Ich hätte noch das Problem, dass wenn jemand unter 50 Euro bestellt, sagen wir 40 Euro inklusive 4 Euro Versand, dass er sobald er einen Gutschein im Wert > 40 Euro einlöst, der Versand nicht vom Gutschein gezahlt wird. Es sollte in diesem Fall auch keinen gratis Versand geben, jedoch sollte man ihn mit dem Coupon bezahlen können. Gibt es dafür eine Alternative? LG
Vielen Dank, Susanne, der Tipp mit dem Plugin ‘Flexible Shipping’ hat mich gerettet :)
Gruss aus der Schweiz, Daniel
Ganz super, vielen Dank Susanne!!
Hallo,
aus meiner Sicht kann man sich den Codeschnipsel komplett sparen. Ich habe die kostenlose Lieferung in der Hierarchie der Versandarten einfach nach oben geschoben. Da diese Versandklasse unter 50 EUR nicht erscheint, nimmt er also die Versandkostenpauschale. Ist der Warenkorb nun größer als 50 EUR erscheint Frei-Haus ganz oben und ist somit aktiviert.
Sehr guter Artikel, vielen Dank!
Genau die Lösung, nach der ich gesucht habe. Vielen Dank :)
Gruß Sascha
Vielen Dank für diesen guten Artikel @Susanne Braun!
Da ich auch das Problem hatte, dass die Abholung vor Ort mit dem Code-Schnipsel verschwindet, habe ich den o.g. Vorschlag von Tobias Volke (21. August 2019 um 23:47 Uhr) ausprobiert. Das funktioniert prima. Vielen Dank dafür @Tobias Volke!
Vielen Dank für diesen Artikel! Ich habe lange danach gesucht, wie ich die Versandpauschale in WooCommerce ausblenden kann, und deine Anleitung hat auf Anhieb funktioniert!
Hallo Marco,
also bei mir funktioniert der Code auch nicht.
Ich kann dir das kostenpflichtige Plugin German Market empfehlen. Dann bist du das Problem los.
Auch ich danke vielmals für den Code. Habe aber festgestellt, wenn das Theme geupdatet wird, wird der Code ebenfalls gelöscht.
Der Schnipsel funktioniert ebenfalls unter plugins/woocommerce-checkout-manager.php.
Jedoch noch keine Erfahrung bei Updates.
Hallo Phil,
damit der Code nicht bei jedem Update gelöscht wird, ist es besser, ein Child-Theme zu verwenden oder das Plugin My Custom Functions.
Nice, funktioniert aber nicht so, wie es sein sollte:
Wenn man 2 Versandarten hat: Einmal Versand mit 4,99 EUR Versandkosten bei einem Bestellwert von unter 100 EUR und kostenfrei über 100 EUR
UND eine weitere Versandart „Click and Collect“ (Kostenlos), dann wird bei dem Codeschnipsel nicht Click and Collect angeboten werden, auch wenn der Mindestbestellwert über 100 EUR ist.
Ist das möglich?
Hallo Susanne, perfekt, vielen Dank für den Tipp mit My Custom Funktions. Liebe Grüsse, Phil
Funktioniert der Code bei jemandem?
Bei mir nicht, bräuchte aber genau das, dass Click & Collect immer möglich ist und als Radio button angeboten wird. Danke!
/**
* Hide shipping rates when free shipping is available, but keep “Local pickup”
* Updated to support WooCommerce 2.6 Shipping Zones
*/
function hide_shipping_when_free_is_available( $rates, $package ) {
$new_rates = array();
foreach ( $rates as $rate_id => $rate ) {
//Only modify rates if free_shipping is present.
if ( ‘free_shipping’ === $rate->method_id ) {
$new_rates[ $rate_id ] = $rate;
break;
}
}
if ( ! empty( $new_rates ) ) {
//Save local pickup if it’s present.
foreach ( $rates as $rate_id => $rate ) {
if (‘local_pickup’ === $rate->method_id ) {
$new_rates[ $rate_id ] = $rate;
break;
}
}
return $new_rates;
}
return $rates;
}
add_filter( ‘woocommerce_package_rates’, ‘hide_shipping_when_free_is_available’, 10, 2 );
Hallo Marco,
ja, du hast recht. Wenn du den Codeschnipsel verwendest, steht dir die Abholung vor Ort bzw. Click and Collect nicht zur Verfügung.
Ich habe schon längere Zeit nach einem Code gesucht, in dem diese Option auch enthalten ist, aber noch nichts gefunden. :-(