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

Öffentliche Schulungstermine

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

8 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

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.