So fügen Sie eine benutzerdefinierte Versandmethode in WooCommerce hinzu

Veröffentlicht: 2020-09-01

WooCommerce Benutzerdefinierte Versandmethode hinzufügen Wenn Sie mit WooCommerce vertraut sind, wissen Sie, dass es sich um eine großartige kostenlose E-Commerce-Lösung mit unglaublich nützlichen Funktionen handelt. Was auffällt, ist, dass WooCommerce mit Blick auf Erweiterbarkeit entwickelt wurde, ähnlich der Modularität von WordPress.

Wenn Sie jedoch etwas Zusätzliches von WooCommerce benötigen, stellen Sie oft fest, dass WooCommerce Ihnen nicht alles bietet, was Sie brauchen, zum Beispiel, wenn Sie eine benutzerdefinierte Versandmethode hinzufügen möchten. Machen Sie sich dennoch keine Sorgen, denn in diesem kurzen Tutorial erfahren Sie, wie Sie eine einfache Versandmethode für WooCommerce erstellen, die die Versandkosten berechnet.

Außerdem erfahren Sie, wie Sie unserem Plugin einige Einschränkungen hinzufügen, damit die Versandmethode für einige Länder verfügbar ist.

Benutzerdefinierte Versandregeln für die Versandmethoden

In diesem Abschnitt erstellen wir benutzerdefinierte Versandregeln für die Versandmethoden, die wir zum Erstellen des Codes verwenden werden. Wir werden definieren, wie die Versandart die Kosten berechnet und wohin versendet werden kann. Das bedeutet, dass die Kosten durch das Gewicht und die Zone bestimmt werden, in die wir liefern müssen.

Für dieses Beispiel versenden wir in die USA, nach Kanada, Deutschland, Großbritannien, Italien, Spanien und Kenia. Kenia wird unsere Zone 0 für 10 $ sein, Italien Zone 1 für 30 $, Spanien Zone 2 für 50 $, Vereinigtes Königreich Zone 2 für 50 $, USA und Kanada Zone 3 für 70 $.

Für das Gewicht berechnen wir sie wie folgt: 0 – 10 kg kostenlos, 11 – 30 kg für 5 $, 31–50 kg für 10 $ und 51–100 kg für 20 $.

Sie sind vielleicht bereit, mit dem Programmieren zu beginnen, aber noch nicht! Zunächst müssen Sie sich mit der WooCommerce-Versand-API vertraut machen . Wenn Sie eine benutzerdefinierte Versandmethode erstellen möchten, müssen Sie die Klasse der abstrakten WooCommerce-Klasse WC_Shipping_Method erweitern. Es hat einige definierte Attribute, die sind:

  • $id : ID (slug, keyword) unseres Versands, die erforderlich ist.
  • $number : Dies ist eine Integer-ID.
  • $method_title : Der Name unseres Versands, der im Admin angezeigt wird.
  • $method_description : Eine kurze Beschreibung unseres Versands, die im Adminbereich angezeigt wird (optional).
  • $enabled : String Boolean, „yes“ oder „no“, der die Information gibt, ob unser Versand aktiviert ist und ob er verwendet werden kann oder nicht.
  • $title : Es wird verwendet, um unseren Versandnamen auf unserer Website anzuzeigen.
  • $availability : Dies definiert, ob der Versand verfügbar ist oder nicht.
  • $countries : Eine Reihe von Ländern, für die diese Methode aktiviert ist. Der Standardwert ist ein leeres Array.
  • $tax_status : Der Standardwert ist steuerpflichtig. Wenn ein Artikel steuerpflichtig ist, werden Steuern berechnet.
  • $fee : Der Standardwert ist 0
  • $minimum_fee : Die Mindestgebühr für die Methode und der Standardwert ist null.
  • $has_settings : Dies definiert, ob diese Methode irgendwelche Einstellungen hat. Der Standardwert ist wahr.
  • $supports : Ein Array mit Funktionen, die diese Methode unterstützt. Der Standardwert ist ein leeres Array.
  • $rates : Ein Array von Tarifen, das ausgefüllt werden muss, um die Versandkosten zu registrieren. Der Standardwert ist ein leeres Array.

