Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. WooCommerce
Code

إنشاء طريقة شحن مخصصة لـ WooCommerce

by
Difficulty:IntermediateLength:LongLanguages:

Arabic (العربية/عربي) translation by Basrah (you can also view the original English article)

إذا كنت قد وضعت شيئا من أي وقت مضى للورد، سواء كان موضوعا أو البرنامج المساعد بسيطة، وكنت على دراية نمطية وورد. يتم وضع ووكوميرسي مع extendability في الاعتبار أيضا.

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

لمتابعة هذا البرنامج التعليمي، سوف تحتاج إلى:

  • وورد
  • البرنامج المساعد ووكوميرسي تثبيت وتنشيط
  • محرر الاختيار

قواعد الشحن لطريقة الشحن

قبل أن نبدأ، سوف نحتاج إلى تحديد كيف لدينا أسلوب الشحن سيتم حساب التكلفة، وحيث أنه يمكن أن السفينة.

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

  • الولايات المتحدة الأمريكية
  • كندا
  • ألمانيا
  • المملكة المتحدة
  • إيطاليا
  • إسبانيا
  • كرواتيا

وسيكون لدينا شركة للنقل البحري من كرواتيا، حتى كرواتيا في المنطقة 0. دعونا تحديد مناطق للبلدان الأخرى:

  • الولايات المتحدة الأمريكية: 3
  • كندا: 3
  • ألمانيا: 1
  • المملكة المتحدة: 2
  • إيطاليا: 1
  • إسبانيا: 2

الآن أن لدينا جميع البلدان المتاحة للنقل البحري مع منطقة المقابلة، حان الوقت لتحديد الأسعار.

  • منطقة 0: $10
  • المنطقة 1: $30
  • المنطقة 2: $50
  • المنطقة 3: $70

وقد ذكر أيضا الوزن، الحق؟ لدينا شركة الشحن يمكن شحن تصل إلى 100 كجم، والأسعار:

  • 0-10 كجم: $0
  • 11 – 30 كجم: $5
  • 31 – 50 كجم: $10
  • 51 – 100 كجم: 20 دولار

ولدينا كل ما نحن بحاجة إلى إنشاء لدينا أسلوب الشحن. دعونا نتعلم قليلاً حول API شحن ووكوميرسي.

مقدمة إلى ووكوميرسي أسلوب API الشحن

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

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

أساليب محددة في WC_Shipping_Method:

  • is_taxable(): إرجاع أم لا نحتاج لحساب الضريبة على أعلى معدل الشحن.
  • add_rate ($args = شغلت): يدفع بمعدل شحن المحدد في المعلمة $args إلى السمة $rates.
  • has_settings(): إرجاع القيمة للسمة $has_settings.
  • is_available(): إرجاع حالة الشحن يتوفر. إذا كانت هناك البلدان المحددة في السمة $countries ويتم تعيين السمة $availability إلى القيم بما في ذلك محددة أو استثناء، فإنه سيعود true أو false إذا كان البلد متاح للنقل البحري.
  • get_title(): إرجاع عنوان هذا الشحن.
  • get_fee ($fee، $total): تقوم بإرجاع قيمة رسوم الشحن هذا استناداً إلى تحليل $fee و $total.
  • يدعم ($feature): إرجاع إذا كان هذا أسلوب الشحن هو دعم ميزة أم لا.

منذ الفئة WC_Shipping_Method يمتد الفئة WC_Settings_API، وهناك المزيد من السمات والأساليب التي سوف لا يمكن تفسيره هنا توخياً للبساطة.

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

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

في أسلوب calculate_shipping، ونحن نضيف أن معدل مع add_rate الأسلوب. هذا الأسلوب يقبل صفيف مع عدة خيارات:

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

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

إنشاء فئة الشحن الجديدة

فإننا سنضع لدينا أسلوب الشحن كالبرنامج المساعد جديد الذي يمتد البرنامج المساعد ووكوميرسي. قم بإنشاء مجلد جديد tutsplus-الشحن تحت الفسفور الأبيض بين المحتوى/الإضافات. أيضا، قم بإنشاء ملف بنفس الاسم توتسبلوس-shipping.php وإضافة هذه التعليمة البرمجية:

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

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

