WooCommerce'de Özel Nakliye Yöntemi Nasıl Eklenir

Yayınlanan: 2020-09-01

WooCommerce Özel Gönderim Yöntemi Ekle WooCommerce'e aşina iseniz, bunun inanılmaz derecede kullanışlı özelliklere sahip harika bir ücretsiz e-ticaret çözümü olduğunu bilirsiniz. Öne çıkan şey, WooCommerce'in WordPress'in modülerliğine benzer şekilde genişletilebilirlik göz önünde bulundurularak geliştirilmesidir.

Ancak, WooCommerce'den ekstra bir şeye ihtiyacınız varsa, örneğin özel bir nakliye yöntemi eklemek istiyorsanız, WooCommerce'in ihtiyacınız olan her şeyi vermediğini görürsünüz. Yine de, bu kısa eğitimde olduğu gibi endişelenmeyin, WooCommerce için nakliye maliyetini hesaplayacak basit bir nakliye yönteminin nasıl oluşturulacağını öğreneceksiniz.

Ek olarak, gönderim yönteminin bazı ülkelerde kullanılabilmesi için eklentimize nasıl bazı kısıtlamalar ekleyeceğinizi öğreneceksiniz.

Gönderi Yöntemleri için Özel Gönderi Kuralları

Bu bölümde, kodu oluşturmak için kullanacağımız gönderim yöntemleri için özel gönderim kuralları oluşturacağız. Gönderim yönteminin maliyeti nasıl hesaplayacağını ve nereye gönderebileceğini tanımlayacağız. Bu, maliyetin, göndermemiz gereken ağırlık ve bölgeye göre belirleneceği anlamına gelir.

Bu örnek için ABD, Kanada, Almanya, Birleşik Krallık, İtalya, İspanya ve Kenya'ya gönderim yapacağız. Kenya, 10 ABD Doları karşılığında Bölge 0, 30 ABD Doları karşılığında İtalya Bölge 1, 50 ABD Doları karşılığında İspanya Bölge 2, 50 ABD Doları karşılığında Birleşik Krallık 2. Bölge, 70 ABD Doları karşılığında Kanada Bölge 3 olacaktır.

Ağırlık için onları şu şekilde fiyatlandıracağız: 0 – 10 kg ücretsiz, 11 – 30 kg 5 5, 31-50 kg 10 $ ve 51-100 kg 20 $.

Kodlamaya başlamaya hazır olabilirsiniz, ancak henüz değil! İlk olarak, WooCommerce Shipping API hakkında bilgi edinmeniz gerekir. Özel bir gönderi yöntemi oluşturmak istediğinizde, sınıfı WooCommerce soyut WC_Shipping_Method sınıfından genişletmeniz gerekir. Bazı tanımlanmış öznitelikleri vardır, bunlar:

  • $id : Gerekli olan gönderimimizin kimliği (sümüklü böcek, anahtar kelime).
  • $number : Bu bir Tamsayı Kimliğidir.
  • $method_title : Yöneticide gösterilen gönderimimizin adı.
  • $method_description : Gönderimimizin yönetici bölümünde gösterilen kısa bir açıklaması (Opsiyonel).
  • $enabled : Gönderimizin etkin olup olmadığı ve kullanılıp kullanılamayacağı konusunda bilgi veren Boolean dizesi, "evet" veya "hayır".
  • $title : Sitemizde gönderi ismimizi göstermek için kullanılır.
  • $availability : Bu, gönderimin uygun olup olmadığını tanımlar.
  • $countries : Bu yöntemin etkinleştirildiği bir dizi ülke. Varsayılan değer boş bir dizidir.
  • $tax_status : Varsayılan değer vergiye tabidir. Bir öğe vergiye tabi ise, vergi tahsil edilecektir.
  • $fee : Varsayılan değer 0'dır
  • $minimum_fee : Yöntem için minimum ücret ve varsayılan değer boştur.
  • $has_settings : Bu yöntemin herhangi bir ayarı olup olmadığını tanımlar. Varsayılan değer doğrudur.
  • $supports : Bu yöntemin desteklediği özellikleri içeren bir dizi. Varsayılan değer boş bir dizidir.
  • $rates : Bir dizi oran ve bu, nakliye maliyetlerini kaydetmek için doldurulmalıdır. Varsayılan değer boş bir dizidir.