Die definierten Methoden in WC_Shipping_Method sind:

  • is_taxable() : Dies gibt zurück, ob wir Steuern zusätzlich zu den Versandkosten berechnen müssen oder nicht.
  • add_rate( $args = array() ) : Dies schiebt eine im Parameter $args definierte Versandrate in das Attribut $rates.
  • has_settings() : Dies gibt den Wert des Attributs $has_settings zurück.
  • is_available() : Dies gibt zurück, wenn der Versand verfügbar ist und wenn im Attribut $countries Länder festgelegt sind und das Attribut $availability auf Werte einschließlich, spezifisch oder ausschließlich gesetzt ist, wird wahr oder falsch zurückgegeben, wenn das Land für den Versand verfügbar ist .
  • get_title() : Dies gibt den Titel dieser Sendung zurück.
  • get_fee( $fee, $total ) : Dies gibt den Gebührenwert für diesen Versand basierend auf den geparsten $fee und $total zurück.
  • supports( $feature ) : Dies 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 ich hier der Einfachheit halber nicht erläutern werde.

Außerdem müssen andere Methoden definiert werden, damit der Versand Einstellungen abrufen oder festlegen und die tatsächlichen Kosten des Versands berechnen kann. Diese hier aufgeführten Methoden:

  • init() : Dies erstellt die Formularfelder und Einstellungen. Es kann jedoch anders benannt werden, solange wir die darin enthaltenen Methoden verwenden und es in der Methode __constructor aufrufen.
  • calculate_shipping( $package ) : Diese Methode wird verwendet, um die Kosten für diesen Versand zu berechnen, und das Paket ist ein Array mit den zu versendenden Produkten.

Ich möchte mich auf die Methode compute_shipping konzentrieren. Für unser Beispiel verwenden wir diese Methode und fügen sie der Methode add_rate hinzu. Diese Methode akzeptiert ein Array mit mehreren Optionen wie:

  • id : Dies ist die ID des Tarifs.
  • label : Dies ist das Label für die Rate.
  • cost : Die Höhe der Versandkosten.
  • taxes : Es akzeptiert eine Reihe von Steuern oder nichts, sodass die Steuer von WooCommerce berechnet wird. Wenn Sie nicht möchten, dass Steuern akzeptiert werden, kann es falsch akzeptieren.
  • calc_tax : Dies akzeptiert per_order oder per_item. Wenn Sie per_item verwenden, muss eine Reihe von Kosten angegeben werden.

Wir werden einen WordPress-Filter verwenden, um das Array zu erhalten, das unsere Versandmethode in das Array der registrierten Methode hinzufügt, indem wir den Namen unserer Klasse übergeben, wobei wir einen WordPress-Filter verwenden, der im WooCommerce-Plugin definiert ist. Der Filter heißt woocommerce_shipping_methods.

Lassen Sie uns nun auf den Tisch kommen und in den Codierungsabschnitt dieses kurzen Tutorials einsteigen, damit Sie das gesamte Konzept in den PHP-Snippets verstehen können, die ich Ihnen mitteilen werde.

a) Schritte zum Erstellen der neuen Versandklasse

In diesem Abschnitt erstellen wir unsere Versandmethode als neues Plugin, das WooCommerce erweitert.

  1. Zuerst müssen Sie die wp-content > plugins öffnen und einen neuen Ordner erstellen. Dafür verwende ich den Namen njengah -shipping
  2. Dann müssen Sie eine Datei mit dem gleichen Namen njengah –shipping.php erstellen
  3. Fügen Sie in dieser Datei den folgenden Code hinzu:
 <?php

/**
* Plugin-Name: Njengah Shipping
* Plugin-URI: https://njengah.com/plugins/
* Beschreibung: 
* Version: 1.0.0
* Autor: Joe Njenga
* Autoren-URI: https://njengah.com
S
*/

