كيفية إضافة طريقة شحن مخصصة في WooCommerce

نشرت: 2020-09-01

WooCommerce أضف طريقة شحن مخصصة إذا كنت معتادًا على WooCommerce ، فأنت تعلم أنه حل تجارة إلكترونية مجاني رائع ، مع مجموعة من الميزات المفيدة بشكل لا يصدق. ما يبرز هو أن WooCommerce تم تطويره مع مراعاة القابلية للتمدد ، على غرار نمطية WordPress.

ومع ذلك ، إذا كنت بحاجة إلى شيء إضافي من WooCommerce ، فغالبًا ما تجد أن WooCommerce لا يمنحك كل ما تحتاجه ، على سبيل المثال ، إذا كنت تريد إضافة طريقة شحن مخصصة. ومع ذلك ، لا تقلق لأنه في هذا البرنامج التعليمي الموجز ، ستتعلم كيفية إنشاء طريقة شحن بسيطة لـ WooCommerce ، والتي ستحسب تكلفة الشحن.

بالإضافة إلى ذلك ، سوف تتعلم كيفية إضافة بعض القيود إلى المكون الإضافي الخاص بنا حتى تكون طريقة الشحن متاحة لبعض البلدان.

قواعد الشحن المخصصة لطرق الشحن

في هذا القسم ، سننشئ قواعد شحن مخصصة لطرق الشحن التي سنستخدمها لإنشاء الرمز. سنحدد كيف ستحسب طريقة الشحن التكلفة وأين يمكن الشحن. هذا يعني أن التكلفة سيتم تحديدها من خلال الوزن والمنطقة التي نحتاج إلى الشحن إليها.

في هذا المثال ، سنقوم بالشحن إلى الولايات المتحدة الأمريكية وكندا وألمانيا والمملكة المتحدة وإيطاليا وإسبانيا وكينيا. ستكون كينيا منطقتنا 0 مقابل 10 دولارات ، ومنطقة إيطاليا 1 مقابل 30 دولارًا ، ومنطقة إسبانيا 2 مقابل 50 دولارًا ، ومنطقة المملكة المتحدة 2 مقابل 50 دولارًا ، والولايات المتحدة الأمريكية ، وكندا المنطقة 3 مقابل 70 دولارًا.

بالنسبة للوزن ، سنقوم بتسعيرها على النحو التالي: 0-10 كجم مجانًا ، و11-30 كجم مقابل 5 دولارات ، و31-50 كجم مقابل 10 دولارات ، و51-100 كجم مقابل 20 دولارًا.

قد تكون جاهزًا لبدء البرمجة ، ولكن ليس بعد! أولاً ، تحتاج إلى التعرف على WooCommerce Shipping API . عندما تريد إنشاء طريقة شحن مخصصة ، فأنت بحاجة إلى توسيع الفئة من فئة WooCommerce abstract class WC_Shipping_Method. لها بعض السمات المحددة ، وهي:

  • $id : المعرف (slug، keyword) لشحننا المطلوب.
  • $number : هذا معرف صحيح.
  • $method_title : يظهر اسم الشحن الخاص بنا في المسؤول.
  • $method_description : وصف قصير للشحن المعروض في admin (اختياري).
  • $enabled : String Boolean ، "نعم" أو "لا" ، التي تعطي المعلومات إذا تم تمكين الشحن لدينا وإذا كان يمكن استخدامه أم لا.
  • $title : يتم استخدامه لعرض اسم الشحن الخاص بنا على موقعنا.
  • $availability : يحدد ما إذا كان الشحن متاحًا أم لا.
  • $countries : مجموعة من البلدان التي تم تمكين هذه الطريقة لها. القيمة الافتراضية هي صفيف فارغ.
  • $tax_status : القيمة الافتراضية خاضعة للضريبة. إذا كان العنصر خاضعًا للضريبة ، فسيتم تحصيل الضريبة.
  • $fee : القيمة الافتراضية هي 0
  • الحد الأدنى $minimum_fee : الحد الأدنى لرسوم الطريقة والقيمة الافتراضية خالية.
  • $has_settings : هذا يحدد ما إذا كانت هذه الطريقة بها أي إعدادات. القيمة الافتراضية هي الحقيقية.
  • $supports : مصفوفة تحتوي على ميزات تدعمها هذه الطريقة. القيمة الافتراضية هي صفيف فارغ.
  • $rates : مجموعة من الأسعار ويجب تعبئتها لتسجيل تكاليف الشحن. القيمة الافتراضية هي صفيف فارغ.