WC_Shipping_Method'da tanımlanan yöntemler şunlardır:

  • is_taxable() : Bu, nakliye ücretinin üzerine vergi hesaplamamız gerekip gerekmediğini döndürür.
  • add_rate( $args = array() ) : Bu, $args parametresinde tanımlanan bir nakliye ücretini $rates özniteliğine iter.
  • has_settings() : Bu, $has_settings özniteliğinin değerini döndürür.
  • is_available() : Gönderim müsaitse ve $countries özniteliğinde ayarlanmış ülkeler varsa ve $availability özniteliği dahil, belirli veya hariç değerlere ayarlanmışsa, ülke gönderim için uygunsa true veya false değerini döndürür. .
  • get_title() : Bu, bu gönderimin başlığını döndürür.
  • get_fee( $fee, $total ) : Bu, ayrıştırılmış $ücret ve $toplam temelinde bu nakliye için ücret değerini döndürür.
  • supports( $feature ) : Bu gönderim yönteminin bir özelliği destekleyip desteklemediğini gösterir.

WC_Shipping_Method sınıfı, WC_Settings_API sınıfını genişlettiği için, burada basitlik amacıyla açıklamayacağım daha fazla nitelik ve yöntem vardır.

Ayrıca, gönderimin ayarları alabilmesi veya ayarlayabilmesi ve gönderimin gerçek maliyetini hesaplayabilmesi için diğer yöntemlerin tanımlanması gerekir. Burada listelenen bu yöntemler:

  • init() : Bu, form alanlarını ve ayarlarını oluşturur. Ancak içindeki metotları kullandığımız ve __constructor metodunda çağırdığımız sürece farklı isimlendirilebilir.
  • calculate_shipping( $package ) : Bu yöntem, bu sevkıyatın maliyetini hesaplamak için kullanılır ve paket, sevk edilecek ürünleri içeren bir dizidir.

Hesaplama_nakliye yöntemine biraz odaklanmak istiyorum. Örneğimiz için bu yöntemi kullanacağız ve add_rate yöntemine ekleyeceğiz. Bu yöntem, aşağıdakiler gibi çeşitli seçeneklere sahip bir diziyi kabul edecektir:

  • id : Bu oranın kimliğidir.
  • label : Bu, oranın etiketidir.
  • cost : Gönderim miktarı.
  • taxes : Bir dizi vergiyi kabul eder veya hiçbir şey kabul etmez, bu nedenle vergi WooCommerce tarafından hesaplanır. Vergi kabul etmesini istemiyorsanız sahte kabul edebilir.
  • calc_tax : Bu, per_order veya per_item kabul eder. per_item kullanıyorsanız, bir dizi maliyetin sağlanması gerekir.

WooCommerce eklentisinde tanımlanan bir WordPress filtresini kullanarak, sınıfımızın adını geçerek kayıtlı yöntemin dizisine gönderim yöntemimizi ekleyen diziyi almak için bir WordPress filtresi kullanacağız. Filtreye woocommerce_shipping_methods adı verilir.

Bunu masaya yatırdıktan sonra, şimdi bu kısa öğreticinin kodlama bölümüne geçelim, böylece paylaşacağım PHP snippet'lerindeki tüm kavramı anlayabilirsiniz.

a) Yeni Nakliye Sınıfını Oluşturma Adımları

Bu bölümde, WooCommerce'i genişleten yeni bir eklenti olarak gönderim yöntemimizi oluşturacağız.

  1. Öncelikle wp-content > eklentileri açmanız ve yeni bir klasör oluşturmanız gerekiyor. Bunun için njengah -shipping adını kullanacağım.
  2. Ardından, njengah –shipping.php ile aynı ada sahip bir dosya oluşturmanız gerekir.
  3. Bu dosyaya aşağıdaki kodu ekleyin:
 <?php

/**
* Eklenti Adı: Njengah Shipping
* Eklenti URI'si: https://njengah.com/plugins/
* Açıklama: 
* Sürüm: 1.0.0
* Yazar: Joe Njenga
* Yazar URI'si: https://njengah.com
s
*/