if ( ! defined( 'WPINC' ) ) {

sterben;

}
/*
* Überprüfen Sie, ob WooCommerce aktiv ist
*/
if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {

Funktion njengahplus_shipping_method() {

if ( ! class_exists( 'NjengahPlus_Shipping_Method' ) ) {

Klasse NjengahPlus_Shipping_Method erweitert WC_Shipping_Method {

/**

* Konstrukteur für Ihre Versandklasse

*

* @access öffentlich

* @return void

*/

öffentliche Funktion __construct() {

$this->id = 'njengahplus';

$this->method_title = __( 'NjengahPlus Versand', 'njengahplus' );

$this->method_description = __( 'Benutzerdefinierte Versandart für NjengahPlus', 'njengahplus' );

$this->init();

$this->enabled = isset( $this->settings['enabled'] ) ? $this->settings['enabled'] : 'yes';

$this->title = isset( $this->settings['title'] ) ? $this->settings['title'] : __( 'NjengahShipping', 'njengahplus' );

}

/**
* Initialisieren Sie Ihre Einstellungen
*
* @access öffentlich

* @return void

*/

Funktion init() {

// Laden Sie die Einstellungs-API

$this->init_form_fields();

$this->init_settings();

// Einstellungen in Admin speichern, falls Sie welche definiert haben

add_action( 'woocommerce_update_options_shipping_' . $this->id, array( $this, 'process_admin_options' ) );

}


/**

* Einstellungsfeld für diesen Versand definieren

* @return void

*/

Funktion init_form_fields() {

// Wir werden unsere Einstellungen hier hinzufügen

}

/**
* Diese Funktion dient zur Berechnung der Versandkosten. Innerhalb dieser Funktion können wir Gewichte, Abmessungen und andere Parameter überprüfen.
*
* @access öffentlich
* @param gemischtes $Paket
 @return void
*/

Öffentliche Funktion compute_shipping( $package ) {


// Wir werden hier die Kosten, die Rate und die Logik hinzufügen

}

}

}

}


add_action( 'woocommerce_shipping_init', 'njengahplus_shipping_method' );

Funktion add_njengahplus_shipping_method( $methoden ) {

$methods[] = 'NjengahPlus_Shipping_Method';
$methoden zurückgeben;
}

add_filter( 'woocommerce_shipping_methods', 'add_njengahplus_shipping_method' );

}

Wie es funktioniert

  • Wir prüfen zunächst, ob die Konstante WPINC definiert ist. Wenn es nicht definiert ist, bedeutet dies, dass jemand versucht, direkt oder von einem Ort, der nicht WordPress ist, auf diese Datei zuzugreifen.
  • Dann müssen wir prüfen, ob WooCommerce aktiv ist. Hier prüfen wir, ob sich die woocommerce.php im Array der aktiven Plugins befindet, die in der Datenbank unter der Option active_plugins gespeichert sind.
  • woocommerce_shipping_init ist die Hauptaktion für WooCommerce Shipping, die alle Versandklassen enthält, bevor sie instanziiert werden. Durch die Verwendung dieser Aktion wird sichergestellt, dass unsere Versandmethode nach der Initialisierung von WooCommerce und an der richtigen Stelle für WooCommerce zur Verwendung enthalten ist.
  • Die Methode __construct setzt einige allgemeine Attribute und einige davon können leicht überschrieben werden, nachdem die Einstellungen aus der Datenbank in die Methode init geladen wurden.
  • Die anderen Methoden bleiben leer, da wir sie später im Tutorial definieren werden.

Dann müssen Sie das Plugin mit den unten gezeigten Schritten aktivieren:

  1. Melden Sie sich bei Ihrer WordPress-Site an und greifen Sie als Admin-Benutzer auf das Dashboard zu.
  2. Klicken Sie im Dashboard-Menü auf Plugins und aktivieren Sie den Njengah-Versand wie unten gezeigt: Aktivierung des Plugins
  3. Nachdem Sie das Plugin aktiviert haben, gehen Sie zu WooCommerce > Einstellungen . Klicken Sie auf die Registerkarte WooCommerce und dann auf NjengahPlus-Versand . Das solltest du sehen können: Ergebnis für den ersten Code

b) Einstellen der Länderverfügbarkeit

Die von uns erstellte Versandart ist nur in der zuvor festgelegten Länderliste verfügbar.

  1. Fügen Sie dies in der Methode __construct hinzu :
 <?php

//...

$this->method_description = __( 'Benutzerdefinierte Versandart für NjengahPlus', 'njengahplus' );

// Verfügbarkeit & Länder

$this->availability = 'inklusive';

