Come aggiungere un metodo di spedizione personalizzato in WooCommerce

Pubblicato: 2020-09-01

WooCommerce Aggiungi un metodo di spedizione personalizzato Se hai familiarità con WooCommerce, sai che è un'ottima soluzione di e-commerce gratuita, con un set di funzionalità incredibilmente utile. Ciò che spicca è che WooCommerce è sviluppato pensando all'estendibilità, simile alla modularità di WordPress.

Tuttavia, se hai bisogno di qualcosa in più da WooCommerce, spesso scopri che WooCommerce non ti offre tutto ciò di cui hai bisogno, ad esempio se desideri aggiungere un metodo di spedizione personalizzato. Tuttavia, non preoccuparti perché in questo breve tutorial imparerai come creare un semplice metodo di spedizione per WooCommerce, che calcolerà il costo della spedizione.

Inoltre, imparerai come aggiungere alcune restrizioni al nostro plug-in in modo che il metodo di spedizione sia disponibile per alcuni paesi.

Regole di spedizione personalizzate per i metodi di spedizione

In questa sezione creeremo regole di spedizione personalizzate per i metodi di spedizione che utilizzeremo per creare il codice. Definiremo come il metodo di spedizione calcolerà il costo e dove può essere spedito. Ciò significa che il costo sarà determinato dal peso e dalla zona in cui dobbiamo spedire.

Per questo esempio, spediremo negli Stati Uniti, Canada, Germania, Regno Unito, Italia, Spagna e Kenya. Il Kenya sarà la nostra Zona 0 per $ 10, Italia Zona 1 per $ 30, Spagna Zona 2 per $ 50, Regno Unito Zona 2 per $ 50, USA e Canada Zona 3 per $ 70.

Per il peso, li valuteremo come segue: 0 – 10 kg gratis, 11 – 30 kg per $ 5, 31-50 kg per $ 10 e 51-100 kg per $ 20.

Potresti essere pronto per iniziare a programmare, ma non ancora! Innanzitutto, devi conoscere l' API di spedizione WooCommerce . Quando vuoi creare un metodo di spedizione personalizzato, devi estendere la classe dalla classe astratta WooCommerce WC_Shipping_Method. Ha alcuni attributi definiti, che sono:

  • $id : ID (slug, parola chiave) della nostra spedizione richiesta.
  • $number : questo è un ID intero.
  • $method_title : il nome della nostra spedizione mostrato nell'amministratore.
  • $method_description : una breve descrizione della nostra spedizione mostrata in admin (opzionale).
  • $enabled : String Boolean, "yes" o "no", che fornisce l'informazione se la nostra spedizione è abilitata e se può essere utilizzata o meno.
  • $title : viene utilizzato per visualizzare il nome della spedizione sul nostro sito.
  • $availability : Definisce se la spedizione è disponibile o meno.
  • $countries : una serie di paesi per i quali questo metodo è abilitato. Il valore predefinito è una matrice vuota.
  • $tax_status : il valore predefinito è imponibile. Se un articolo è soggetto a tassazione, verrà addebitata l'imposta.
  • $fee : il valore predefinito è 0
  • $minimum_fee : la tariffa minima per il metodo e il valore predefinito è null.
  • $has_settings : definisce se questo metodo ha delle impostazioni. Il valore predefinito è vero.
  • $supports : un array contenente le funzionalità supportate da questo metodo. Il valore predefinito è una matrice vuota.
  • $rates : una serie di tariffe e questo deve essere compilato per registrare i costi di spedizione. Il valore predefinito è una matrice vuota.

I metodi definiti in WC_Shipping_Method sono:

  • is_taxable() : restituisce se è necessario o meno calcolare l'imposta in aggiunta alla tariffa di spedizione.
  • add_rate( $args = array() ) : Questo spinge una tariffa di spedizione definita nel parametro $args nell'attributo $rates.
  • has_settings() : restituisce il valore dell'attributo $has_settings.
  • is_available() : restituisce se la spedizione è disponibile e se ci sono paesi impostati nell'attributo $countries e l'attributo $availability è impostato su valori inclusi, specifici o esclusi, restituirà true o false se il paese è disponibile per la spedizione .
  • get_title() : restituisce il titolo di questa spedizione.
  • get_fee( $fee, $total ) : restituisce il valore della commissione per questa spedizione in base alla $fee e al $total analizzati.
  • supports( $feature ) : restituisce se questo metodo di spedizione supporta o meno una funzione.

Poiché la classe WC_Shipping_Method estende la classe WC_Settings_API, ci sono più attributi e metodi, che non spiegherò qui per motivi di semplicità.

