In WooCommerce können verschiedene Arten von Versandkosten definiert werden. Diese reichen von lokaler Zustellung über eine Versandkostenpauschale bis hin zum Kostenlosen Versand. Eine häufig gewählte Option ist der kostenlose Versand ab einem bestimmten Einkaufswert. Wird hier ein bestimmter Wert im Warenkorb überschritten, wird der kostenlose Versand freigeschaltet. Standardmässig wird auf der Warenkorb- und Kassenseite in WooCommerce der kostenlose Versand als weitere Option zu den schon bestehenden Versandarten angezeigt. Dies ist etwas verwirrend, denn welcher Kunde will schon die Option haben, für seine Bestellung Versandkosten zu bezahlen, wenn er sie auch kostenlos geliefert bekommt.
Kostenloser Versand ab einem bestimmten Betrag
In den WooCommerce Einstellung kann unter „Versand“ der kostenlose Versand aktiviert werden. Unter Einstellungen kann zusätzlich definiert werden, ob die Versandart für alle, oder nur für bestimmte Länder gelten soll. Zudem können verschiedene Bedingungen definiert werden, unter denen diese Versandart aktiviert wird. Damit kann auch ein Betrag definiert werden, ab welchem die Bestellung kostenfrei verschickt wird.
Wird der kostenlose Versand zudem als Standard definiert, so wird dieser im Bestellprozess des Kunden automatisch vorausgewählt, sobald dieser verfügbar ist.
Das Verwirrende für den Kunden ist hier, dass er immer noch die Möglichkeit hat, die Versandkostenpauschale von CHF 10.- (oder andere Versandarten, falls diese aktiviert sind) zu wählen. Das mag in Fällen Sinn machen, wo man noch Express-Lieferungen auswählen kann, die zusätzliche Kosten verursachen. Wenn die Lieferart aber gleichwertig ist, und sich nur durch die Lieferkosten unterscheidet, dann sollte die Versandkostenpauschale automatisch ausgeblendet werden, sobald der kostenlose Versand erreicht ist.
Andere Lieferkosten automatisch ausblenden
Genau dies kann mit einem Filter definiert werden. Hier kommt es aber darauf an, welche WooCommerce Version verwendet wird.
Code für WooCommerce Version 2.5
Dafür wird der folgende Code in der functions.php (am besten in einem Child-Theme, um die Funktion auch nach einem Theme-Update zu erhalten) eingefügt:
// Alle anderen Lieferkosten ausblenden, wenn ein kostenloser Versand möglich ist add_filter( 'woocommerce_package_rates', 'hide_shipping_when_free_is_available', 10, 2 ); function hide_shipping_when_free_is_available( $rates, $package ) { if ( isset( $rates['free_shipping'] ) ) { $free_shipping = $rates['free_shipping']; $rates = array(); $rates['free_shipping'] = $free_shipping; } return $rates; }
Code für WooCommerce Version 2.6 und höher
Dafür wird der folgende Code in der functions.php (am besten in einem Child-Theme, um die Funktion auch nach einem Theme-Update zu erhalten) eingefügt:
// 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 );
Dieser Filter sorgt dafür, dass die anderen Versandarten deaktivert werden, sobald die kostenlose Versandart aktiv wird.
Quelle: http://docs.woothemes.com/document/hide-other-shipping-methods-when-free-shipping-is-available/
Hallo!
Danke für Deine ausführliche Beschreibung. Ich versucher genau dieses Problem derzeit zu lösen. Leider hat es bei mir nicht geklappt. Wo genau muss ich es den bei functions.php einfügen?
Danke für die Hilfe!
Viele Grüße,
Mirella
Hallo Mirella
Wo in der functions.php das eingefügt wird sollte eigentlich keinen Einfluss haben… ich würde aber unbedingt noch kontrollieren, ob beim kopieren des Codes die Anführungs- und Schlusszeichen richtig übernommen wurden. Die Artikel auf der Webseite haben irgendwie die Eigenart, dass sie manchmal beim Speichern die Art der Anführungszeichen ändern. Ich würde dir deshalb empfehlen, nach dem Einfügen des Codes in deine functions.php alle einfachen Anführungs- und Schlusszeichen nochmals manuell zu löschen und sie per Tastatur nochmals zu schreiben. Meistens sieht man dann auch, dass das Zeichen leicht anders aussieht.
Viel Erfolg und Grüsse
Christoph
Hallo Christoph
Du glaubst nicht, wie oft ich schon in der functions.php was eingetragen habe und es dann doch nicht funktioneirte. Auch beim obigen Code dachte ich „schon wieder ein Code, der nicht mehr funktioniert…“. Dann habe ich deinen Kommentar gelesen, die Anführungszeichen manuell geändert und wieder den Shop getestet. SUPER!! Endlich klappt es! Vielen Dank für den tollen Tip!
Grüsse
Andi
Hallo Christoph,
ich habe die Anführungs- und Schlusszeichen richtig eingebunden, leider funktioniert die Funktion dennoch nicht. Heißt die Funktion ‘woocommerce_available_shipping_methods’ vielleicht anders bei der aktuellen Woocommerce-Version? Ich nutze 2.3.5 mit WooCommerce Germanized und Woocommerce Deutsch.
Vielen Dank für Deine Hilfe im voraus!
Herzliche Grüße,
Klaudija
Hallo Klaudija
Du hast recht, scheinbar funktioniert die Funktion in der Version 2.3.5 nicht mehr. Ich habe aber eine Funktion gefunden, welche bei mir auch in der neusten Version funktioniert. Ich habe den Artikel entsprechend angepasst, sodass die Version oben aktuell sein sollte (der Hinweis mit den Anführungszeichen gilt allerdings auch hier noch).
Viel Erfolg und Grüsse
Christoph
Es ist schon länger her. Aber vielleicht ist Christoph noch aktiv. Mit dem Code klappt es – jedoch habe ich ein Problem. Wenn ich kostenlosen Versand für das Ausland ausschalte, er aber vom Bestellwert her möglich ist, dass ist keine Versandart möglich. Wie kann ich das Problem beheben?
Hallo Jonny
Leider kann ich dir da nicht weiterhelfen, da wir bis jetzt keinen Shop mit diesen Konfigurationen haben, der auch ins Ausland liefert. Ich kann dir deshalb nur raten, in anderen Foren oder Seiten weiterzusuchen.
Viel Erfolg und Grüsse
Christoph
moin christoph,
seit gestern gibt es das update von woocommerce auf 2.6.0. seitdem funktioniert bei mir die funktion nicht mehr, dass alle versandmethoden ausgeblendet werden, sobald der mindestbestellwert erreicht wurde. auch mit deinem code hier nicht.
hast du das problem auch schon?
gruß
sophie
Hallo Sophie
Ich warte bei einem solchen grösseren Update jeweils noch einige Wochen bevor ich das Update mache, weil die Plugin-Entwickler allfällige Fehler zuerst beheben müssen. Ich werde im konkreten Fall auch wieder neu suchen müssen (für das Problem mit den Versandkosten), und kann dir deshalb im Moment noch keine aktualisierte Version anbieten.
Grüsse Christoph
Hallo Sophie
Inzwischen wurde von WooCommerce ein Filter veröffentlicht, welcher für die Version 2.6 funktioniert. Ich habe den Beitrag entsprechend angepasst.
Grüsse Christoph
Hallo Sophie,
hallo Christoph,
ich bin auf Grund der gleichen Thematik auf diese Seite gelangt.
Ich habe nun von einer anderen Seite raus gefunden, dass WooCommerce Germanized hierfür unter „Anzeige“ die Funktion „Kostenlosen Versand erzwingen wenn die Methode zur Verfügung steht?“ anbietet. Dort einfach einen Haken machen und speichern nicht vergessen.
Dies bewirkt bei mir genau den gewünschten Zweck ohne Änderung in der functions.php.
Ich hoffe das hilft weiter.
Gruß, Ea9Le
Hallo Ea9Le
Vielen Dank für den Hinweis. Für Leute welche dieses Plugin einsetzen ist das sicher eine gute Lösung, aber ich würde jetzt nicht extra das umfangreiche Plugin installieren, nur um diese Option zu haben. Hier findet sich hoffentlich noch eine einfachere Lösung für diese Problemstellung.
Grüsse
Christoph
Hallo Ea9Le
Inzwischen wurde von WooCommerce ein Filter veröffentlicht, welcher für die Version 2.6 funktioniert. Ich habe den Beitrag entsprechend angepasst. Das wäre dann die Variante ohne Plugin.
Grüsse Christoph
Hallo Christoph,
Danke für diesen Artikel, ich habe auch eine Installation in der ich den Code gut gebrauchen konnte.
Herzlichen Dank dafür!
LG Daniela
Hallo Christoph,
vielen Dank für deinen Beitrag. Hat mir schon mal weitergeholfen. Ich nutze ein Plugin Namens Cash on Pickup. Dieses ermöglicht die Versandart „Abholung vor Ort“ sowie dementsprechend die Barzahlung. Leider wird diese „Versandart“ auch ausgeblendet mit deinem Script. Hast du eine Idee wie ich speziell die Abholung vor Ort von deinem Filter ausschließen kann?
Vielen Dank und Liebe Grüße
Sergei
Hallo Sergei
Da bin ich ehrlich gesagt auch überfragt. Ich hab die Funktion direkt von WooCommerce übernommen (Quelle im Artikel) – ich würde die Funktion einmal dem Plugin-Entwickler deines Plugins zeigen und dort fragen, ob er weiss, wie man seine Versandart herausnehmen kann.
Beste Grüsse
Christoph
Hier scheint’s die Lösung zu geben
https://wordpress.org/support/topic/show-free-shipping-and-pickup/
Hier ist die Lösung, wobei die Werte nach dem Doppelpunkt jeweils die „instance_id“ aus der Datenbank sein müssen.
add_filter( ‚woocommerce_package_rates‘, ‚bbloomer_unset_shipping_when_free_is_available_in_zone‘, 10, 2 );
function bbloomer_unset_shipping_when_free_is_available_in_zone( $rates, $package ) {
// Only unset rates if free_shipping is available
if ( isset( $rates[‚free_shipping:2‘] ) ) {
unset( $rates[‚flat_rate:4‘] );
}
return $rates;
}
Vielen Dank Rainer, dass du die Lösung hier ebenfalls gepostet hast.
Beste Grüsse
Christpoh
Hallo Christoph,
kann es sein, dass der Code nicht bei allen Themes funktioniert? Habe jetzt mehrmals herumprobiert, jedoch leider ohne Erfolg.
Danke,
Michael
Hallo Michael
Das kann natürlich sein. Was bei mir aber auch einmal nötig war, ist die Seite zu aktualisieren, die vorhandenen Produkte aus dem Warenkorb zu entfernen und neue zu wählen (irgendwie war jeweils noch eine alte Version im Cache). Wenn das auch nicht hilft ist es natürlich schon möglich, dass das Theme hier einen Einfluss hat – das könntest du natürlich einmal testen, indem du nach einem Backup auf ein Standard-Theme wechselst.
Viel Erfolg und Grüsse
Christoph
Unglaublich. Manchmal ist die Lösung so nah. Ein Refresh hat die gewünschte Lösung gebracht, vielen Dank für den Denkanstoss!
Kostenloser Versand ab einem bestimmten Betrag!?
Hallo miteinander,
ich nutze WooCommerce 4.6.1 neuste Version.
Weiss jemand wie ich hier den kostenlosen Versand ab einem bestimmten Betrag aktivieren kann?
Beste Grüsse Dan
Hallo Dan
Das kannst du normal im Modul des Kostenlosen Versands einstellen. Dort kannst du den Mindestbestellwert eingeben. Das ist der Betrag, ab welchem der kostenlose Versand aktiviert wird.
Grüsse
Christoph
Hi Christoph,
Bei mir schaut das WooCommerce Menu nicht aus wie beschrieben.
Unter Versand habe ich keinen Menüpunkt “Kostenloser Versand” und auch keine Eintragungsmöglichkeiten für einen Mindestbestellwert.
So schaut’s bei mir aus; http://webboxone.ch/demo/screen_11.22.16.png
Keine Ahnung warum?
Hallo Dan
Ich glaube da bist du noch einen Schritt zuwenig weit. Wenn du in deinem Bild rechts auf das graue Plus klickst, dann kannst du neue Versandarten hinzufügen. Da müsstest du dann den „kostenlosen Versand“ auswählen (so wie du schon „Abholung vor Ort“ und „Postversand“ drin hast). Die Optionen siehst du dann erst, wenn diese Versandart hinzugefügt wurde.
Grüsse
Christoph
Hallo Christoph
Kleine Frage, du meinst die functions.php im theme Ordner, richtig?
Wenn ich in meinem Theme die function mit der Funktion anpasse erhalte ich:
Parse error: syntax error, unexpected ‚add_filter‘ (T_STRING), expecting function (T_FUNCTION) in …../wp-content/themes/jupiter/functions.php on line 407
Kannst du mir helfen?
Hallo Bruno
Ja, es sollte mit der functions.php im Theme Ordner klappen (idealerweise erstellt man ein sogenanntes Child-Theme, damit die Änderungen nach einem Update des Themes nicht alle wieder überschrieben werden. In diesem Fall nimmt man die functions.php Datei des Child-Theme Ordners).
Ich kann Dir nur die zwei Tipps geben, einmal zu kontrollieren, ob Du die richtige Version verwendest (für WooCommerce 2.5 oder kleiner, oder 2.6 und grösser), und zum zweiten, ob die Anführungs- und Schlusszeichen beim kopieren von der Webseite irgendwie verändert werden (das ist mir auch schon passiert). Es sollten einfache Anführungs- und Schlusszeichen sein.
Ich hoffe das hilft Dir weiter.
Grüsse
Christoph
Hallo Christoph,
ich benutze Woocommerce 3.2.3 und habe deinen Code für Version 2.6 und höher verwendet. Dieser funktioniert sehr gut, bis auf eine Kleinigkeit. Nach der Integration des Codes funktioniert die Aktualisierung des Warenkorbes nicht mehr richtig. D.h., wenn sich Produkte bereits im Warenkorb befinden und bspw. die Anzahl der Produkte verändert und anschließend der Warenkorb aktualisiert wird (per Klick auf „Warenkorb aktualisieren“), dann wird dem User eine leere Warenkorbseite angezeigt. Erst bei manuellem zusätzlichen Klick auf „Warenkorb“ wird die Ansicht aktualisiert und das Ergebnis deines Codes wird sichtbar. Nach der Entfernung deines Codes funktioniert der Warenkorb wieder 100%, inkl. Aktualisierungen innerhalb des Warenkorbes. Ist dir dieses Problem bereits bekannt? Hast Du eine Idee was das Problem sein kann?
Viele Grüße,
Enrico
Hallo Enrico
Ich kenne das Problem ehrlich gesagt nicht. Ich würde einmal schauen, ob es irgendwelche Plugins gibt, welche diese Funktion stören, oder Du ob in der functions.php irgendwelche Codes eingetragen hast, welche einen Einfluss haben könnten. Gemäss der offiziellen WooCommerce Anleitung scheint der Code immer noch aktuell zu sein: https://docs.woocommerce.com/document/hide-other-shipping-methods-when-free-shipping-is-available/
Beste Grüsse
Christoph
Hallo Christoph,
vielleicht kannst du mir helfen. Ich habe in WooCommerce verschiedene Versandarten angelegt und den Produkten die Versandklassen zugeordnet. Folgendes Problem: Wenn man nicht eingeloggt ist, steht überall bei jedem Produkt „kostenloser Versand“. Wenn man sich einloggt und bis zum Versand weiterklickt wird der Versand aber drauf gerechnet. Wie kann ich das ändern, dass ich bei jedem Produkt selbst bestimme ob kostenloser Versand oder wie hoch dieser ist. Irgendwo ist ein Haken gesetzt oder irgendetwas. Kannst du mir helfen?
Viele Grüße
Tina
Hallo Tina
Vielleicht spielt da auch ein anderes Plugin mit rein, hast Du schon einmal versucht, zusätzliche Plugins zu deaktivieren und zu schauen, ob sich am Verhalten was ändert? Ich wüsste sonst ehrlich gesagt auch nicht, was ich Dir da konkret raten sollte.
Grüsse Christoph
Vielen Dank für Ihre schnelle Antwort. Ich habe die Lösung des Problems gefunden und möchte dieses hier teilen. Das Problem war, dass die Produkte alle auf Versandkostenfrei standen, weil in WooCommerce -> Einstellungen -> German Market -> Produkte-> „Kostenlosen Versand anzeigen“ auf „JA“ stand. So einfach kann es manchmal sein.
Nun kann man den einzelnen Produkten über Einstellungen -> Versand die jeweiligen Versandart zuweisen, also manche sind Kostenfrei und manche eben nicht.
Das freut mich, danke für das Feedback und die „Lösung“.
Grüsse
Christoph
Vielen Dank für diesen extrem hilfreichen Tipp. Ich war schon am verzweifeln. Jetzt klappt alles super.
Interessant, dass man die Versandkostenpauschale eher ausblenden sollte, wenn die Lieferart ohnehin kostenlos ist. Ich biete in meinem Woocommerce Store auch nur kostenlose Lieferung oder Expressdienst an. Wenn der Kunde sich für eine kostenlose Lieferung qualifiziert, dann erscheint im Check-Out keine zusätzliche Berechnung.
Hier habe ich das Problem mit dem Plugin „Conditional Shipments and Pricing“ (https://woocommerce.com/products/conditional-shipping-and-payments/) gelöst. Hatte das Problem, dass ich Versandkosten nach Gewicht und Land anlegen wollte. Dann sollte der Kunde nur di einzig mögliche Option präsentiert bekommen. Geht mit langer Konfiguration des Plugins sehr gut!