$this->länder = array(

'US', // Vereinigte Staaten von Amerika

'CA', // Kanada

'DE', // Deutschland

'GB', // Vereinigtes Königreich

'ES', // Italien

'ES', // Spanien

'HR' // Kenia

);

$this->init();

//...

Wie der Kodex funktioniert

Das Verfügbarkeitsattribut ist auf "inklusive" gesetzt, sodass dieser Versand nur für die Länder im Länderattribut verfügbar ist.

WooCommerce prüft, ob das Versandland in den Attributländern enthalten ist.

Erstellen der Einstellungen

Sie müssen diesen Code einfach kopieren und unsere Methode init_form_fields füllen:

 <?php



Funktion init_form_fields() {

$this->form_fields = array(

'aktiviert' => Array(

'Titel' => __( 'Aktivieren', 'njengahplus' ),

'Typ' => 'Kontrollkästchen',

'description' => __( 'Diesen Versand aktivieren.', 'njengahplus' ),

'Standard' => 'Ja'

),


'Titel' => Array(

'Titel' => __( 'Titel', 'njengahplus' ),

'Typ' => 'Text',

'description' => __( 'Title to be display on site', 'njengahplus' ),

'default' => __( 'NjengahPlus Versand', 'njengahplus' )

),


);


}

Gehen Sie folgendermaßen vor, um das Ergebnis zu überprüfen:

  1. Melden Sie sich bei Ihrer WordPress-Site an und greifen Sie als Administrator auf das Dashboard zu. Klicken Sie im Dashboard-Menü auf WooCommerce > Einstellungen
  2. Klicken Sie auf die Registerkarte Versand und dann auf NjengahPlus-Versand, wie unten gezeigt: Njengah plus Versand
  3. Aktivieren Sie das Kontrollkästchen und speichern Sie die Änderungen.

Wir können die Versandart so einstellen, dass sie bis zu 100 kg versendet. Dann lassen wir zu, dass dies in den Einstellungen bearbeitet wird, wenn sich diese Regel bald ändert. Nachdem Sie dies eingestellt haben, sieht der Einstellungscode wie folgt aus:

 <?php




Funktion init_form_fields() {

$this->form_fields = array(

'aktiviert' => Array(

'Titel' => __( 'Aktivieren', 'njengahplus' ),

'Typ' => 'Kontrollkästchen',

'description' => __( 'Diesen Versand aktivieren.', 'njengahplus' ),

'Standard' => 'Ja'

),


'Titel' => Array(

'Titel' => __( 'Titel', 'njengahplus' ),

'Typ' => 'Text',

'description' => __( 'Title to be display on site', 'njengahplus' ),

'default' => __( 'NjengahPlus Versand', 'njengahplus' )

),


'Gewicht' => Array(

'Titel' => __( 'Gewicht (kg)', 'njengahplus' ),

'Typ' => 'Nummer',

'Beschreibung' => __( 'Maximal zulässiges Gewicht', 'njengahplus' ),

'Standard' => 100

),


);

}

Im obigen Code haben wir nun das maximale Gewicht unter den Einstellungen eingestellt. Hier ist das Ergebnis: Maximales Gewicht

c) Berechnung der Versandkosten

Um die Versandkosten zu berechnen, werden wir die Methode compute_shipping Schritt für Schritt aktualisieren, damit Sie jeden Schritt nachvollziehen können.

  1. Zuerst müssen wir die Kosten nach Gewicht ermitteln . Fügen Sie dazu einfach diesen Code zur Methode compute_shipping hinzu:
 <?php

//...

Öffentliche Funktion compute_shipping( $package ) {


$gewicht = 0;

$Kosten = 0;

$country = $package["destination"]["country"];

foreach ( $package['contents'] as $item_id => $values ​​)

{

$_product = $values['data'];

$weight = $weight + $_product->get_weight() * $values['quantity'];

}

$gewicht = wc_get_weight( $gewicht, 'kg' );

if( $gewicht <= 10 ) {

$Kosten = 0;

} elseif( $gewicht <= 30 ) {

$Kosten = 5;


} Elseif( $Gewicht <= 50 ) {


$Kosten = 10;


} anders {

$Kosten = 20;

}

}
  1. Aus dem obigen Code haben wir die Kosten basierend auf dem Gewicht des Warenkorbs, wir müssen die Kosten für das ausgewählte Versandland berechnen. Fügen Sie dazu diesen Code hinzu:
 <?php