الطرق المحددة في WC_Shipping_Method هي:

  • is_taxable() : يُرجع هذا ما إذا كنا بحاجة إلى حساب الضريبة أعلى معدل الشحن أم لا.
  • add_rate( $args = array() ) : يؤدي هذا إلى دفع معدل الشحن المحدد في المعلمة $ args إلى السمة $ rate.
  • has_settings() : هذا ما يعيد قيمة السمة has_settings $.
  • is_available() : يتم إرجاعه إذا كان الشحن متاحًا وإذا كانت هناك بلدان معينة في السمة $ countries وتم تعيين السمة $ مدى التوفر على قيم بما في ذلك ، محددة أو مستثناة ، ستُرجع صحيحة أو خطأ إذا كانت الدولة متاحة للشحن .
  • get_title() : هذا ما يعيد عنوان هذا الشحن.
  • get_fee( $fee, $total ) : يُرجع هذا قيمة الرسوم لهذا الشحن بناءً على الرسوم بالدولار المحلل والإجمالي بالدولار.
  • supports( $feature ) : يعود هذا إذا كانت طريقة الشحن هذه تدعم ميزة أم لا.

نظرًا لأن الفئة WC_Shipping_Method توسع الفئة WC_Settings_API ، فهناك المزيد من السمات والطرق التي لن أشرحها هنا لأغراض البساطة.

أيضًا ، يجب تحديد طرق أخرى حتى يتمكن الشحن من الحصول على الإعدادات أو ضبطها وحساب التكلفة الفعلية للشحن. هذه الطرق المذكورة هنا:

  • init() : يؤدي هذا إلى إنشاء حقول النموذج والإعدادات. ومع ذلك ، يمكن تسميتها بشكل مختلف ، طالما أننا نستخدم العمليات الموجودة بداخلها ونسميها في طريقة __constructor.
  • calculate_shipping( $package ) : تُستخدم هذه الطريقة لحساب تكلفة هذا الشحن والحزمة عبارة عن مصفوفة تحتوي على المنتجات المراد شحنها.

أود التركيز على طريقة calculate_shipping. على سبيل المثال ، سنستخدم هذه الطريقة ونضيفها إلى طريقة add_rate. ستقبل هذه الطريقة مصفوفة بها عدة خيارات مثل:

  • id : هذا هو معرف السعر.
  • label : هذا هو تصنيف السعر.
  • cost : مقدار الشحن.
  • taxes : تقبل مجموعة من الضرائب أو لا تقبل أي شيء ، لذلك يتم احتساب الضريبة بواسطة WooCommerce. إذا كنت لا تريدها أن تقبل الضريبة ، فيمكنها قبول خطأ.
  • calc_tax : هذا يقبل per_order أو per_item. إذا كنت تستخدم per_item ، فستحتاج إلى توفير مجموعة من التكاليف.

سنستخدم مرشح WordPress للحصول على المصفوفة التي تضيف طريقة الشحن الخاصة بنا في مصفوفة الطريقة المسجلة عن طريق تمرير اسم صنفنا ، باستخدام مرشح WordPress المحدد داخل البرنامج المساعد WooCommerce. يسمى المرشح woocommerce_shipping_methods.

مع ذلك على الطاولة ، دعنا ندخل الآن إلى قسم الترميز في هذا البرنامج التعليمي المختصر حتى تتمكن من فهم المفهوم بالكامل في مقتطفات PHP التي سأشاركها.

