Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. WooCommerce
Code

Erstellen Sie eine benutzerdefinierte Versandmethode für WooCommerce

by
Difficulty:IntermediateLength:LongLanguages:

German (Deutsch) translation by Wei Zhang (you can also view the original English article)

Wenn Sie jemals etwas für WordPress entwickelt haben, sei es ein Design oder ein einfaches Plugin, sind Sie bereits mit der Modularität von WordPress vertraut. WooCommerce wurde auch im Hinblick auf Erweiterbarkeit entwickelt.

In diesem Lernprogramm erstellen wir eine einfache Versandmethode für WooCommerce, mit der die Versandkosten berechnet werden. Wir werden auch einige Einschränkungen für unser Plugin hinzufügen, sodass unsere Versandart nur für bestimmte Länder verfügbar ist.

Um diesem Tutorial zu folgen, benötigen Sie:

  • WordPress
  • WooCommerce-Plugin installiert und aktiviert
  • Editor der Wahl

Versandregeln für unsere Versandart

Bevor wir beginnen, müssen wir definieren, wie unsere Versandmethode die Kosten berechnet und wo sie versendet werden kann.

Die Kosten richten sich nach dem Gewicht, das wir versenden müssen, und nach der Zone, in die wir versenden müssen. Eine Zone ist eine Nummer, die Ländern und Preisen zugeordnet ist. Je höher die Anzahl, desto länger ist die Versandentfernung. Unsere fiktive Reederei versendet nur in einige Länder:

  • USA
  • Kanada
  • Deutschland
  • Großbritannien
  • Italien
  • Spanien
  • Kroatien

Unsere Reederei kommt aus Kroatien, also ist Kroatien in Zone 0. Definieren Sie Zonen für die anderen Länder:

  • USA: 3
  • Kanada: 3
  • Deutschland: 1
  • Vereinigtes Königreich: 2
  • Italien: 1
  • Spanien: 2

Nun, da wir alle Länder zum Versand mit der entsprechenden Zone zur Verfügung haben, ist es an der Zeit, Preise festzulegen.

  • Zone 0: $ 10
  • Zone 1: $30
  • Zone 2: $50
  • Zone 3: $70

Ich habe auch das Gewicht erwähnt, oder? Unsere Reederei kann bis zu 100 kg versenden, und die Preise sind:

  • 0–10 kg: $0
  • 11–30 kg: $5
  • 31–50 kg: $10
  • 51–100 kg: $20

Wir haben alles, was wir brauchen, um unsere Versandart zu erstellen. Erfahren Sie ein wenig über die WooCommerce Shipping API.

Einführung in die WooCommerce-Versandmethoden-API

Wenn Sie eine Versandmethode erstellen, müssen Sie die Klasse um die abstrakte WooCommerce-Klasse WC_Shipping_Method erweitern. Definierte Attribute in dieser Klasse sind:

  • $id: ID (Slug, Keyword) unseres Versandes. Erforderlich.
  • $number: Integer-ID.
  • $method_title: Name des in admin angezeigten Versandes.
  • $method_description: Kurze Beschreibung unserer Versandkosten in admin (optional).
  • $enabled: String Boolean ("yes" oder "no"), das die Informationen gibt, wenn unser Versand aktiviert ist und verwendet werden kann oder nicht.
  • $title: Wird verwendet, um unseren Versandnamen auf unserer Website anzuzeigen.
  • $Availability: Legt fest, ob der Versand verfügbar ist oder nicht.
  • $countries: Array von Ländern, für die diese Methode aktiviert ist. Der Standardwert ist ein leeres Array.
  • $tax_status: Der Standardwert ist steuerpflichtig. Wenn es steuerpflichtig ist, wird die Steuer erhoben.
  • $fee: Der Standardwert ist 0. Gebühren für die Methode.
  • $minimum_fee: Die Mindestgebühr für die Methode. Der Standardwert ist null.
  • $has_settings: Legt fest, ob diese Methode Einstellungen hat. Der Standardwert ist true.
  • $supports: Array mit Funktionen, die diese Methode unterstützt. Der Standardwert ist ein leeres Array.
  • $rates: Array von Preisen. Dies muss ausgefüllt werden, um die Versandkosten zu registrieren. Der Standardwert ist ein leeres Array.