Inoltre, è necessario definire altri metodi in modo che la spedizione possa ottenere o impostare le impostazioni e calcolare il costo effettivo della spedizione. Questi metodi elencati qui:

  • init() : crea i campi e le impostazioni del modulo. Tuttavia, può essere chiamato in modo diverso, purché utilizziamo i metodi al suo interno e lo chiamiamo nel metodo __constructor.
  • calculate_shipping( $package ) : questo metodo viene utilizzato per calcolare il costo di questa spedizione e il pacchetto è un array con i prodotti da spedire.

Vorrei concentrarmi sul metodo di calcolo_spedizione. Per il nostro esempio, useremo questo metodo e lo aggiungeremo al metodo add_rate. Questo metodo accetterà un array con diverse opzioni come:

  • id : questo è l'ID della tariffa.
  • label : questa è l'etichetta della tariffa.
  • cost : L'importo della spedizione.
  • taxes : Accetta una serie di tasse o niente, quindi le tasse vengono calcolate da WooCommerce. Se non vuoi che accetti le tasse, può accettare false.
  • calc_tax : accetta per_order o per_item. Se utilizzi per_item, dovrai fornire una serie di costi.

Utilizzeremo un filtro WordPress per ottenere l'array che aggiunge il nostro metodo di spedizione nell'array del metodo registrato passando il nome della nostra classe, utilizzando un filtro WordPress definito all'interno del plug-in WooCommerce. Il filtro si chiama woocommerce_shipping_methods.

Con questo sul tavolo, entriamo ora nella sezione di codifica di questo breve tutorial in modo che tu possa capire l'intero concetto nei frammenti di PHP che condividerò.

a) Passaggi per creare la nuova classe di spedizione

In questa sezione creeremo il nostro metodo di spedizione come un nuovo plugin che estende WooCommerce.

  1. Innanzitutto, devi aprire wp-content > plugin e creare una nuova cartella. Per questo, userò il nome njengah -shipping
  2. Quindi, devi creare un file con lo stesso nome njengah –shipping.php
  3. In questo file aggiungi il seguente codice:
 <?php

/**
* Nome plug-in: spedizione Njengah
* URI del plug-in: https://njengah.com/plugins/
* Descrizione: 
* Versione: 1.0.0
* Autore: Joe Njenga
* URI dell'autore: https://njengah.com
S
*/

se ( ! definito( 'WPINC' ) ) {

morire;

}
/*
* Verifica se WooCommerce è attivo
*/
if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {

funzione njengahplus_shipping_method() {

if ( ! class_exists( 'NjengahPlus_Shipping_Method' ) ) {

class NjengahPlus_Shipping_Method estende WC_Shipping_Method {

/**

* Costruttore per la tua classe di spedizione

*

* @accesso pubblico

* @ritorno vuoto

*/

funzione pubblica __costruzione() {

$this->id = 'njengahplus';

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

$this->method_description = __( 'Metodo di spedizione personalizzato per NjengahPlus', 'njengahplus' );

$this->init();

$questo->abilitato = isset($questo->impostazioni['abilitato'] )? $questo->impostazioni['abilitato'] : 'sì';

$questo->titolo = isset($questo->impostazioni['titolo'] ) ? $questo->impostazioni['titolo'] : __( 'NjengahShipping', 'njengahplus' );

}

/**
* Inizia le tue impostazioni
*
* @accesso pubblico

* @ritorno vuoto

*/

funzione init() {

// Carica l'API delle impostazioni

$questo->init_form_fields();

$this->init_settings();

// Salva le impostazioni in admin se ne hai definite

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

}


/**

* Definisci il campo delle impostazioni per questa spedizione

* @ritorno vuoto

*/

funzione init_form_fields() {

// Aggiungeremo le nostre impostazioni qui

}

/**
* Questa funzione viene utilizzata per calcolare il costo di spedizione. All'interno di questa funzione, possiamo controllare pesi, dimensioni e altri parametri.
*
* @accesso pubblico
* @param misto $pacchetto
 @ritorno vuoto
*/

funzione pubblica calcola_spedizione($pacchetto) {


// Aggiungeremo il costo, la tariffa e la logica qui

}

}

}

}


add_action('woocommerce_shipping_init', 'njengahplus_shipping_method');

funzione add_njengahplus_shipping_method ($ metodi) {

$methods[] = 'NjengahPlus_Shipping_Method';
restituire $metodi;
}

add_filter('woocommerce_shipping_methods', 'add_njengahplus_shipping_method');

}