أ) خطوات إنشاء فئة الشحن الجديدة

في هذا القسم ، سننشئ طريقة الشحن الخاصة بنا كمكوِّن إضافي جديد يمتد إلى WooCommerce.

  1. أولاً ، تحتاج إلى فتح wp-content> plugins وإنشاء مجلد جديد. لهذا ، سأستخدم اسم njengah -shipping
  2. بعد ذلك ، تحتاج إلى إنشاء ملف يحمل نفس الاسم njengah –shipping.php
  3. أضف الكود التالي في هذا الملف:
 <؟ php

/ **
* اسم البرنامج المساعد: Njengah Shipping
* عنوان URL للمكون الإضافي: https://njengah.com/plugins/
* وصف: 
* الإصدار: 1.0.0
* المؤلف: جو نجينجا
* عنوان URL للمؤلف: https://njengah.com
س
* /

إذا (! المعرفة ('WPINC')) {

موت؛

}
/ *
* تحقق مما إذا كان WooCommerce نشطًا
* /
if (in_array ('woocommerce / woocommerce.php'، application_filters ('active_plugins'، get_option ('active_plugins')))) {

الوظيفة njengahplus_shipping_method () {

إذا (! class_exists ('NjengahPlus_Shipping_Method')) {

تمتد فئة NjengahPlus_Shipping_Method إلى WC_Shipping_Method {

/ **

* منشئ لفئة الشحن الخاصة بك

*

* @ access public

*return الفراغ

* /

الوظيفة العامة __construct () {

$ this-> id = 'njengahplus' ؛

$ this-> method_title = __ ('NjengahPlus Shipping'، 'njengahplus')؛

$ this-> method_description = __ ('طريقة الشحن المخصصة لـ NjengahPlus'، 'njengahplus')؛

$ this-> init ()؛

$ this-> enable = isset ($ this-> settings ['enabled'])؟ $ this-> الإعدادات ["ممكّن"]: "نعم"؛

$ this-> title = isset ($ this-> settings ['title'])؟ $ this-> settings ['title']: __ ('NjengahShipping'، 'njengahplus')؛

}

/ **
* تهيئة الإعدادات الخاصة بك
*
* @ access public

*return الفراغ

* /

الوظيفة init () {

// تحميل إعدادات API

$ this-> init_form_fields ()؛

$ this-> init_settings ()؛

// حفظ الإعدادات في المسؤول إذا كان لديك أي تحديد

add_action ('woocommerce_update_options_shipping_'. $ this-> id، array ($ this، 'process_admin_options')) ؛

}


/ **

* تحديد حقل الإعدادات لهذا الشحن

*return الفراغ

* /

الوظيفة init_form_fields () {

// سنضيف إعداداتنا هنا

}

/ **
* تُستخدم هذه الوظيفة لحساب تكلفة الشحن. ضمن هذه الوظيفة ، يمكننا التحقق من الأوزان والأبعاد والمعلمات الأخرى.
*
* @ access public
* حزمة $param مختلطة
 return الفراغ
* /

الوظيفة العامة calculate_shipping ($ package) {


// سنضيف التكلفة والسعر والمنطق هنا

}

}

}

}


add_action ('woocommerce_shipping_init'، 'njengahplus_shipping_method') ؛

الوظيفة add_njengahplus_shipping_method (طرق $) {

طرق $ [] = 'NjengahPlus_Shipping_Method'؛
طرق العودة $؛
}

add_filter ('woocommerce_shipping_methods'، 'add_njengahplus_shipping_method') ؛

}