if ( ! tanımlı( 'WPINC' ) ) {

ölmek;

}
/*
* WooCommerce'in etkin olup olmadığını kontrol edin
*/
if ( in_array( 'woocommerce/woocommerce.php', application_filters( 'active_plugins', get_option( 'active_plugins' )) ) {

function njengahplus_shipping_method() {

if ( ! class_exists( 'NjengahPlus_Shipping_Method' ) ) {

class NjengahPlus_Shipping_Method, WC_Shipping_Method'u genişletir {

/**

* Nakliye sınıfınız için yapıcı

*

* @access herkese açık

* @dönüş geçersiz

*/

genel işlev __construct() {

$this->id = 'njengahplus';

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

$this->method_description = __( 'NjengahPlus için Özel Gönderim Yöntemi', 'njengahplus');

$bu->init();

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

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

}

/**
* Ayarlarınızı başlatın
*
* @access herkese açık

* @dönüş geçersiz

*/

işlev başlat() {

// Ayarlar API'sini yükle

$this->init_form_fields();

$this->init_settings();

// Herhangi bir tanımınız varsa ayarları admin'e kaydedin

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

}


/**

* Bu gönderi için ayarlar alanını tanımlayın

* @dönüş geçersiz

*/

function init_form_fields() {

// Buraya ayarlarımızı ekleyeceğiz

}

/**
* Bu fonksiyon, nakliye maliyetini hesaplamak için kullanılır. Bu fonksiyon içerisinde ağırlıkları, boyutları ve diğer parametreleri kontrol edebiliriz.
*
* @access herkese açık
* @param karışık $paket
 @dönüş geçersiz
*/

genel işlev hesap_nakliye( $paket ) {


// Maliyet, oran ve mantığı buraya ekleyeceğiz

}

}

}

}


add_action('woocommerce_shipping_init', 'njengahplus_shipping_method');

function add_njengahplus_shipping_method( $yöntemler ) {

$methods[] = 'NjengahPlus_Shipping_Method';
$yöntemleri döndür;
}

add_filter('woocommerce_shipping_methods', 'add_njengahplus_shipping_method');

}

Nasıl çalışır

  • Önce WPINC sabitinin tanımlanıp tanımlanmadığını kontrol ediyoruz. Tanımlanmadıysa, birisi bu dosyaya doğrudan veya WordPress olmayan bir konumdan erişmeye çalışıyor demektir.
  • Ardından WooCommerce'in aktif olup olmadığını kontrol etmemiz gerekiyor. Burada woocommerce.php'nin active_plugins seçeneği altında veritabanına kaydedilen aktif eklentiler dizisinde olup olmadığını kontrol ediyoruz.
  • woocommerce_shipping_init, somutlaştırılmadan önce tüm nakliye sınıflarını içeren WooCommerce Shipping için ana eylemdir. Bu eylemi kullanmak, WooCommerce başlatıldıktan sonra ve WooCommerce'in kullanması için doğru yerde gönderim yöntemimizin dahil edilmesini sağlayacaktır.
  • __construct yöntemi bazı genel öznitelikleri ayarlar ve ayarlar yöntem init'teki veritabanından yüklendikten sonra bazılarının üzerine kolayca yazılabilir.
  • Diğer yöntemler, onları öğreticide daha sonra tanımlayacağımız için boş bırakılmıştır.

Ardından, aşağıda gösterilen adımları kullanarak eklentiyi etkinleştirmeniz gerekir:

  1. WordPress sitenize giriş yapın ve yönetici kullanıcı olarak Gösterge Tablosuna erişin.
  2. Pano menüsünden, Eklentiler'e tıklayın ve aşağıda gösterildiği gibi Njengah sevkiyatını etkinleştirin: eklentiyi etkinleştirme
  3. Eklentiyi etkinleştirdikten sonra WooCommerce > Settings bölümüne gidin . WooCommerce Sekmesine tıklayın, ardından NjengahPlus gönderisine tıklayın. Bunu görebilmeniz gerekir: İlk kod için sonuç

b) Ülke Kullanılabilirliğini Ayarlama

Oluşturduğumuz gönderim yöntemi yalnızca önceden belirlenmiş ülkeler listesinde mevcuttur.

  1. Bunu __construct yöntemine ekleyin :
 <?php

//...

$this->method_description = __( 'NjengahPlus için Özel Gönderim Yöntemi', 'njengahplus');