ثم نقوم بإنشاء tutsplus_shipping_method الدالة التي نحن أيضا مضيفاً في woocommerce_shipping_init العمل. Woocommerce_shipping_init العمل هو العمل الرئيسي "شيبينجس ووكوميرسي" الذي يشمل جميع فئات الشحن قبل الحصول على إنشاء مثيل له. باستخدام هذا الإجراء نحن على ثقة من أنه سيتم تضمين لدينا أسلوب الشحن بعد لقد تم إينيتياليسيد ووكوميرسي وفي المكان المناسب ووكوميرسي لاستخدامه.

سيتم تعيين أسلوب __construct من فئة لدينا بعض السمات العامة. يمكن الكتابة بعضهم بسهولة بعد أن يتم تحميل الإعدادات من قاعدة البيانات في أسلوب init. طريقتين أخرى تركت فارغة لأنه سوف نحدد لهم في وقت لاحق.

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

يتوفر لدينا أسلوب الشحن فقط في قائمة البلدان التي سبق تحديدها. سيتم تعيين هذا قبل أسلوب init داخل __construct الأسلوب. إضافة هذا في __construct الأسلوب:

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

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

إذا كنت تبحث عن كثب لأعمالنا __construct الأسلوب، يمكنك أن ترى أن يتم التحقق من الإعدادات الخاصة تمكين وخصائص العنوان. سوف ننشئ الحقول التي ستمكن لدينا خصائص تغيير.

نسخ هذه التعليمة البرمجية وتعبئة جهودنا init_form_fields الأسلوب:

الآن يمكنك الذهاب إلى الإدارة وورد وتغيير تلك الإعدادات في ووكوميرسي > إعدادات > شحن > "النقل البحري توتسبلوس".

The TutsPlus Shipping Options Screen

حاول تغيير إعداد تمكين وانظر علامة التبويب "خيارات الشحن" إذا تم تمكين أسلوب الشحن لدينا أم لا.

كما حددنا أن لدينا أسلوب الشحن يمكن شحن تصل إلى 100 كجم. ما إذا كان تغيير تلك القاعدة في المستقبل القريب؟ يمكن أن نسمح بأن تعدل في الإعدادات بسهولة. سوف نقوم بإضافة هذا الإعداد حتى init_form_fields أسلوب لدينا الآن يبدو مثل هذا:

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

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

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

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

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

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

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

حساب التكلفة لبلد الشحن المحدد

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

ويحمل الصفيف $countryZones المناطق لكل بلد. ويحمل المصفوفة الثانية $zonePrices الأسعار لكل منطقة. بمجرد لقد وضعنا كل من تلك المصفوفات، نحصل على التكلفة حسب المنطقة مثل هذا:

  • ونحن تمرير رمز البلد ISO إلى الصفيف $countryZones للحصول على هذه المنطقة.
  • نمر المنطقة التي تم إرجاعها إلى الصفيف $zonePrices للحصول على التكلفة.
  • ونحن إضافة التكلفة يتم إرجاعها إلى المتغير $cost.

تسجيل معدل

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

إليك الشفرة الكاملة لهذه الطريقة إذا واجهتك مشكلة في متابعتها:

If you try now to view your cart or go to the checkout page and select a country that is available for this shipping, you'll get a shipping cost displayed with this custom shipping method. هذه صورة لبلد من المنطقة 3:

Cost of our custom shipping method with a shipping country from zone 3

مضيفا القيود

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

Sorry 120 kg exceeds the maximum weight of 100 kg for TutsPlus Shipping

وظيفة تقييد

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

بعد التصفية ، أضف woocommerce_shipping_methods هذا الرمز:

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

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

الإخطار على تحديث النظام

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

أضف هذا الرمز بعد وظيفتنا tutsplus_validate_order:

الإخطار على Checkout

عندما يقوم العميل بالنقر فوق الزر لوضع الطلب أو شرائه ، سيقوم WooCommerce بمعالجة كافة بيانات الفوترة والشحن مع محتويات السلة والشحن المختار.

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

دعونا نضيف وظيفتنا إلى هذا الإجراء:

رمز كامل

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

خاتمة

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

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

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

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.