كيف تعمل

  • نتحقق أولاً مما إذا كان قد تم تعريف WPINC الثابت. إذا لم يتم تعريفه ، فهذا يعني أن شخصًا ما يحاول الوصول إلى هذا الملف مباشرة أو من موقع ، وهذا ليس WordPress.
  • ثم نحتاج إلى التحقق مما إذا كان WooCommerce نشطًا. نحن هنا نتحقق مما إذا كان woocommerce.php موجودًا في مجموعة المكونات الإضافية النشطة المحفوظة في قاعدة البيانات ضمن الخيار active_plugins.
  • woocommerce_shipping_init هو الإجراء الرئيسي لـ WooCommerce Shipping والذي يتضمن جميع فئات الشحن قبل أن يتم إنشاء مثيل لها. سيؤدي استخدام هذا الإجراء إلى التأكد من تضمين طريقة الشحن الخاصة بنا بعد تهيئة WooCommerce وفي المكان المناسب لاستخدام WooCommerce.
  • يعين التابع __construct بعض السمات العامة ويمكن الكتابة فوق بعضها بسهولة بعد تحميل الإعدادات من قاعدة البيانات في الطريقة init.
  • تُترك الطرق الأخرى فارغة لأننا سنحددها لاحقًا في البرنامج التعليمي.

ثم عليك التوجه لتنشيط المكون الإضافي باستخدام الخطوات الموضحة أدناه:

  1. قم بتسجيل الدخول إلى موقع WordPress الخاص بك والوصول إلى لوحة التحكم بصفتك المستخدم المسؤول.
  2. من قائمة Dashboard ، انقر فوق Plugins وقم بتنشيط Njengah shipping كما هو موضح أدناه: تفعيل البرنامج المساعد
  3. بعد تنشيط المكون الإضافي ، انتقل إلى WooCommerce> الإعدادات . انقر فوق علامة التبويب WooCommerce ثم انقر فوق شحن NjengahPlus . يجب أن تكون قادرًا على رؤية هذا: نتيجة الكود الأول

ب) تحديد توافر البلد

طريقة الشحن التي أنشأناها متاحة فقط في قائمة البلدان المحددة مسبقًا.

  1. أضف هذا في الطريقة __construct :
 <؟ php

// ...

$ this-> method_description = __ ('طريقة الشحن المخصصة لـ NjengahPlus'، 'njengahplus')؛

// التوفر والبلدان

$ this-> التوفر = 'including'؛

$ this-> البلدان = مجموعة (

"الولايات المتحدة" ، // الولايات المتحدة الأمريكية

"CA" ، // كندا

"DE" ، // ألمانيا

"GB" ، // المملكة المتحدة

"IT" ، // إيطاليا

"ES" ، // إسبانيا

"HR" // كينيا

) ؛

$ this-> init ()؛

// ...

كيف تعمل المدونة

يتم تعيين سمة التوفر على "بما في ذلك" بحيث يكون هذا الشحن متاحًا فقط للبلدان في سمة البلدان.

سيتحقق WooCommerce مما إذا كانت دولة الشحن مدرجة في بلدان السمات.

إنشاء الإعدادات

تحتاج ببساطة إلى نسخ هذا الرمز وتعبئة طريقتنا init_form_fields:

 <؟ php



الوظيفة init_form_fields () {

$ this-> form_fields = مجموعة (

'ممكّن' => مجموعة (

'title' => __ ('Enable'، 'njengahplus')،

'type' => 'checkbox' ،

'description' => __ ('Enable this shipping.'، 'njengahplus')،

"افتراضي" => "نعم"

) ،


"العنوان" => مجموعة (

'title' => __ ('Title'، 'njengahplus')،

'type' => 'text'،

'description' => __ ('العنوان الذي سيتم عرضه في الموقع'، 'njengahplus')،

'افتراضي' => __ ('شحن NjengahPlus'، 'njengahplus')

) ،


) ؛


}

للتحقق من النتيجة ، اتبع الخطوات التالية:

  1. قم بتسجيل الدخول إلى موقع WordPress الخاص بك والوصول إلى لوحة التحكم بصفتك المستخدم المسؤول من قائمة لوحة التحكم ، انقر فوق WooCommerce> الإعدادات
  2. انقر فوق علامة التبويب الشحن وانقر فوق NjengahPlus Shipping كما هو موضح أدناه: Njengah بالإضافة إلى الشحن
  3. قم بتمكين مربع الاختيار واحفظ التغييرات.