// Kullanılabilirlik ve Ülkeler

$this->availability = 'dahil';

$bu->ülkeler = dizi(

'ABD', // Amerika Birleşik Devletleri

'CA', // Kanada

'DE', // Almanya

'GB', // Birleşik Krallık

'BT', // İtalya

'ES', // İspanya

'İK' // Kenya

);

$bu->init();

//...

Kod Nasıl Çalışır?

Müsaitlik durumu özelliği "dahil" olarak ayarlanmıştır, böylece bu gönderim yalnızca ülkeler özelliğindeki ülkeler için kullanılabilir.

WooCommerce, gönderim ülkesinin nitelik ülkelerine dahil edilip edilmediğini kontrol edecektir.

Ayarları Oluşturma

Bu kodu kopyalamanız ve init_form_fields yöntemimizi doldurmanız yeterlidir:

 <?php



function init_form_fields() {

$this->form_fields = dizi(

'etkin' => dizi(

'başlık' => __( 'Etkinleştir', 'njengahplus' ),

'type' => 'onay kutusu',

'description' => __( 'Bu gönderiyi etkinleştir.', 'njengahplus' ),

'varsayılan' => 'evet'

),


'başlık' => dizi(

'başlık' => __( 'Başlık', 'njengahplus' ),

'tür' => 'metin',

'description' => __( 'Sitede gösterilecek başlık', 'njengahplus' ),

'varsayılan' => __( 'NjengahPlus Nakliye', 'njengahplus' )

),


);


}

Sonucu kontrol etmek için şu adımları izleyin:

  1. WordPress sitenize giriş yapın ve Kontrol Paneline yönetici kullanıcı olarak erişin Kontrol Paneli menüsünden WooCommerce > Ayarlar'a tıklayın
  2. Nakliye sekmesine tıklayın ve aşağıda gösterildiği gibi NjengahPlus Nakliye'ye tıklayın: Njengah artı nakliye
  3. Onay kutusunu etkinleştirin ve değişiklikleri kaydedin.

Nakliye yöntemini 100 kg'a kadar sevk edecek şekilde ayarlayabiliriz. Ardından, bu kural yakında değişirse, bunun ayarlarda düzenlenmesine izin vereceğiz. Bunu ayarladıktan sonra, ayar kodu şöyle görünecektir:

 <?php




function init_form_fields() {

$this->form_fields = dizi(

'etkin' => dizi(

'başlık' => __( 'Etkinleştir', 'njengahplus' ),

'type' => 'onay kutusu',

'description' => __( 'Bu gönderiyi etkinleştir.', 'njengahplus' ),

'varsayılan' => 'evet'

),


'başlık' => dizi(

'başlık' => __( 'Başlık', 'njengahplus' ),

'tür' => 'metin',

'description' => __( 'Sitede gösterilecek başlık', 'njengahplus' ),

'varsayılan' => __( 'NjengahPlus Nakliye', 'njengahplus' )

),


'ağırlık' => dizi(

'başlık' => __( 'Ağırlık (kg)', 'njengahplus' ),

'tür' => 'sayı',

'description' => __( 'İzin verilen maksimum ağırlık', 'njengahplus' ),

'varsayılan' => 100

),


);

}

Yukarıdaki kodda artık ayarlar altında maksimum ağırlığı belirledik. İşte Sonuç: Azami ağırlık

c) Nakliye Maliyetinin Hesaplanması

Gönderim maliyetini hesaplamak için, her adımı anlayabilmeniz için hesapla_gönderim yöntemini her seferinde bir adım güncelleyeceğiz.

  1. İlk olarak, maliyeti ağırlıkça bulmamız gerekiyor. Bunu yapmak için, bu kodu hesap_nakliye yöntemine eklemeniz yeterlidir:
 <?php

//...

genel işlev hesap_nakliye( $paket ) {


$ağırlık = 0;

$maliyet = 0;

$ülke = $paket["hedef"]["ülke"];

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

{

$_product = $değerler['veri'];

$ağırlık = $ağırlık + $_product->get_weight() * $değerleri['miktar'];

}

$ağırlık = wc_get_weight($ağırlık, 'kg');

if( $ağırlık <= 10 ) {

$maliyet = 0;

} elseif( $ağırlık <= 30 ) {

$maliyet = 5;


} elseif( $ağırlık <= 50 ) {


$maliyet = 10;


} Başka {

$maliyet = 20;

}

}
  1. Yukarıdaki koddan, sepetin ağırlığına göre maliyetimiz var, seçilen nakliye ülkesi için maliyeti hesaplamamız gerekiyor. Bunu yapmak için şu kodu ekleyin:
 <?php