Come funziona

  • Per prima cosa controlliamo se la costante WPINC è definita. Se non è definito, significa che qualcuno sta tentando di accedere a questo file direttamente o da una posizione, che non è WordPress.
  • Quindi dobbiamo verificare se WooCommerce è attivo. Qui stiamo controllando se woocommerce.php è nell'array di plugin attivi che sono salvati nel database sotto l'opzione active_plugins.
  • woocommerce_shipping_init è l'azione principale per WooCommerce Shipping che include tutte le classi di spedizione prima che vengano istanziate. L'uso di questa azione assicurerà che il nostro metodo di spedizione sia incluso dopo che WooCommerce è stato inizializzato e nel posto giusto per WooCommerce per usarlo.
  • Il metodo __construct imposta alcuni attributi generali e alcuni di essi possono essere facilmente sovrascritti dopo che le impostazioni sono state caricate dal database nel metodo init.
  • Gli altri metodi vengono lasciati vuoti perché li definiremo più avanti nel tutorial.

Quindi devi andare ad attivare il plugin usando i passaggi mostrati di seguito:

  1. Accedi al tuo sito WordPress e accedi alla Dashboard come utente amministratore.
  2. Dal menu Dashboard, fai clic su Plugin e attiva la spedizione Njengah come mostrato di seguito: attivazione del plugin
  3. Dopo aver attivato il plug-in, vai su WooCommerce> Impostazioni . Fare clic sulla scheda WooCommerce, quindi su NjengahPlus shipping . Dovresti essere in grado di vedere questo: Risultato per il primo codice

b) Impostazione della disponibilità del Paese

Il metodo di spedizione che abbiamo creato è disponibile solo nell'elenco di paesi precedentemente determinato.

  1. Aggiungi questo nel metodo __construct :
 <?php

//...

$this->method_description = __( 'Metodo di spedizione personalizzato per NjengahPlus', 'njengahplus' );

// Disponibilità e Paesi

$questo->disponibilità = 'incluso';

$questo->paesi = array(

'US', // Stati Uniti d'America

'CA', // Canada

'DE', // Germania

'GB', // Regno Unito

'IT', // Italia

'ES', // Spagna

'HR' // Kenya

);

$this->init();

//...

Come funziona il codice

L'attributo disponibilità è impostato su "incluso" in modo che questa spedizione sia disponibile solo per i paesi nell'attributo paesi.

WooCommerce verificherà se il paese di spedizione è incluso negli attributi dei paesi.

Creazione delle impostazioni

Devi semplicemente copiare questo codice e popolare il nostro metodo init_form_fields:

 <?php



funzione init_form_fields() {

$this->form_fields = array(

'abilitato' => array(

'title' => __( 'Abilita', 'njengahplus' ),

'tipo' => 'casella di controllo',

'description' => __( 'Abilita questa spedizione.', 'njengahplus' ),

'predefinito' => 'sì'

),


'titolo' => array(

'titolo' => __( 'Titolo', 'njengahplus' ),

'tipo' => 'testo',

'description' => __( 'Titolo da visualizzare sul sito', 'njengahplus' ),

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

),


);


}

Per verificare il risultato, attenersi alla seguente procedura:

  1. Accedi al tuo sito WordPress e accedi alla Dashboard come utente amministratore Dal menu Dashboard, fai clic su WooCommerce > Impostazioni
  2. Fare clic sulla scheda Spedizione e fare clic su Spedizione NjengahPlus come mostrato di seguito: Njengah più spese di spedizione
  3. Abilita la casella di controllo e salva le modifiche.

Possiamo impostare il metodo di spedizione per spedire fino a 100 kg. Quindi consentiremo che venga modificato nelle impostazioni se quella regola cambia presto. Dopo aver impostato questo, il codice delle impostazioni sarà simile a questo:

 <?php




funzione init_form_fields() {

$this->form_fields = array(

'abilitato' => array(

'title' => __( 'Abilita', 'njengahplus' ),

'tipo' => 'casella di controllo',

'description' => __( 'Abilita questa spedizione.', 'njengahplus' ),

'predefinito' => 'sì'

),


'titolo' => array(

'titolo' => __( 'Titolo', 'njengahplus' ),

'tipo' => 'testo',

'description' => __( 'Titolo da visualizzare sul sito', 'njengahplus' ),

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

),


'peso' => array(

'title' => __( 'Peso (kg)', 'njengahplus' ),

'tipo' => 'numero',

'description' => __( 'Peso massimo consentito', 'njengahplus' ),

'predefinito' => 100

),


);

}

Nel codice sopra, ora abbiamo impostato il peso massimo nelle impostazioni. Ecco il Risultato: Peso massimo

c) Calcolo del costo di spedizione