يمكننا ضبط طريقة الشحن للشحن حتى 100 كجم. ثم سنسمح بتعديل ذلك في الإعدادات إذا تغيرت هذه القاعدة قريبًا. بعد تعيين هذا ، سيبدو رمز الإعدادات كما يلي:

 <؟ php




الوظيفة init_form_fields () {

$ this-> form_fields = مجموعة (

'ممكّن' => مجموعة (

'title' => __ ('Enable'، 'njengahplus')،

'type' => 'checkbox' ،

'description' => __ ('Enable this shipping.'، 'njengahplus')،

"افتراضي" => "نعم"

) ،


"العنوان" => مجموعة (

'title' => __ ('Title'، 'njengahplus')،

'type' => 'text'،

'description' => __ ('العنوان الذي سيتم عرضه في الموقع'، 'njengahplus')،

'افتراضي' => __ ('شحن NjengahPlus'، 'njengahplus')

) ،


"الوزن" => مجموعة (

'العنوان' => __ ('الوزن (كجم)' ، 'njengahplus') ،

'type' => 'number'،

'description' => __ ('الوزن الأقصى المسموح به'، 'njengahplus')،

"افتراضي" => 100

) ،


) ؛

}

في الكود أعلاه ، قمنا الآن بتعيين الحد الأقصى للوزن ضمن الإعدادات. ها هي النتيجة: الحد الأقصى للوزن

ج) حساب تكلفة الشحن

لحساب تكلفة الشحن ، سنقوم بتحديث الطريقة calculate_shipping بخطوة واحدة في كل مرة حتى تتمكن من فهم كل خطوة.

  1. أولاً ، نحتاج إلى حساب التكلفة بالوزن . للقيام بذلك ، ما عليك سوى إضافة هذا الرمز إلى طريقة calculate_shipping:
 <؟ php

// ...

الوظيفة العامة calculate_shipping ($ package) {


الوزن بالدولار = 0 ؛

التكلفة بالدولار = 0 ؛

$ country = الحزمة $ ["وجهة"] ["البلد"]؛

foreach ($ package ['content'] كـ $ item_id => قيم $)

{

$ _product = قيم $ ['data'] ؛

الوزن بالدولار = الوزن بالدولار + المنتج _ بالدولار> get_weight () * قيم الدولار ['الكمية'] ؛

}

الوزن بالدولار = wc_get_weight (وزن بالدولار ، 'كجم') ؛

إذا (الوزن بالدولار الأمريكي <= 10) {

التكلفة بالدولار = 0 ؛

} elseif (الوزن بالدولار الأمريكي <= 30) {

التكلفة = 5 دولارات أمريكية ؛


} elseif (الوزن بالدولار الأمريكي <= 50) {


التكلفة = 10 دولارات أمريكية ؛


} آخر {

التكلفة = 20 دولارًا أمريكيًا ؛

}

}
  1. من الكود أعلاه ، لدينا التكلفة بناءً على وزن العربة ، وعلينا حساب التكلفة لبلد الشحن المحدد. للقيام بذلك أضف هذا الرمز:
 <؟ php


الوظيفة العامة calculate_shipping ($ package) {


countryZones دولار = مجموعة (

"HR" => 0 ،

"الولايات المتحدة" => 3 ،

'GB' => 2 ،

"CA" => 3 ،

'ES' => 2 ،

"DE" => 1 ،

"IT" => 1

) ؛


$ zonePrices = صفيف (

0 => 10 ،

1 => 30 ،

2 => 50 ،

3 => 70

) ؛


$ zoneFromCountry = $ countryZones [$ country]؛

$ priceFromZone = $ zonePrices [$ zoneFromCountry] ؛


التكلفة $ + = $ priceFromZone ؛

}

  1. لقد قمنا بحساب التكلفة على أساس الوزن الإجمالي ، وقمنا أيضًا بإضافة التكلفة حسب دولة الشحن. الخطوة الأخيرة هي إضافة هذا الرمز لتسجيل السعر.

