Zur Suche springen Zur Navigation springen Zum Hauptinhalt springen Zum Footer springen

WooCommerce: Andere Versandarten entfernen, wenn kostenlose Lieferung verfügbar ist

WooCommerce, die am weitesten verbreitete eCommerce-Erweiterung für WordPress, bietet eine Vielzahl an Einstellmöglichkeiten für den Versand von Waren. Verschiedenen Versandzonen können unterschiedliche Versandarten hinzugefügt werden. In vielen Online-Shops ist es gewünscht, dass alle bzw. ausgewählte Versandarten ausgeblendet werden, sobald die Option »Kostenlose Lieferung« zur Verfügung steht. Diese Funktion bietet WooCommerce nicht über den Administrationsbereich – doch sie lässt sich im Code nachrüsten.

Versandarten den Versandzonen hinzufügen

In WooCommerce gibt es standardmäßig drei verschiedene Versandarten:

Diese Versandarten können unter WooCommerce → Einstellungen → Versand → Versandzonen den einzelnen Versandzonen hinzugefügt werden. Jede Versandart kann pro Zone auch mehrfach vergeben werden und mit unterschiedlichen Werten versehen werden. Das ist vor allem dann sinnvoll, wenn man mehrere Versanddienstleiter mit verschiedenen Konditionen hat oder eine Express-Lieferung anbieten möchte.

Eine Berechnung der Versandkosten bezogen auf das Gewicht oder die Anzahl von ausgewählten Artikeln gibt es in WooCommerce standardmäßig nicht.

Andere Versandarten bei kostenloser Lieferung entfernen

Wenn als Versandart »Kostenlose Lieferung« aktiviert ist und ein Kunde des Shops nun entweder den Mindestbestellwert für diese Versandart erreicht hat oder einen Gutschein dafür eingelöst hat kann es teilweise verwirrend sein, dass auch noch alle anderen Versandarten angezeigt werden.
Um diese Versandarten nun für den Kunden des Shops im Bestellprozess auszublenden bzw. zu entfernen fügt einfach folgendes Snippet in eure functions.php oder in ein seitenspezifisches Plugin ein.

Bevor ihr das folgende Snippet in euer Theme integriert, solltest ihr den WooCommerce-Transienten-Cache leeren. Andernfalls kann es passieren, dass eure Änderungen nicht sofort sichtbar sind. Den Cache könnt ihr unter folgendem Pfad löschen: WooCommerce → Status → Werkzeuge → WooCommerce-Transienten → Transients leeren

function kb_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', 'kb_hide_shipping_when_free_is_available', 100 );

Ausgewählte Versandarten trotz kostenloser Lieferung anzeigen

Möchtet ihr dem Kunden zusätzlich zur kostenlosen Lieferung noch weitere Versandarten anbieten, beispielsweise die »Abholung vor Ort« oder eine Express-Lieferung, so könnt ihr diese Ausnahmen mit Hilfe des folgenden Snippets lösen. Fügt es einfach in eure functions.php oder in ein seitenspezifisches Plugin ein und passt die Abfrage auf euren Shop an.

Ausnahme mit Hilfe der Versandart hinzufügen

Die Ausnahme, welche Versandarten zusätzlich zur kostenlosen Lieferung angezeigt werden sollen, kann direkt über die ID der Versandart erfolgen. Die IDs für die drei standardmäßigen Versandarten sind »flat_rate«, »free_shipping« und »local_pickup«. Es werden dabei alle Optionen angezeigt, die dieser Versandart zugewiesen sind.

Ausnahme mit Hilfe des Titels einer Versandart-Option

Möchtet ihr eine ganz spezielle Versandart-Option als Ausnahme hinzufügen, jedoch nicht alle Optionen dieser Versandart, bietet es sich an anhand des Titels der Versandart-Option zu filtern.

Im Beispiel entfernen wir die Versandart »Versandkostenpauschale« mit Ausnahme der Versandart-Option »Express-Lieferung«.

function kb_hide_shipping_when_free_is_available( $rates ) {
  $new_rates = array();
  foreach ( $rates as $rate_id => $rate ) {
    if ( 'free_shipping' === $rate->method_id ) {
      $new_rates[ $rate_id ] = $rate;
    }
  }
  if ( ! empty( $new_rates ) ) {
    foreach ( $rates as $rate_id => $rate ) {
      // Ausnahme mit Hilfe der Versandart
      if ('local_pickup' === $rate->method_id ) {
        $new_rates[ $rate_id ] = $rate;
      }
      // Ausnahme mit Hilfe des Titels einer Versandart-Option
      if ('Express-Lieferung' === $rate->label ) {
        $new_rates[ $rate_id ] = $rate;
      }
    }
    return $new_rates;
  }
  return $rates;
}
add_filter( 'woocommerce_package_rates', 'kb_hide_shipping_when_free_is_available', 10, 2 );