Öffentliche Funktion compute_shipping( $package ) {


$countryZones = array(

'HR' => 0,

'UNS' => 3,

'GB' => 2,

'CA' => 3,

'ES' => 2,

'DE' => 1,

'ES' => 1

);


$zonePrices = array(

0 => 10,

1 => 30,

2 => 50,

3 => 70

);


$zoneFromCountry = $countryZones[ $country ];

$priceFromZone = $zonePrices[ $zoneFromCountry ];


$Kosten += $PreisVonZone;

}

  1. Wir haben die Kosten nach dem Gesamtgewicht berechnet und die Kosten nach Lieferland hinzugefügt. Der letzte Schritt besteht darin, diesen Code hinzuzufügen, um den Tarif zu registrieren.

Wie der Kodex funktioniert

Im ersten Ausschnitt in diesem Abschnitt haben wir einige Startvariablen definiert: $weight , $cost und $country . Um die Gesamtsumme zu erhalten, erhalten wir das Gesamtgewicht, indem wir den Warenkorb iterieren und das Gewicht für jedes Produkt im Warenkorb zur Variablen $weight addieren.

Nachdem wir das Gesamtgewicht haben, verwenden wir die function wc_get_weight , um das Gewicht in Kilogramm umzurechnen, da dies die Einheit ist, die unsere Versandart begrenzt hat. Dann wurde als letztes das Limit auf 100kg gesetzt.

Im zweiten Ausschnitt enthält das Array $countryZones die Zonen für jedes Land und das zweite Array $zonePrices enthält die Preise für jede Zone.

Dies wird das Ergebnis für Italien Zone 1 sein: Ergebnis Italien

Dies wird das Ergebnis für Spanien Zone 2 sein: Ergebnis Spanien

Dies wird das Ergebnis für die Kanada-Zone sein:

Endergebnis

Wenn Sie Schwierigkeiten hatten, diesen Code zu implementieren, finden Sie hier den vollständigen Code:

 <?php


Öffentliche Funktion compute_shipping( $package ) {

$gewicht = 0;

$Kosten = 0;

$country = $package["destination"]["country"];

foreach ( $package['contents'] as $item_id => $values ​​)

{

$_product = $values['data'];

$weight = $weight + $_product->get_weight() * $values['quantity'];

}
$gewicht = wc_get_weight( $gewicht, 'kg' );

if( $gewicht <= 10 ) {

$Kosten = 0;

} elseif( $gewicht <= 30 ) {

$Kosten = 5;

} Elseif( $Gewicht <= 50 ) {

$Kosten = 10;

} anders {

$Kosten = 20;

}

$countryZones = array(

'HR' => 0,

'UNS' => 3,

'GB' => 2,

'CA' => 3,

'ES' => 2,

'DE' => 1,

'ES' => 1

);




$zonePrices = array(

0 => 10,

1 => 30,

2 => 50,

3 => 70

);


$zoneFromCountry = $countryZones[ $country ];

$priceFromZone = $zonePrices[ $zoneFromCountry ];

$Kosten += $PreisVonZone;

$rate = array(

'id' => $this->id,

'label' => $this->title,

'Kosten' => $Kosten

);

$this->add_rate( $rate);

}

Fazit

In diesem Beitrag haben wir ein benutzerdefiniertes Plugin erstellt, um eine benutzerdefinierte Versandmethode in WooCommerce hinzuzufügen. Darüber hinaus habe ich Ihnen die WooCommerce-Versand-API zur Verfügung gestellt, mit der Sie Ihre Versandmethode in einfachen Schritten erstellen können. Außerdem können Einschränkungen und Verfügbarkeit innerhalb der Versandart festgelegt werden, wenn die Verfügbarkeit oder die Kosten der Versandart berechnet werden. Sie können jedoch mithilfe von WooCommerce-Aktionen außerhalb der Versandart festgelegt werden. Ich hoffe, dass dieses Tutorial eine Lösung für das Hinzufügen einer benutzerdefinierten Versandmethode in WooCommerce bietet.

Ähnliche Artikel