كيف تعمل المدونة

في المقتطف الأول في هذا القسم ، حددنا بعض متغيرات البداية: $weight $cost $country . للحصول على الإجمالي ، نحصل على الوزن الإجمالي بتكرار سلة التسوق وإضافة الوزن لكل منتج في سلة التسوق إلى $weight .

بعد الحصول على الوزن الإجمالي ، نستخدم function wc_get_weight لتحويل الوزن إلى كيلوجرام لأن هذه هي الوحدة التي حددت طريقة الشحن لدينا الحد الأقصى لها. ثم كان آخر شيء هو ضبط الحد الأقصى لـ 100 كجم.

في المقتطف الثاني ، تحتفظ المصفوفة $countryZones بمناطق كل دولة ، بينما تحتفظ المصفوفة الثانية $zonePrices بأسعار كل منطقة.

ستكون هذه هي نتيجة منطقة إيطاليا 1: نتيجة ايطاليا

ستكون هذه هي نتيجة منطقة إسبانيا 2: النتيجة اسبانيا

ستكون هذه هي نتيجة منطقة كندا:

الحصيلة النهائية

إذا واجهت صعوبة في تنفيذ هذا الرمز ، فإليك الكود الكامل:

 <؟ php


الوظيفة العامة calculate_shipping ($ package) {

الوزن بالدولار = 0 ؛

التكلفة بالدولار = 0 ؛

$ country = الحزمة $ ["وجهة"] ["البلد"]؛

foreach ($ package ['content'] كـ $ item_id => قيم $)

{

$ _product = قيم $ ['data'] ؛

الوزن بالدولار = الوزن بالدولار + المنتج _ بالدولار> get_weight () * قيم الدولار ['الكمية'] ؛

}
الوزن بالدولار = wc_get_weight (وزن بالدولار ، 'كجم') ؛

إذا (الوزن بالدولار الأمريكي <= 10) {

التكلفة بالدولار = 0 ؛

} elseif (الوزن بالدولار الأمريكي <= 30) {

التكلفة = 5 دولارات أمريكية ؛

} elseif (الوزن بالدولار الأمريكي <= 50) {

التكلفة = 10 دولارات أمريكية ؛

} آخر {

التكلفة = 20 دولارًا أمريكيًا ؛

}

countryZones $ = مجموعة (

"HR" => 0 ،

"الولايات المتحدة" => 3 ،

'GB' => 2 ،

"CA" => 3 ،

'ES' => 2 ،

"DE" => 1 ،

"IT" => 1

) ؛




$ zonePrices = صفيف (

0 => 10 ،

1 => 30 ،

2 => 50 ،

3 => 70

) ؛


$ zoneFromCountry = $ countryZones [$ country]؛

$ priceFromZone = $ zonePrices [$ zoneFromCountry] ؛

التكلفة $ + = $ priceFromZone ؛

سعر الدولار = مجموعة (

'id' => $ this-> id ،

'label' => $ this-> title،

"التكلفة" => التكلفة بالدولار

) ؛

$ this-> add_rate (السعر بالدولار) ؛

}

استنتاج

في هذا المنشور ، أنشأنا مكونًا إضافيًا مخصصًا لإضافة طريقة شحن مخصصة في WooCommerce. بالإضافة إلى ذلك ، قمت بمشاركة WooCommerce Shipping API معك والتي تمكنك من إنشاء طريقة الشحن الخاصة بك بخطوات بسيطة. أيضًا ، يمكن تعيين القيود والتوافر داخل طريقة الشحن عند حساب التوافر أو تكلفة طريقة الشحن. ومع ذلك ، يمكن تعيينها خارج طريقة الشحن باستخدام إجراءات WooCommerce. آمل أن يقدم هذا البرنامج التعليمي حلاً لإضافة طريقة شحن مخصصة في WooCommerce.

مقالات مماثلة