genel işlev hesap_nakliye( $paket ) {


$countryZones = dizi(

'İK' => 0,

'ABD' => 3,

'GB' => 2,

'CA' => 3,

'ES' => 2,

'DE' => 1,

'BT' => 1

);


$zonePrices = dizi(

0 => 10,

1 => 30,

2 => 50,

3 => 70

);


$zoneFromCountry = $countryZones[ $ülke ];

$priceFromZone = $zonePrices[ $zoneFromCountry ];


$maliyet += $fiyatFromZone;

}

  1. Maliyeti toplam ağırlığa göre hesapladık ve ayrıca nakliye ülkesine göre maliyeti de ekledik. Son adım, oranı kaydetmek için bu kodu eklemektir.

Kod Nasıl Çalışır?

Bu bölümdeki ilk pasajda birkaç başlangıç ​​değişkeni tanımladık: $weight , $cost ve $country . Toplamı elde etmek için, sepeti yineleyerek ve sepetteki her ürünün $weight değişkenine ekleyerek toplam ağırlığı elde ederiz.

Toplam ağırlığı elde ettikten sonra, nakliye yöntemimizin limiti belirlediği birim olduğu için ağırlığı kilograma dönüştürmek için function wc_get_weight kullanıyoruz. O zaman son şey limiti 100kg olarak ayarlamaktı.

İkinci snippet'te, $countryZones dizisi her ülke için bölgeleri tutar ve ikinci $zonePrices dizisi her bölge için fiyatları tutar.

İtalya Bölge 1'in sonucu bu olacak: sonuç italya

İspanya Bölge 2'nin sonucu bu olacaktır: sonuç İspanya

Bu, Kanada Bölgesi için sonuç olacaktır:

nihai sonuç

Bu kodu uygulamakta zorlandıysanız, kodun tamamı aşağıdadır:

 <?php


genel işlev hesap_nakliye( $paket ) {

$ağırlık = 0;

$maliyet = 0;

$ülke = $paket["hedef"]["ülke"];

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

{

$_product = $değerler['veri'];

$ağırlık = $ağırlık + $_product->get_weight() * $değerleri['miktar'];

}
$ağırlık = wc_get_weight($ağırlık, 'kg');

if( $ağırlık <= 10 ) {

$maliyet = 0;

} elseif( $ağırlık <= 30 ) {

$maliyet = 5;

} elseif( $ağırlık <= 50 ) {

$maliyet = 10;

} Başka {

$maliyet = 20;

}

$countryZones = dizi(

'İK' => 0,

'ABD' => 3,

'GB' => 2,

'CA' => 3,

'ES' => 2,

'DE' => 1,

'BT' => 1

);




$zonePrices = dizi(

0 => 10,

1 => 30,

2 => 50,

3 => 70

);


$zoneFromCountry = $countryZones[ $ülke ];

$priceFromZone = $zonePrices[ $zoneFromCountry ];

$maliyet += $fiyatFromZone;

$oran = dizi(

'id' => $bu->id,

'etiket' => $bu->başlık,

'maliyet' => $maliyet

);

$bu->add_rate( $oran);

}

Çözüm

Bu gönderide, WooCommerce'e özel bir gönderim yöntemi eklemek için özel bir eklenti oluşturduk. Ek olarak, gönderim yönteminizi basit adımlarla oluşturmanıza olanak tanıyan WooCommerce Shipping API'sini sizinle paylaştım. Ayrıca, gönderim yönteminin kullanılabilirliği veya maliyeti hesaplanırken gönderim yöntemi içinde sınırlamalar ve kullanılabilirlik ayarlanabilir. Ancak, WooCommerce eylemleri kullanılarak gönderim yönteminin dışında ayarlanabilirler. Umarım bu eğitim, WooCommerce'e özel bir gönderim yöntemi eklemek için bir çözüm sağlamıştır.

Benzer Makaleler