Cum să adăugați o metodă de livrare personalizată în WooCommerce
Publicat: 2020-09-01Dacă sunteți familiarizat cu WooCommerce, știți că este o soluție excelentă de comerț electronic gratuit, cu un set de caracteristici incredibil de util. Ceea ce iese în evidență este că WooCommerce este dezvoltat având în vedere extinderea, similar cu modularitatea WordPress.
Cu toate acestea, dacă aveți nevoie de ceva în plus de la WooCommerce, de multe ori descoperiți că WooCommerce nu vă oferă tot ceea ce aveți nevoie, de exemplu, dacă doriți să adăugați o metodă de expediere personalizată. Cu toate acestea, nu vă faceți griji, deoarece în acest scurt tutorial, veți învăța cum să creați o metodă simplă de expediere pentru WooCommerce, care va calcula costul transportului.
În plus, veți învăța cum să adăugați unele restricții la pluginul nostru, astfel încât metoda de livrare să fie disponibilă pentru unele țări.
Reguli de expediere personalizate pentru metodele de expediere
În această secțiune, vom crea reguli de expediere personalizate pentru metodele de expediere pe care le vom folosi pentru a crea codul. Vom defini modul în care metoda de expediere va calcula costul și unde se poate expedia. Aceasta înseamnă că costul va fi determinat de greutatea și zona către care trebuie să expediem.
Pentru acest exemplu, vom livra în SUA, Canada, Germania, Regatul Unit, Italia, Spania și Kenya. Kenya va fi Zona noastră 0 cu 10 USD, Italia Zona 1 cu 30 USD, Spania Zona 2 cu 50 USD, Regatul Unit Zona 2 cu 50 USD, SUA și Canada Zona 3 cu 70 USD.
Pentru greutate, le vom stabili prețul după cum urmează: 0 – 10 kg gratuit, 11 – 30 kg pentru 5 USD, 31-50 kg pentru 10 USD și 51-100 kg pentru 20 USD.
S-ar putea să fiți gata să începeți codarea, dar nu încă! În primul rând, trebuie să aflați despre API-ul de expediere WooCommerce . Când doriți să creați o metodă de expediere personalizată, trebuie să extindeți clasa din clasa abstractă WooCommerce WC_Shipping_Method. Are câteva atribute definite, care sunt:
-
$id
: ID (slug, cuvânt cheie) al expedierii noastre, care este necesar. -
$number
: Acesta este un ID întreg. -
$method_title
: Numele expedierii noastre afișat în administrator. -
$method_description
: O scurtă descriere a transportului nostru afișată în administrator (Opțional). -
$enabled
: șir boolean, „da” sau „nu”, care oferă informații dacă expedierea noastră este activată și dacă poate fi folosită sau nu. -
$title
: este folosit pentru a afișa numele nostru de expediere pe site-ul nostru. -
$availability
: Aceasta definește dacă transportul este disponibil sau nu. -
$countries
: o serie de țări pentru care este activată această metodă. Valoarea implicită este o matrice goală. -
$tax_status
: valoarea implicită este taxabilă. Dacă un articol este impozabil, atunci se va percepe taxa. -
$fee
: valoarea implicită este 0 -
$minimum_fee
: taxa minimă pentru metodă și valoarea implicită este nulă. -
$has_settings
: Aceasta definește dacă această metodă are setări. Valoarea implicită este adevărată. -
$supports
: o matrice care conține caracteristici pe care această metodă le acceptă. Valoarea implicită este o matrice goală. -
$rates
: O serie de tarife și acestea trebuie completate pentru a înregistra costurile de transport. Valoarea implicită este o matrice goală.
Metodele definite în WC_Shipping_Method sunt:
-
is_taxable()
: Aceasta returnează dacă trebuie sau nu să calculăm taxa pe lângă tariful de expediere. -
add_rate( $args = array() )
: Aceasta împinge o rată de expediere definită în parametrul $args în atributul $rate. -
has_settings()
: Aceasta returnează valoarea atributului $has_settings. -
is_available()
: se întoarce dacă transportul este disponibil și dacă există țări setate în atributul $countries și atributul $availability este setat la valori inclusiv, specifice sau excluzând, va returna adevărat sau fals dacă țara este disponibilă pentru expediere . -
get_title()
: Aceasta returnează titlul acestei expedieri. -
get_fee( $fee, $total )
: Aceasta returnează valoarea taxei pentru această expediere pe baza taxei $ și a $totalului analizate. -
supports( $feature )
: Aceasta se întoarce dacă această metodă de livrare acceptă sau nu o funcție.
Deoarece clasa WC_Shipping_Method extinde clasa WC_Settings_API, există mai multe atribute și metode, pe care nu le voi explica aici din motive de simplitate.
De asemenea, trebuie definite și alte metode, astfel încât transportul să poată obține sau seta setări și să calculeze costul real al transportului. Aceste metode sunt enumerate aici:
-
init()
: Aceasta creează câmpurile și setările formularului. Cu toate acestea, poate fi denumit diferit, atâta timp cât folosim metodele din interiorul lui și îl numim în metoda __constructor. -
calculate_shipping( $package )
: Această metodă este folosită pentru a calcula costul pentru această expediere, iar pachetul este o matrice cu produsele de expediat.
Aș dori să mă concentrez pe metoda calculate_shipping. Pentru exemplul nostru, vom folosi această metodă și o vom adăuga la metoda add_rate. Această metodă va accepta o matrice cu mai multe opțiuni precum:
-
id
: Acesta este ID-ul ratei. -
label
: Aceasta este eticheta pentru tarif. -
cost
: valoarea transportului. -
taxes
: acceptă o serie de taxe sau nimic, așa că taxa este calculată de WooCommerce. Dacă nu doriți ca acesta să accepte taxe, poate accepta false. -
calc_tax
: Aceasta acceptă per_order sau per_item. Dacă utilizați per_item, va trebui furnizată o serie de costuri.
Vom folosi un filtru WordPress pentru a obține matricea care adaugă metoda noastră de expediere în matricea metodei înregistrate prin trecerea numelui clasei noastre, folosind un filtru WordPress care este definit în interiorul pluginului WooCommerce. Filtrul se numește woocommerce_shipping_methods.
Cu asta pe masă, să intrăm acum în secțiunea de codificare a acestui scurt tutorial, astfel încât să puteți înțelege întregul concept din fragmentele PHP pe care le voi împărtăși.
a) Pași pentru crearea noii clase de expediere
În această secțiune, vom crea metoda noastră de livrare ca un nou plugin care extinde WooCommerce.
- Mai întâi, trebuie să deschideți wp-content > pluginuri și să creați un folder nou. Pentru aceasta, voi folosi numele njengah -shipping
- Apoi, trebuie să creați un fișier cu același nume njengah –shipping.php
- În acest fișier adăugați următorul cod:
<?php /** * Nume plugin: Njengah Shipping * URI plugin: https://njengah.com/plugins/ * Descriere: * Versiunea: 1.0.0 * Autor: Joe Njenga * URI autor: https://njengah.com s */ dacă ( ! definit( 'WPINC' ) ) { a muri; } /* * Verificați dacă WooCommerce este activ */ if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option('active_plugins' ) ) ) ) { funcția njengahplus_shipping_method() { dacă ( ! class_exists( 'NjengahPlus_Shipping_Method' ) ) { clasa NjengahPlus_Shipping_Method extinde WC_Shipping_Method { /** * Constructor pentru clasa dvs. de expediere * * @access public * @return nul */ funcția publică __construct() { $this->id = 'njengahplus'; $this->method_title = __( 'Livrare NjengahPlus', 'njengahplus' ); $this->method_description = __( 'Metoda de livrare personalizată pentru NjengahPlus', 'njengahplus'); $this->init(); $this->enabled = isset( $this->settings['activat'] ) ? $this->settings['enabled'] : 'da'; $this->title = isset( $this->settings['title'] ) ? $this->settings['title'] : __('NjengahShipping', 'njengahplus'); } /** * Inițiază-ți setările * * @access public * @return nul */ function init() { // Încărcați API-ul de setări $this->init_form_fields(); $this->init_settings(); // Salvați setările în admin dacă aveți unele definite add_action( 'woocommerce_update_options_shipping_' . $this->id, array( $this, 'process_admin_options' ) ); } /** * Definiți câmpul de setări pentru această expediere * @return nul */ funcția init_form_fields() { // Vom adăuga setările noastre aici } /** * Această funcție este utilizată pentru a calcula costul de transport. În cadrul acestei funcții, putem verifica greutățile, dimensiunile și alți parametri. * * @access public * @param mixed $pachet @return nul */ funcția publică calculate_shipping( $pachet ) { // Vom adăuga costul, tariful și logica aici } } } } add_action('woocommerce_shipping_init', 'njengahplus_shipping_method'); funcția add_njengahplus_shipping_method( $metode ) { $methods[] = 'Metoda_de_Livrare_NjengahPlus'; returnează $metode; } add_filter('woocommerce_shipping_methods', 'add_njengahplus_shipping_method'); }
Cum functioneaza
- Mai întâi verificăm dacă constanta WPINC este definită. Dacă nu este definit, înseamnă că cineva încearcă să acceseze acest fișier direct sau dintr-o locație, care nu este WordPress.
- Apoi trebuie să verificăm dacă WooCommerce este activ. Aici verificăm dacă woocommerce.php se află în matricea de pluginuri active care sunt salvate în baza de date sub opțiunea active_plugins.
- woocommerce_shipping_init este acțiunea principală pentru WooCommerce Shipping, care include toate clasele de expediere înainte ca acestea să fie instanțiate. Utilizarea acestei acțiuni vă va asigura că metoda noastră de expediere va fi inclusă după ce WooCommerce a fost inițializat și în locul potrivit pentru ca WooCommerce să o utilizeze.
- Metoda __construct stabilește câteva atribute generale și unele dintre ele pot fi ușor suprascrise după ce setările sunt încărcate din baza de date în metoda init.
- Celelalte metode sunt lăsate goale pentru că le vom defini mai târziu în tutorial.
Apoi trebuie să vă îndreptați pentru a activa pluginul urmând pașii de mai jos:
- Conectați-vă la site-ul dvs. WordPress și accesați tabloul de bord ca utilizator administrator.
- Din meniul Dashboard, faceți clic pe Plugins și activați livrarea Njengah, după cum se arată mai jos:
- După activarea pluginului, mergeți la WooCommerce > Setări . Faceți clic pe fila WooCommerce, apoi faceți clic pe expediere NjengahPlus . Ar trebui să poți vedea asta:
b) Stabilirea Disponibilității țării
Metoda de expediere creată de noi este disponibilă numai în lista de țări determinată anterior.
- Adăugați acest lucru în metoda __construct :
<?php //... $this->method_description = __( 'Metoda de livrare personalizată pentru NjengahPlus', 'njengahplus'); // Disponibilitate și țări $this->availability = 'inclusiv'; $this->countries = array( „SUA”, // Statele Unite ale Americii „CA”, // Canada „DE”, // Germania „GB”, // Regatul Unit „IT”, // Italia „ES”, // Spania „HR” // Kenya ); $this->init(); //...
Cum funcționează codul
Atributul de disponibilitate este setat la „inclusiv”, astfel încât această expediere să fie disponibilă numai pentru țările din atributul țări.
WooCommerce va verifica dacă țara de expediere este inclusă în țările atribute.
Crearea setărilor
Trebuie pur și simplu să copiați acest cod și să completați metoda noastră init_form_fields:
<?php funcția init_form_fields() { $this->form_fields = array( 'activat' => matrice( 'title' => __( 'Activare', 'njengahplus' ), 'type' => 'caseta de selectare', 'description' => __( 'Activați această expediere.', 'njengahplus' ), 'default' => 'da' ), 'title' => matrice( 'title' => __( 'Titlu', 'njengahplus' ), 'type' => 'text', 'description' => __( 'Titlul care urmează să fie afișat pe site', 'njengahplus' ), 'default' => __( 'Livrare NjengahPlus', 'njengahplus' ) ), ); }
Pentru a verifica rezultatul, urmați acești pași:
- Conectați-vă la site-ul dvs. WordPress și accesați Tabloul de bord ca utilizator administrator. Din meniul Tabloul de bord, faceți clic pe WooCommerce > Setări
- Faceți clic pe fila Expediere și faceți clic pe Expediere NjengahPlus după cum se arată mai jos:
- Activați caseta de selectare și salvați modificările.
Putem seta metoda de expediere pentru a expedia până la 100 kg. Apoi vom permite ca acesta să fie editat în setări dacă regula se schimbă în curând. După setarea asta, codul de setări va arăta astfel:
<?php funcția init_form_fields() { $this->form_fields = array( 'activat' => matrice( 'title' => __( 'Activare', 'njengahplus' ), 'type' => 'caseta de selectare', 'description' => __( 'Activați această expediere.', 'njengahplus' ), 'default' => 'da' ), 'title' => matrice( 'title' => __( 'Titlu', 'njengahplus' ), 'type' => 'text', 'description' => __( 'Titlul care urmează să fie afișat pe site', 'njengahplus' ), 'default' => __( 'Livrare NjengahPlus', 'njengahplus' ) ), 'greutate' => matrice( 'title' => __( 'Greutate (kg)', 'njengahplus' ), 'type' => 'număr', 'description' => __( 'Greutate maximă permisă', 'njengahplus' ), „implicit” => 100 ), ); }
În codul de mai sus, am setat acum greutatea maximă sub setări. Iată rezultatul:
c) Calcularea costului de transport
Pentru a calcula costul de expediere, vom actualiza metoda calculate_shipping pe rând, astfel încât să puteți înțelege fiecare pas.
- În primul rând, trebuie să obținem costul în funcție de greutate . Pentru a face acest lucru, adăugați pur și simplu acest cod la metoda calculate_shipping:
<?php //... funcția publică calculate_shipping( $pachet ) { $greutate = 0; $cost = 0; $țara = $pachet[„destinație”][„țara”]; foreach ( $pachet['conținut'] ca $item_id => $valori ) { $_product = $values['date']; $greutate = $greutate + $_produs->get_weight() * $values['cantity']; } $greutate = wc_get_weight( $greutate, 'kg'); if( $greutate <= 10 ) { $cost = 0; } elseif( $greutate <= 30 ) { $cost = 5; } elseif( $greutate <= 50 ) { $cost = 10; } altfel { $cost = 20; } }
- Din codul de mai sus, avem costul în funcție de greutatea coșului, trebuie să calculăm costul pentru țara de expediere selectată. Pentru a face acest lucru adăugați acest cod:
<?php funcția publică calculate_shipping( $pachet ) { $countryZones = matrice( „HR” => 0, „SUA” => 3, „GB” => 2, „CA” => 3, „ES” => 2, „DE” => 1, „IT” => 1 ); $zonePrețuri = matrice( 0 => 10, 1 => 30, 2 => 50, 3 => 70 ); $zonăFromCountry = $țarăZone[ $țara ]; $priceFromZone = $zonaPrețuri[ $zonăDinȚara ]; $cost += $priceFromZone; }
- Am calculat costul în funcție de greutatea totală și am adăugat și costul în funcție de țara de expediere. Ultimul pas este să adăugați acest cod pentru a înregistra tariful.
Cum funcționează codul
În primul fragment din această secțiune, am definit câteva variabile de pornire: $weight
, $cost
și $country
. Pentru a obține totalul, obținem greutatea totală prin iterarea coșului și adăugând greutatea fiecărui produs din coș la variabila $weight
.
După ce avem greutatea totală, folosim function wc_get_weight
pentru a converti greutatea în kilograme, deoarece aceasta este unitatea pentru care metoda noastră de expediere a stabilit limita. Apoi ultimul lucru a fost să stabilim limita la 100 kg.
În al doilea fragment, matricea $countryZones
deține zonele pentru fiecare țară, iar a doua matrice $zonePrices
deține prețurile pentru fiecare zonă.
Acesta va fi rezultatul pentru Italia Zona 1:
Acesta va fi rezultatul pentru Spania Zona 2:
Acesta va fi rezultatul pentru Zona Canada:
Dacă ați avut dificultăți în implementarea acestui cod, iată codul complet:
<?php funcția publică calculate_shipping( $pachet ) { $greutate = 0; $cost = 0; $țara = $pachet[„destinație”][„țara”]; foreach ( $pachet['conținut'] ca $item_id => $valori ) { $_product = $values['date']; $greutate = $greutate + $_produs->get_weight() * $values['cantity']; } $greutate = wc_get_weight( $greutate, 'kg'); if( $greutate <= 10 ) { $cost = 0; } elseif( $greutate <= 30 ) { $cost = 5; } elseif( $greutate <= 50 ) { $cost = 10; } altfel { $cost = 20; } $countryZones = matrice( „HR” => 0, „SUA” => 3, „GB” => 2, „CA” => 3, „ES” => 2, „DE” => 1, „IT” => 1 ); $zonePrețuri = matrice( 0 => 10, 1 => 30, 2 => 50, 3 => 70 ); $zonăFromCountry = $țarăZone[ $țara ]; $priceFromZone = $zonaPrețuri[ $zonăDinȚara ]; $cost += $priceFromZone; $rata = matrice( 'id' => $this->id, 'label' => $this->title, 'cost' => $cost ); $this->add_rate( $rata ); }
Concluzie
În această postare, am creat un plugin personalizat pentru a adăuga o metodă de expediere personalizată în WooCommerce. În plus, v-am împărtășit API-ul de expediere WooCommerce, care vă permite să vă creați metoda de expediere cu pași simpli. De asemenea, limitările și disponibilitatea pot fi setate în interiorul metodei de expediere atunci când se calculează disponibilitatea sau costul metodei de expediere. Cu toate acestea, acestea pot fi setate în afara metodei de expediere folosind acțiuni WooCommerce. Sper că acest tutorial a oferit o soluție pentru adăugarea unei metode de expediere personalizată în WooCommerce.
Articole similare
- Cum să adăugați numere GTIN pe produse în WooCommerce
- Cum să eliminați a fost adăugat în coșul dvs. Mesaj WooCommerce
- Cum să adăugați o siglă de încredere sau sigură pe pagina de finalizare a plății WooCommerce
- Deconectare WooCommerce fără confirmare: Cum să eliminați „Sunteți sigur că doriți să vă deconectați?”
- Cum să redirecționezi o pagină WordPress fără pluginuri?
- Cum se adaugă imaginea produsului Pagina de plată WooCommerce
- Cum să setați produsele recomandate în WooCommerce
- Cum să ascundeți câmpul Cod cupon WooCommerce
- Cum să afișați produsele WooCommerce după categorie
- Cum să ascundeți toate produsele din pagina de magazin în WooCommerce
- Cum să sortați categoriile WooCommerce pentru o experiență mai bună a utilizatorului
- Cum să vinzi produse digitale cu WooCommerce
- Cum să schimbați anunțul „Adăugat în coș” WooCommerce
- Cum se dezactivează metoda de plată pentru o anumită categorie
- Cele mai bune 30 de plugin-uri WooCommerce pentru magazinul dvs. (Majoritatea sunt GRATUITE)
- Cum să redenumești mesajele de stare a comenzii în WooCommerce
- Cele mai bune 23 de plugin-uri WooCommerce pentru personalizarea paginii de plată
- Cum să eliminați Sortarea implicită a produselor WooCommerce
- Cum să verificați dacă pluginul este activ în WordPress [ 3 MODI ]