Geschrieben von Robert Menzel

Benutzerbild

Robert arbeitet als Frontend-Developer und Web-Designer bei kulturbanause. Zu seinen Aufgaben gehören die visuelle Gestaltung und die technische Umsetzung von Websites, eCommerce-Shops oder dessen Kombination. Besonders gerne übernimmt er die Entwicklung individueller und anspruchsvoller Websites mit umfangreichen ineinandergreifenden Funktionen, getreu dem Motto: »Der beste Lack bringt nichts, wenn die Maschine darunter nicht läuft.«

Feedback & Ergänzungen – 22 Kommentare

  1. Gabi Brüchert
    schrieb am 24.03.2024 um 20:01 Uhr:

    Hallo Robert,

    vielen Dank für deinen tollen Beitrag.
    Ich habe folgendes Problem und ich hoffe du kannst mir weiter helfen: Bei uns ist die kostenlose Lieferung an unterschiedliche Mindestbestellwerte je nach Land aufgeschlüsselt. Für Deutschland funktioniert das Snippet einwandfrei. Für Österreich, der Mindestbestellwert ist dort höher, greift das Snippet nicht. Hast du eine Lösung für mich? Vielen Dank.
    Viele Grüße
    Gabi

    Antworten
    • Robert Menzel
      schrieb am 25.03.2024 um 14:20 Uhr:

      Hallo Gabi,

      so ohne weitere Recherche kann ich dir hier leider nicht helfen. Vielleicht weiß ja jemand aus der Community mehr darüber.

      Viele Grüße
      Robert

      Antworten
  2. Patrick
    schrieb am 22.11.2023 um 23:40 Uhr:

    Hallo,

    ich habe versucht, den Schnipsel für das entfernen aller Versandoptionen auszublenden, wenn der kostenlose Versand verfügbar ist.
    Als Ausnahme wollte ich jedoch die Selbstabholung eingeben.
    Dies funktioniert bi mir nicht.
    Wie genau heißt der Schnipsel mit der Ausnahme?
    Kann ich diesen Schnipsel auch in das Plugin „Snippes“ einpflegen?
    Danke!

    Antworten
  3. René
    schrieb am 24.03.2023 um 18:58 Uhr:

    Hallo Robert
    Bei einem Shop riner Freundin funktionien die vielen Versandklassen ohne Probleme.
    Stören im Warenkorb, aber vorallem beim Bestellbestätigungsmail stört bei den Lieferkosten die Anzeige der Versandart. So können die verschiedenen Kosten nicht „anständig“ ausgerichtet werden. Gibt es eine Lösung. Danke

    Antworten
    • Jonas Hellwig
      schrieb am 06.04.2023 um 15:27 Uhr:

      Ihr müsst wahrscheinlich die E-Mail-Templates von WooCommerce überschreiben, und die unerwünschten Informationen löschen bzw. das Styling anpassen. Hier findest du Hooks um die Mail-Templates mit sog. Hooks nur partiell zu verändern.

      Antworten
  4. Sebastian
    schrieb am 20.11.2022 um 20:12 Uhr:

    Hallo Robert,
    das erste Snippet funktioniert. Beim dem Snippet um die Ausnahmen zu definieren, zeigt mir das Plugin Code Snippets folgende Meldung an:

    „Das Snippet wurde deaktiviert wegen einem Fehler in der Zeile 2:
    Cannot redeclare function kb_hide_shipping_when_free_is_available.“

    Viele Grüße
    Sebastian

    Antworten
  5. Christian Hofmann
    schrieb am 17.01.2021 um 21:12 Uhr:

    Liebe Versandartengequälten,

    ich habe in unserem Shop folgende Problemstellung:

    Wenn der Kunde „Abholung“ wählt möchte ich die Checkbox für „Lieferung an eine andere Adresse senden?“ verbergen und false setzen, bei Zustellung auf true

    Würdet ihr da eingreifen wenn ja habt ihr einen Tipp für mich

    Vielen Dank Christian

    Antworten
  6. Jens
    schrieb am 13.01.2021 um 16:46 Uhr:

    Nach einer Lösung ausschließlich kostenlose Lieferung anzuzeigen (sofern verfügbar) gesucht. Erste Ergebnis in Google bringt mich hier her und schon habe ich die perfekte Lösung gefunden.

    Vielen Dank fürs teilen des Snippets ;)

    Liebe Grüße von Mallorca
    Jens

    Antworten
  7. Peter
    schrieb am 05.01.2021 um 23:19 Uhr:

    Hallo Robert,

    Ich habe folgendes Problem:
    Ab einem gewissen Betrag solle eine kostenlose Lieferung angeboten werden. Wie kann ich hier zusätzlich eine Ausnahme für Speditionsartikel (Versandklasse ist bereits vorhanden) unabhängig vom Bestellwert definieren? Derzeit werden dem Käufer im Bestellvorgang beide Auswahlmöglichkeiten angezeigt…

    Bsp. bei Bestellwert 200€ -> kostenloser Versand
    bei einem Speditionsartikel 350€ -> Berechnung der Versandkosten von 15€
    Danke und LG
    Peter

    Antworten
  8. Holger Lange
    schrieb am 26.11.2020 um 18:00 Uhr:

    Super, vielen Dank! Genau das war die Lösung! :-)

    Antworten
  9. Max
    schrieb am 23.11.2020 um 20:28 Uhr:

    Hallo Robert,

    ich hoffe sehr, dass sie uns ebenfalls behilflich sein können. Unser Problem sieht wie folgt aus:

    1. Wir bieten z. B. ein 2er Set Stühle an für 199 € mit kostenlosen Versand an. Die Versandart „Kostenlose Lieferung“ ist dabei leider wenig hilfreich, da ich dort lediglich einen Mindestbestellwert eingeben kann, welcher bei anderen Produkten nicht sein sollte. Daher habe ich eine Versandklasse als kostenlosen Versand angelegt. Problem ist nur, das im Warenkorb leider weiterhin „Verkostenpauschale“ angezeigt wird. Es wird zwar nix an Versand berechnet, dennoch würde ich es als Kunde irritierend finden. Ich verstehe leider nicht, warum nicht die Versandklassen im Warenkorb angezeigt werden können, dass würde vieles vereinfachen. Das wir indem Fall keinen Versand berechnen würde ich toll finden, wenn dort auch kostenloser Versand steht und nicht „Verkostenpauschale“.

    Gibt es diesbezüglich eine Lösung? Würde mich sehr über eine Antwort freuen.

    Liebe Grüße Max

    Antworten
  10. Leonie
    schrieb am 26.10.2020 um 12:04 Uhr:

    Hallo Robert :)

    Danke für den Beitrag. Ich habe echt ein Problem, bei dem ich nicht weiterkomme und ich kann nicht glauben, dass das in den Grundfunktionen nicht möglich ist , es hinzubekommen. Ich arbeite an dem Shop für eine Kundin, die ca. 10 Kosmetikprodukte anbietet. Insgesamt gibt es 3 Versandklassen: Päckchen S,M und L.

    Päckchen M, greift sobald Produkt (Größe) M im Warenkorb liegt und Päckchen L, sobald Produkt (Größe) L im Warenkorb liegt. Soweit funktioniert es auch. (Im Backend habe ich 3 Versandarten hinterlegt: S/M/L) Sobald ich das größere Produkt mit reinlege, erkennt er, dass der Versand jetzt teurer ist.
    Das habe ich also wohl richtig hinterlegt.

    Problem: Nun gibt es aber an der Kasse trotzdem 3 Optionen auszuwählen, die alle 3 dann gleich kosten. Paket S 1,99 € / Paket M 1,99 € / Paket L 1,99 €..

    Zwar ist das dann der richtige Preis, aber so soll es ja nicht aussehen. Hast du eine Idee wo mein Fehler liegt?

    Ich denke mir, das kann doch nicht so ein abstruser Fall sein, dass der Versand sich ändert, wenn das Päckchen größer wird?!

    Vielen Dank schon mal.. :)

    Antworten
  11. Dominik
    schrieb am 15.09.2020 um 12:39 Uhr:

    Ich habe ein Problem, welches mit dem Versand zu tun hat.
    Wir müssen uns um eine erneute Zustellung eines Packets bemühen, da der Kunde eine falsche Adresse angegeben hat. Dafür hab ich ein Produkt erstellt, mit einem Preis von 0,00, welches „Erneute Zustellung“ heißt.
    Wenn ich jetzt versuche, darauf den Versand anzuwenden, ist es nicht möglich, die Mehrwertsteuer korrekt auszuweisen und anzuzeigen.
    Sobald das Produkt aber einen Preis hat, funktioniert alles einwandfrei.
    Wie geht ihr mit erneuten Zustellversuchen um?

    Antworten
    • Robert Menzel
      schrieb am 17.09.2020 um 17:13 Uhr:

      Hallo Dominik,
      bei dieser Frage kann ich dir leider nicht direkt weiterhelfen.
      Die Ausweisung der MwSt. hängt von vielen verschiedenen Einstellungen in WooCommerce und in eventuell verwendeten Plugins ab, dass das nicht pauschal zu beantworten ist.

      Der Ansatz mit einem Produkt »Erneute Zustellung« klingt soweit aber schon einmal ziemlich gut.

      Ich hoffe du findest hier schnell eine Lösung.

      Viele Grüße
      Robert

      Antworten
  12. Leon Jung
    schrieb am 24.07.2020 um 13:26 Uhr:

    Hallo Robert,

    vielen Dank für deinen tollen Beitrag.

    Da ich im Programmieren nicht so bewandert bin, würde ich mich freuen, wenn du mir bei folgendem Problem weiterhelfen kannst:

    Generell möchte ich die Versandkostenpauschale und die Abholung vor Ort einblenden, außer bei ausgewählten Artikeln, da soll dann lediglich die Abholung vor Ort möglich sein.

    Viele Grüße
    Leon

    Antworten
    • Robert Menzel
      schrieb am 03.08.2020 um 10:34 Uhr:

      Hallo Leon,
      vielen Dank für dein Feedback.
      Du solltest dich hierfür einmal genauer mit den »Versandklassen« von WooCommerce beschäftigen. Innerhalb eines Produkts kannst du dann zwischen den Versandklassen wählen.

      Viele Grüße
      Robert

      Antworten
  13. Ursula
    schrieb am 25.06.2020 um 21:06 Uhr:

    Hi, der Code für das Verstecken der Versandart ist super, Danke!
    Uns fehlt noch folgendes:
    – ab 40 Euro ist die Lieferung kostenlos
    – ab 15 Euro Bestellwert wird überhaupt erst geliefert, darunter muss man selber abholen. Wie könnten wir das umsetzen?

    Vielen Dank
    Liebe Grüße
    Ursula + Nika

    Antworten
    • Robert Menzel
      schrieb am 03.08.2020 um 10:28 Uhr:

      Hallo Ursula,
      vielen Dank für dein Feedback.
      Die Einstellungen, ab wann »Kostenloser Versand« aktiviert werden soll findest du im Backend unter »Woocommerce« -> »Einstellungen« -> »Versand« -> »Versandzonen«. Innerhalb der »Versandzonen« kannst du verschiedene »Versandarten« bestimmen und hierfür Parameter angeben.

      Soweit ich weiß, gibt es standardmäßig in WooCommerce nicht die Option einen Mindestbestellwert anzugeben. Hierfür muss der Code erweitert werden. Wir werden das notieren und gegebenenfalls einen weiteren Artikel dazu schreiben.

      Viele Grüße
      Robert

      Antworten
  14. Mike
    schrieb am 16.06.2020 um 09:34 Uhr:

    Hallo, ich habe einen Catering Shop und durch Corona möchte ich diesen jetzt aufbauen. Jetzt können Kunden zum Beispiel Kaffeemaschinen oder anderes Equipment bei uns im Lager abholen oder wir liefern diese nach Versandzonen. Ich finde aber keinen Punkt wo der Kunde auswählen kann ob er abholen möchte oder ob ein Versand statt finden soll. Abholung wäre kostenlos, Versand würde je nach Artikel und Entfernung individuell angegeben.

    Antworten
    • Robert Menzel
      schrieb am 03.08.2020 um 10:21 Uhr:

      Hallo Mike,
      vielen Dank für dein Feedback.
      Das Stichwort »Versandklassen« sollte dir hier weiterhelfen. Diese können pro Produkt angegeben werden.

      Viele Grüße
      Robert

      Antworten

Kommentar zu dieser Seite

Wir freuen uns über Anregungen, Ergänzungen oder Hinweise zu Fehlern. Wir lesen jeden Eintrag, veröffentlichen aber nur, was den Inhalt sinnvoll ergänzt.

WooCommerce-Projekte mit kulturbanause

Wir arbeiten intensiv mit WordPress und realisieren auf Basis von WooCommerce maßgeschneiderte Online-Shops. Individuell gestaltet, funktional optimiert und rechtssicher.

WooCommerce-Leistungsangebot →

Schulungen von kulturbanause

Wir bieten Seminare und Workshops zu den Themen Konzept, Design und Development. Immer up-to-date, praxisnah, kurzweilig und mit dem notwendigen Blick über den Tellerrand.

Übersicht Schulungsthemen →