Per calcolare il costo di spedizione, aggiorneremo il metodo calcola_spedizione un passaggio alla volta in modo che tu possa comprendere ogni passaggio.

  1. Innanzitutto, dobbiamo calcolare il costo in base al peso . Per fare ciò, aggiungi semplicemente questo codice al metodo calcolare_spedizione:
 <?php

//...

funzione pubblica calcola_spedizione($pacchetto) {


$peso = 0;

$costo = 0;

$paese = $pacchetto["destinazione"]["paese"];

foreach ($pacchetto['contenuto'] as $item_id => $valori)

{

$_prodotto = $valori['dati'];

$peso = $peso + $_prodotto->get_peso() * $valori['quantità'];

}

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

se( $peso <= 10 ) {

$costo = 0;

} altro se( $peso <= 30 ) {

$costo = 5;


} altro se( $peso <= 50 ) {


$costo = 10;


} altro {

$costo = 20;

}

}
  1. Dal codice sopra, abbiamo il costo in base al peso del carrello, dobbiamo calcolare il costo per il paese di spedizione selezionato. Per fare ciò aggiungi questo codice:
 <?php


funzione pubblica calcola_spedizione($pacchetto) {


$countryZones = array(

'HR' => 0,

'USA' => 3,

'GB' => 2,

'CA' => 3,

'ES' => 2,

'DE' => 1,

'IT' => 1

);


$zonaPrezzi = array(

0 => 10,

1 => 30,

2 => 50,

3 => 70

);


$zoneFromCountry = $countryZones[ $paese];

$prezzoDaZona = $zonaPrezzi[ $zonaDaPaese];


$costo += $prezzoDaZona;

}

  1. Abbiamo calcolato il costo in base al peso totale e abbiamo anche aggiunto il costo in base al paese di spedizione. L'ultimo passaggio consiste nell'aggiungere questo codice per registrare la tariffa.

Come funziona il codice

Nel primo snippet di questa sezione, abbiamo definito alcune variabili di partenza: $weight , $cost e $country . Per ottenere il totale, otteniamo il peso totale iterando il carrello e aggiungendo il peso per ciascun prodotto nel carrello alla variabile $weight .

Dopo aver ottenuto il peso totale, utilizziamo la function wc_get_weight per convertire il peso in chilogrammi poiché questa è l'unità che il nostro metodo di spedizione ha impostato il limite. Quindi l'ultima cosa è stata impostare il limite a 100 kg.

Nel secondo frammento, l'array $countryZones contiene le zone per ogni paese e il secondo array $zonePrices contiene i prezzi per ciascuna zona.

Questo sarà il risultato per l'Italia Zona 1: risultato italia

Questo sarà il risultato per la Spagna Zona 2: risultato Spagna

Questo sarà il risultato per la Canada Zone:

risultato finale

Se hai avuto difficoltà a implementare questo codice, ecco il codice completo:

 <?php


funzione pubblica calcola_spedizione($pacchetto) {

$peso = 0;

$costo = 0;

$paese = $pacchetto["destinazione"]["paese"];

foreach ($pacchetto['contenuto'] as $item_id => $valori)

{

$_prodotto = $valori['dati'];

$peso = $peso + $_prodotto->get_peso() * $valori['quantità'];

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

se( $peso <= 10 ) {

$costo = 0;

} altro se( $peso <= 30 ) {

$costo = 5;

} altro se( $peso <= 50 ) {

$costo = 10;

} altro {

$costo = 20;

}

$countryZones = array(

'HR' => 0,

'USA' => 3,

'GB' => 2,

'CA' => 3,

'ES' => 2,

'DE' => 1,

'IT' => 1

);




$zonaPrezzi = array(

0 => 10,

1 => 30,

2 => 50,

3 => 70

);


$zoneFromCountry = $countryZones[ $paese];

$prezzoDaZona = $zonaPrezzi[ $zonaDaPaese];

$costo += $prezzoDaZona;

$tasso = array(

'id' => $this->id,

'etichetta' => $questo->titolo,

'costo' => $costo

);

$questo->aggiungi_tasso($tasso);

}

Conclusione

In questo post, abbiamo creato un plug-in personalizzato per aggiungere un metodo di spedizione personalizzato in WooCommerce. Inoltre, ho condiviso con te l'API di spedizione WooCommerce che ti consente di creare il tuo metodo di spedizione con semplici passaggi. Inoltre, le limitazioni e la disponibilità possono essere impostate all'interno del metodo di spedizione durante il calcolo della disponibilità o del costo del metodo di spedizione. Tuttavia, possono essere impostati al di fuori del metodo di spedizione utilizzando le azioni WooCommerce. Spero che questo tutorial abbia fornito una soluzione per aggiungere un metodo di spedizione personalizzato in WooCommerce.

Articoli simili