Definierte Methoden in der WC_Shipping_Method sind:

  • is_taxable(): Gibt zurück, ob wir die Steuer zusätzlich zur Versandrate berechnen müssen oder nicht.
  • add_rate($args=array()): Setzt eine im Parameter $ args definierte Versandrate in das Attribut $ rates.
  • has_settings(): Gibt den Wert des Attributs $ has_settings zurück.
  • is_available(): Gibt zurück, wenn der Versand verfügbar ist. Wenn im Attribut $countries Länder festgelegt sind und das Attribut $availability auf Werte einschließlich spezifisch oder ausschließend gesetzt ist, wird true oder false zurückgegeben, wenn das Land für den Versand verfügbar ist.
  • get_title(): Gibt den Titel dieses Versands zurück.
  • get_fee($fee,$total): Gibt den Gebührenwert für diesen Versand basierend auf der analysierten $fee und dem $total zurück.
  • supports( $feature ): Gibt zurück, ob diese Versandart eine Funktion unterstützt oder nicht.

Da die Klasse WC_Shipping_Method die Klasse WC_Settings_API erweitert, gibt es weitere Attribute und Methoden, die hier der Einfachheit halber nicht erläutert werden.

Es gibt auch andere Methoden, die definiert werden müssen, damit der Versand Einstellungen abrufen oder festlegen und auch die tatsächlichen Versandkosten berechnen kann. Diese Methoden sind:

  • init(): Erstellt die Formularfelder und -einstellungen (kann unterschiedlich benannt werden, solange wir die darin enthaltenen Methoden verwenden und in der __constructor-Methode aufrufen).
  • calculate_shipping( $package ): Dies ist die Methode, mit der die Kosten für diesen Versand berechnet werden. Paket ist ein array mit den zu versendenden Produkten.

In der calculate_shipping-Methode addieren wir die Rate mit der Methode add_rate. Diese Methode akzeptiert ein Array mit mehreren Optionen:

  • id: ID des Tarifs.
  • label: Etikett für die Rate.
  • cost: Menge des Versandes. Es kann ein einzelner Wert oder ein array mit Kosten für jeden Artikel im Warenkorb sein.
  • taxes: Es akzeptiert eine arrayvon Steuern oder nichts, so dass die Steuer von WooCommerce berechnet wird. Es kann sogar false sein, wenn Sie nicht möchten, dass die Steuer berechnet wird.
  • calc_tax: Akzeptiert per_order oder per_item. Wenn Sie per_item verwenden, müssen Sie eine arrayvon Kosten angeben.

Um die Versandart zu registrieren, müssen wir unsere Versandart im arrayder registrierten Methode hinzufügen, indem Sie den Namen unserer Klasse übergeben. Wir können auf dieses array zugreifen und das modifizierte array mit einem WordPress-Filter zurückschicken, der im WooCommerce-Plugin definiert ist. Dieser Filter heißt woocommerce_shipping_methods.

Erstellen der neuen Versandklasse

Wir erstellen unsere Versandart als neues Plugin, das das WooCommerce-Plugin erweitert. Legen Sie unter wp-content/plugins einen neuen Ordner tutsplus-shipping an. Erstellen Sie auch eine Datei mit dem gleichen Namen tutsplus-shipping.php und fügen Sie diesen Code hinzu:

Es scheint, als gäbe es viel zu verstehen, aber es ist ziemlich einfach. Zuerst prüfen wir, ob die Konstante WPINC definiert ist. Wenn dies nicht der Fall ist, versucht jemand, auf diese Datei direkt oder von einem Ort aus zuzugreifen, der nicht WordPress ist.

Nun, da wir sicher sind, dass auf WordPress zugegriffen werden kann, können wir weitermachen. Bevor wir mit der Erstellung unserer Versandmethode für WooCommerce beginnen, müssen wir sicherstellen, dass WooCommerce aktiv ist. Wir prüfen, ob sich die Datei woocommerce.php im Array der aktiven Plugins befindet, die in der Datenbank unter der Option active_plugins gespeichert sind.

Dann erstellen wir die Funktion tutsplus_shipping_method, die wir ebenfalls in der Aktion woocommerce_shipping_init hinzufügen. Die Aktion woocommerce_shipping_init ist die Hauptaktion für WooCommerce Shippings, die alle Versandklassen umfasst, bevor sie instanziiert werden. Mit dieser Aktion sind wir sicher, dass unsere Versandmethode nach der Initialisierung von WooCommerce und an der richtigen Stelle für WooCommerce verwendet wird.

Die __construct-Methode unserer Klasse legt einige allgemeine Attribute fest. Einige davon können leicht überschrieben werden, nachdem die Einstellungen in der Methode init aus der Datenbank geladen wurden. Zwei andere Methoden bleiben leer, da wir sie später definieren werden.

Länderverfügbarkeit festlegen

Unsere Versandart ist nur in der zuvor festgelegten Länderliste verfügbar. Dies wird vor der Methode init innerhalb der Methode __construct gesetzt. Fügen Sie dies in der Methode __construct hinzu:

Das Attribut availability ist auf 'Including' gesetzt, sodass dieser Versand nur für die Länder verfügbar ist, die im Attribut countries enthalten sind. Wenn WooCommerce unserem Kunden die verfügbaren Sendungen anzeigen möchte, wird geprüft, ob das Versandland in dem Attribut countries für diesen Versand enthalten ist.

Einstellungen erstellen

Wenn Sie sich unsere Methode __construct genau ansehen, können Sie feststellen, dass wir die Einstellungen für die Eigenschaften enabled und title überprüfen. Wir erstellen Felder, in denen unsere Eigenschaften geändert werden können.

Kopieren Sie diesen Code und füllen Sie unsere Methode init_form_fields aus:

Jetzt können Sie zur WordPress-Verwaltung gehen und diese Einstellungen unter WooCommerce > Settings > Shipping > TutsPlus Shipping.

The TutsPlus Shipping Options Screen

Ändern Sie die Einstellung Enable und sehen Sie auf der Registerkarte Shipping Options, ob unsere Versandart aktiviert ist oder nicht.

Wir haben auch festgelegt, dass unsere Versandart bis zu 100 kg transportieren kann. Was ist, wenn sich diese Regel in naher Zukunft ändert? Wir können dies problemlos in den Einstellungen bearbeiten lassen. Wir werden diese Einstellung hinzufügen, sodass unsere Methode init_form_fields jetzt wie folgt aussieht:

Jetzt können wir sogar das maximale Gewicht unter den Einstellungen einstellen. Wir könnten unsere Länder, Zonen und alles andere auch anpassbar machen, aber der Einfachheit halber überspringen wir diesen Teil.

Berechnung der Versandkosten

Nachdem jetzt alles eingestellt ist, haben wir einen weiteren Schritt, bevor wir beim Versand unserer Produkte unsere Versandart verwenden können. Wir müssen die Versandkosten basierend auf den Produkten im Warenkorb des Besuchers berechnen.

Wir werden die Methode calculate_shipping Schritt für Schritt aktualisieren, damit Sie jeden Schritt verstehen können. Der erste Schritt besteht darin, die Kosten nach Gewicht zu berechnen. Fügen Sie dieser Methode diesen Code hinzu:

Wir haben einige Startvariablen definiert: $weight, $cost und $country. Die Variable $weight enthält das Gesamtgewicht aller Produkte, die variablen $cost die Kosten dieser Versandart und die Variable $country den ISO-Code für das ausgewählte Versandland.

Wir erhalten das Gesamtgewicht, indem wir den Wagen iterieren und das Gewicht für jedes Produkt im Warenkorb zu der Variablen $weight addieren. Sobald wir unser Gesamtgewicht haben, verwenden wir die Funktion wc_get_weight, um das Gewicht in Kilogramm umzuwandeln, da dies die Einheit ist, in der unsere Versandmethode das Limit festgelegt hat.

Als letztes müssen Sie die Kosten für das berechnete Gewicht berechnen. Wenn Sie sich den letzten Teil genau ansehen, haben wir, wie gesagt, die Grenze für die 100 kg nicht festgelegt. Unsere Versandkosten zeigen die Kosten auch für einen Wagen mit einem Gesamtgewicht von 101 kg oder mehr an. Dieser Teil unserer Versandlimits wird später im Artikel als Einschränkung bei der Abwicklung der Bestellung oder der Aktualisierung der Bestellung festgelegt.

Berechnung der Kosten für das ausgewählte Versandland

Da wir nun die Kosten basierend auf dem Gewicht des Wagens haben, müssen wir die Kosten für das ausgewählte Versandland berechnen. Fügen Sie diesen Code als nächstes hinzu:

Das Array $countryZones enthält die Zonen für jedes Land. Das zweite Array $zonePreise enthält die Preise für jede Zone. Nachdem wir beide Arrays festgelegt haben, erhalten Sie die Kosten pro Zone folgendermaßen:

  • Wir übergeben den ISO-Ländercode an das Array $countryZones, um die Zone zu erhalten.
  • Wir übergeben die zurückgegebene Zone an das Array $zonePreise, um die Kosten zu ermitteln.
  • Wir addieren die zurückgegebenen Kosten zu den variablen $cost.

Die Rate registrieren

Wir haben die Kosten nach dem Gesamtgewicht berechnet und die Kosten nach Versandland addiert. Der letzte Schritt hier ist das Registrieren der Rate, fügen Sie also den letzten Teil hinzu:

Hier ist der gesamte Code für diese Methode, falls Sie Schwierigkeiten hatten, ihr zu folgen:

Wenn Sie jetzt versuchen, Ihren Einkaufswagen anzuzeigen oder zur Bestellseite gehen und ein Land auswählen, das für diesen Versand verfügbar ist, werden bei dieser benutzerdefinierten Versandmethode Versandkosten angezeigt. Hier ist ein Bild mit einem Land aus Zone 3:

Cost of our custom shipping method with a shipping country from zone 3

Einschränkungen hinzufügen

Da wir der Versandart erlaubt haben, ihren Tarif zu registrieren, auch wenn das Gesamtgewicht unseres Warenkorbs über unserem Limit liegt, müssen wir einige Einschränkungen hinzufügen. Unsere Einschränkung informiert den Kunden darüber, dass die Bestellung aufgrund ihres Gewichts nicht versendet werden kann.

Sorry 120 kg exceeds the maximum weight of 100 kg for TutsPlus Shipping

Einschränkungsfunktion

In unserer Funktion suchen wir nach der Versandart, die Sie gewählt haben. Wenn die Methode unsere TutsPlus_Shipping_Method ist, überprüfen wir das Gewichtslimit und das Gesamtgewicht im Wagen. Wenn das Gewicht aus dem Wagen die Gewichtsgrenze überschreitet, werden wir unseren Kunden darüber informieren.

Fügen Sie nach dem Filter woocommerce_shipping_methods diesen Code hinzu:

Wir erhalten die Pakete, die durch Versand getrennt werden. Wenn alle Produkte denselben Versand verwenden, wird nur ein Paket mit allen Produkten zurückgegeben. Danach erhalten wir die ausgewählten Methoden und dann prüfen wir für jedes Paket, ob dieses Paket mit unserer Versandmethode versendet wird.

Wenn das Paket mit unserer Versandmethode versendet werden soll, setzen wir die Gewichtsgrenze aus den Einstellungen und berechnen anschließend das Gesamtgewicht unseres Pakets. Wenn das Gesamtgewicht unsere Gewichtsgrenze überschreitet, wird es den Kunden darüber informieren.

Benachrichtigung bei Bestellaktualisierung

Die Bestellaktualisierung erfolgt jedes Mal, wenn der Kunde etwas auf der Checkout-Seite ändert. Wir fügen die Funktion tutsplus_validate_order zur Aktion woocommerce_review_order_before_cart_contents hinzu. Diese Aktion wird aufgerufen, nachdem alles festgelegt wurde, sodass wir die ausgewählten Versandmethoden aus der Sitzung und die Pakete vom Versand abrufen können. Sobald der Kunde etwas ändert, löst diese Aktion unsere Funktion aus und fügt gegebenenfalls die Benachrichtigung hinzu.

Fügen Sie diesen Code nach unserer Funktion tutsplus_validate_order hinzu:

Benachrichtigung bei Kasse

Wenn der Kunde auf die Schaltfläche klickt, um die Bestellung aufzugeben oder zu kaufen, verarbeitet WooCommerce alle Abrechnungs- und Versanddaten neben dem Warenkorbinhalt und dem ausgewählten Versand.

Wenn WooCommerce-Fehlermeldungen angezeigt werden, wird der Checkout-Vorgang angehalten und dem Kunden alle Fehlermeldungen angezeigt. Da wir eine Funktion erstellt haben, die die Sitzung verwendet, um die ausgewählten Versandmethoden abzurufen, müssen wir diese Funktion einer Aktion hinzufügen, die nach dem Festlegen der Sitzung ausgelöst wird. Die Aktion, die ausgelöst wird, bevor WooCommerce prüft, ob ein Fehler gemeldet wird, ist woocommerce_after_checkout_validation.

Fügen wir unserer Aktion unsere Funktion hinzu:

Vollständiger Code

Hier ist der vollständige Code für diese benutzerdefinierte Versandmethode. Wenn Sie Probleme mit diesem Tutorial hatten, können Sie hier nachschauen:

Fazit

Mit der WooCommerce-Versand-API können Sie mit einfachen Schritten Ihre eigene Versandart erstellen. Einschränkungen und Verfügbarkeit können bei der Berechnung der Verfügbarkeit oder der Kosten für die Versandart innerhalb der Versandart festgelegt werden. Sie können jedoch auch außerhalb der Versandart mithilfe von WooCommerce-Aktionen festgelegt werden.

Wenn Sie nach anderen Dienstprogrammen suchen, die Sie beim Entwickeln Ihres wachsenden Satzes von Werkzeugen für WordPress oder nach Code unterstützen, der sich mit WordPress auskennt, sollten Sie nicht vergessen, was wir in Envato Market anbieten.

Wenn Sie Fragen zu dieser oder einer anderen Versandart haben, können Sie diese in den Kommentaren unten posten. Sie können mir auch auf meinem Blog oder auf Twitter @igorbenic folgen.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.