kulturbanause Blog

Responsive Design, WordPress, Konzeption, HTML, CSS, JS & UX/UI …

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.

Workshops & Schulungen von kulturbanause

Intensive Trainings mit hohem Praxisbezug.

Online-Schulungen (remote per Video)

Inhouse-Schulungen

Versandarten den Versandzonen hinzufügen

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

  • Versandkostenpauschale – ermöglicht es, einen festen Preis für den Versand festzulegen
  • Kostenlose Lieferung – kann durch Gutscheine oder einen Mindestbestellwert ausgelöst werden
  • Abholung vor Ort – der Kunde holt seine Bestellung selbst ab

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 );

Links / Quellen

Jetzt bist du gefragt!

Hast du Anregungen, Ergänzungen, einen Fehler gefunden oder ist dieser Beitrag nicht mehr aktuell? Dann freuen wir uns auf deinen Kommentar.

Du kannst diesen Beitrag natürlich auch weiterempfehlen. Wir sind dir für jede Unterstützung dankbar!

Unterstützung bei WooCommerce-Projekten

Unsere WooCommerce Agentur ist auf die Entwicklung maßgeschneiderter WordPress/WooCommerce-Themes und -Websites spezialisiert. Wenn du Unterstützung bei der Planung, Gestaltung und Entwicklung eines Projekts benötigst, helfen wir gerne weiter.
WooCommerce-Leistungsangebot →

Das könnte dich auch interessieren

12 Kommentare

  1. Mike

    Verfasst am 16. Juni 2020 um 9: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.

    • Robert Menzel

      Verfasst am 3. August 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

  2. Ursula

    Verfasst am 25. Juni 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

    • Robert Menzel

      Verfasst am 3. August 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

  3. Leon Jung

    Verfasst am 24. Juli 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

    • Robert Menzel

      Verfasst am 3. August 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

  4. Dominik

    Verfasst am 15. September 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?

    • Robert Menzel

      Verfasst am 17. September 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

  5. Leonie

    Verfasst am 26. Oktober 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.. :)

  6. Max

    Verfasst am 23. November 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

  7. Holger Lange

    Verfasst am 26. November 2020 um 18:00 Uhr.

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

Kommentar verfassen

Dieser Blog lebt vom Feedback der Besucher! Also los, mach mit!
Bitte habe Verständnis dafür, dass Kommentare die mit dem Inhalt dieses Beitrags nichts zu tun haben, gelöscht werden.