المحتوى عن 'shipping'.



مزيد من الخيارات

  • ابحث بالكلمات المفتاحية

    أضف وسومًا وافصل بينها بفواصل ","
  • ابحث باسم الكاتب

نوع المُحتوى


التصنيفات

  • التخطيط وسير العمل
  • التمويل
  • فريق العمل
  • دراسة حالات
  • نصائح وإرشادات
  • التعامل مع العملاء
  • التعهيد الخارجي
  • التجارة الإلكترونية
  • الإدارة والقيادة
  • مقالات ريادة أعمال عامة

التصنيفات

  • PHP
    • Laravel
    • ووردبريس
  • جافاسكريبت
    • Node.js
    • jQuery
    • AngularJS
    • Cordova
  • HTML
    • HTML5
  • CSS
  • SQL
  • سي شارب #C
    • منصة Xamarin
  • بايثون
    • Flask
    • Django
  • لغة روبي
    • Sass
    • إطار عمل Bootstrap
    • إطار العمل Ruby on Rails
  • لغة Go
  • لغة جافا
  • لغة Kotlin
  • برمجة أندرويد
  • لغة Swift
  • لغة R
  • لغة TypeScript
  • سير العمل
    • Git
  • صناعة الألعاب
    • Unity3D
  • مقالات برمجة عامة

التصنيفات

  • تجربة المستخدم
  • الرسوميات
    • إنكسكيب
    • أدوبي إليستريتور
    • كوريل درو
  • التصميم الجرافيكي
    • أدوبي فوتوشوب
    • أدوبي إن ديزاين
    • جيمب
  • التصميم ثلاثي الأبعاد
    • 3Ds Max
    • Blender
  • نصائح وإرشادات
  • مقالات تصميم عامة

التصنيفات

  • خواديم
    • الويب HTTP
    • قواعد البيانات
    • البريد الإلكتروني
    • DNS
    • Samba
  • الحوسبة السّحابية
    • Docker
  • إدارة الإعدادات والنّشر
    • Chef
    • Puppet
    • Ansible
  • لينكس
  • FreeBSD
  • حماية
    • الجدران النارية
    • VPN
    • SSH
  • مقالات DevOps عامة

التصنيفات

  • التسويق بالأداء
    • أدوات تحليل الزوار
  • تهيئة محركات البحث SEO
  • الشبكات الاجتماعية
  • التسويق بالبريد الالكتروني
  • التسويق الضمني
  • التسويق بالرسائل النصية القصيرة
  • استسراع النمو
  • المبيعات
  • تجارب ونصائح

التصنيفات

  • إدارة مالية
  • الإنتاجية
  • تجارب
  • مشاريع جانبية
  • التعامل مع العملاء
  • الحفاظ على الصحة
  • التسويق الذاتي
  • مقالات عمل حر عامة

التصنيفات

  • الإنتاجية وسير العمل
    • مايكروسوفت أوفيس
    • ليبر أوفيس
    • جوجل درايف
    • شيربوينت
    • Evernote
    • Trello
  • تطبيقات الويب
    • ووردبريس
    • ماجنتو
  • أندرويد
  • iOS
  • macOS
  • ويندوز

التصنيفات

  • شهادات سيسكو
    • CCNA
  • شهادات مايكروسوفت
  • شهادات Amazon Web Services
  • شهادات ريدهات
    • RHCSA
  • شهادات CompTIA
  • مقالات عامة

أسئلة وأجوبة

  • الأقسام
    • أسئلة ريادة الأعمال
    • أسئلة العمل الحر
    • أسئلة التسويق والمبيعات
    • أسئلة البرمجة
    • أسئلة التصميم
    • أسئلة DevOps
    • أسئلة البرامج والتطبيقات
    • أسئلة الشهادات المتخصصة

التصنيفات

  • ريادة الأعمال
  • العمل الحر
  • التسويق والمبيعات
  • البرمجة
  • التصميم
  • DevOps

تمّ العثور على 3 نتائج

  1. قليلة هي تلك المشاريع والابتكارات التي تُحدِث نقلة نوعية في عالم البرمجيات والتقنية بشكل عام، وإن كنا سنشهد في هذه العشرية إحدى هذه المشاريع، فهو Docker بامتياز. فما هو Docker هذا؟ هذا المقال يهدف بشكل خاص إلى التعريف بمشروع Docker والفكرة التي جاء بها، وليس لكيفية البدء به (والتي ستكون في مقال منفصل إن شاء الله)، حيث لا يمكن البدء به إذا لم نفهم فكرته وأهميته في عالم البرمجيات. لمن هذا المقال؟لمدراء الخواديم (SysAdmins) بالدرجة الأولىللمبرمجين ومطوري الويب بالدرجة الثانية قبل أن نتحدث عن ماهية Docker أحب أولا ذكر أهم 03 مشاكل نواجهها حاليا كمطورين ومدراء خواديم والتي يحاول Docker معالجتها... 1. جحيم الاعتماديات (the dependecy hell)الأغلبية الساحقة من مشاريع الويب "الجدية" والكبيرة لا تكون قائمة بذاتها، بل هي عبارة عن مكتبات تتواصل فيما بينها أو تعتمد على مكتبات أخرى من أجل أن تعمل، مطوروا Ruby، Python وحتى node.js و php يفهمون ذلك جيدا، وكل من هذه اللغات حاول حل المشكلة على نطاقه الخاص عبر إنشاء أدوات مساعدة تعرف بـ"مدراء الاعتماديات" أو "مدراء حزم" (dependency/package managers) أمثلة ذلك: pip بالنسبة لبايثونgem بالنسبة لروبيnpm بالنسبة لـ node.jsوأخيرا محاولة متواضعة من php عبر composer..وقد تذهب اللغة إلى أبعد من ذلك مثل ما فعلت بايثون بإنشاء بيئات وهمية تعزل فيها المكتبات والاعتماديات مثل مشروع virtualenv. كل من هذه اللغات تستعمل مدراء الاعتماديات/الحزم لجلب وإدارة المكتبات الخارجية التي يعتمد عليها المشروع (third party librairies)، لكن السؤال هنا، إذا كانت هذه اللغات وفرت هذه الأدوات، فأين المشكل؟ في الحيقيقة بالرغم من توفر هذه الأدوات، تبقى هناك مشاكل عالقة دائما خاصة على مستوى تنصيب المشروع على الخواديم (deployment) من ذلك: كثرة الاعتماديات، مما يأخذ وقتا في التنزيل، وأحيانا لا توجد تلك الاعتمادية على منصة الخادوم البعيد وقد تحتاج إلى عمل تجميع يدوي لها، وهذا يجعل الأمر مُتعبا.اعتمادية تعتمد في حد ذاتها على اعتمادية أخرى، قد تكون مثلا تشترط منصة Java بأكملها، وقد تكون أيضا هذه الأخيرة تعتمد على اعتماديات أخرى وهكذا...تعارض الاعتماديات، وجود إحداها يتطلب غياب الأخرى واستحالة عملهما معا في نفس الوقتنسخة الاعتمادية التي تم تنزيلها مغايرة للتي تم تطوير المشروع بها. والنسخة الجديدة تأتي بتغيرات غير متوافقة رجعيا (API backward compatibility)كل هذه المشاكل وغيرها، تجعل من ناقلية المشروع من مكان إلى آخر أو من خادوم إلى آخر، عملية شاقّة. 2. صعوبة نشر، تنصيب، نقل مشاريع الويبمشاريع الويب الكبيرة تحتاج إلى عدد من الاحتياطات: متغيرات بيئة (environment variables) يجب تعيينها مسبقاإعداد لنظام الـ cacheإعداد للخادوم nginx أو غيرهإعدادات أمنيةتحديث النظام وبرمجياته قد يسبب عطلا ما للمشروع،...ماذا عن نقل المشروع من خادوم إلى آخر؟ أو في حالة وجود أكثر من خادوم... وكل منه له نظامه الخاص (من CentOs إلى Ubuntu مثلا أو حتى BSD).... 3. التطوير، التسليم والزرع المتواصل للمشاريع ( continuous delivery/integration)مشاريع الويب الجدية تتبع دورة تطوير معينة، تحسين دائم، إدخال لميزات جديدة بشكل دوري، قفل للثغرات ... إلخ، بعد هذا يجب إجراء سلسلة من الفحوصات (unit tests مثلا) للتأكد من سلامة المشروع وأنه أهل للمرحلة الإنتاجية منه (production ready)، كل هذا سهل محليا،... لكن عملية إبقاء جميع الخواديم مسايرة لوتيرة التطوير هذه أمر شاق ومتعب، خاصة حينما نحتاج إلى تحديث الاعتماديات أو وجود إعتماديات جديدة وبالتالي احتياطات جديدة... هذه المشاكل ليس حصرا، فهناك غيرها من المشاكلة الأمنية (مثال ثغرة في مشروع الويب تمكن المخترق من الوصول إلى النظام)، مشاكل عزل (قاعدة البيانات في نفس بيئة التطبيق نفسه مما قد يسمح للوصول السهل لها من قبل المخترق)، مشاكل نسخ اختياطي (backups)،.. الخ إذا ما هو Docker؟Docker عبارة عن أداة جديدة تستغل ميزات الإصدارات الأخيرة من نواة Linux الخاصة بعزل المهام والعمليات (processes)، عمليات الإدخال والإخراج (i/o)، حجز الذاكرة وتحديدها، صلاحيات القراءة والكتابة للقرص الصلب... وغير ذلك، في إنشاء حاويات (containers) ركز على هذه الكلمة جيدا، حيث أن هذه الحاويات تلعب دور غلاف حاوي لتطبيق ما (مشروع ويب مثلا)، بحيث يصبح قائما بذاته، مكتفٍ ذاتيا. أي أن مشروع الويب وكامل الاعتماديات التي يحتاجها ليعمل + التوزيعة المناسبة له (Fedora, Ubuntu.. الخ) بجميع التهيئات ومتغيرات البيئة التي يحتاجها، كل هذا في حاوية (قد تكون حاوية واحدة أو عدة حاويات تتخاطب في ما بينها عملا بمبدأ "عزل الاهتمامات" SoC). لتقريب الصورة، تخيل أنه باستعمال Docker يمكنك عمل التالي: طورت تطبيقك على Ubuntu أو تعلم أنه يعمل بشكل جيد على توزيعة Ubuntu وبالتحديد الإصدارة 14.04 منها، وبالتالي تقول لـ Docker استعمل نسخة Ubuntu 14.04 (يتكفل هو بتزيل الصورة الخام من Ubuntu 14.04 - حوالي 60 إلى 300 Mb تقريبا- واستعمالها كتوزيعة للحاوية)مشروع الويب خاصتي يستعمل Python وبالتحديد النسخة 2.7 منها، ويعمل بشكل جيد على هذه النسخة، لم أجرب على Python 3، تقول لـ Docker نصب Python2.7 في الحاوية التي بها نظام Ubuntu 14.04 الذي سبق تنزيل صورته الخاممشروع الويب خاصتي يستعمل مكتبة Flask أو Django و مكتبة Numpy الخاصة ببايثون، يتم تثبيتهم عبر pip وبالتالي تقول لـ Docker نصب لي على الحاوية التي بها Ubuntu 14.04 و Python 2.7 السابقة تطبيق Pip عبر مدير حزم Ubuntu (أي apt-get install python-pip) ثم باستعمال pip نصب لي مكتاب بايثون السابق ذكرهامشروع الويب الخاص بي يحتاج قاعدة بيانات MySQL، نصبها يا Docker عبر مدير حزم Ubuntuأيضا نحتاج nginx أو apache، كذلك تطلب من Docker أن ينصبه عبر مدير حزم Ubuntuاجمع لي كل هذا في صورة واحدة (image) يمكن تشغيلها على أي خادوم أو حاسوب به Docker عبر الأمر: docker run my_imageجميع هذه الخطوات يمكن أتمتتها وسردها في ملف واحد اسمه DockerFile، كل سطر من هذا الملف عبارة عن أمر لـ Docker يقوم به (تماما كما قمنا به أعلاه)، مجموع الأوامر يكون الخطوات التي يمر بها Docker لبناء الحاوية التي نريدها، في ما يلي مثال عن ملف DockerFile: FROM ubuntu 14.04 # Install Python RUN apt-get install -y python-dev # Install pip RUN apt-get install -y python-pip # Install requirements.txt ADD requirements.txt /src/requirements.txt RUN cd /src; pip install -r requirements.txt # Add the Flask App ADD . /src # EXPOSE PORT EXPOSE 80 # Run the Flask APP CMD python src/app.pyيمكن حفظ هذه الأوامر في ملف باسم Dockerfile، يمكنك أيضا تشغيل هذا الملف لبناء صورة (image) لحاوية container من خلال Docker عبر الأمر التالي: docker build -t <your username>/my-flask-app .لاحظ النقطة في آخر الأمر، والتي تعني "استعمل ملف DockerFile الموجود في المجلد الحالي"، أما تعليمة t- بعد أمر build هي لاعطاء وسم (tag) للحاوية التي نريد بناءها. عادة من المتعارف عليه هو اعطاء اسم مستخدمك يليه "/" يليه اسم تطبيقك. مفهوم الحاويات (Containers)الحاوية في Linux عبارة عن غلاف يطبّق مجموعات من القيود لعزل عملية أو مجموعة عمليات (processes) عن باقي مهام وعمليات النظام من ناحية السياق (context)، الذاكرة RAM، القراءة والكتابة، الشابكة (Network)... الخ، بحيث تكون في معزل تام عن باقي الـ processes في النظام. أي نفس فكرة الـ sandboxing. مفهوم الحاويات ليس جديدا، فقد بدأ بالظهور منذ أواخر عام 2007، حين عرض مهندسون لدى Google مشروع cgroups (اختصارا لـ Control Groups) ليتم دمجه في نواة Linux، منذ ذلك الوقت cgroups كان اللبنة الأساسية لعزل الموارد وكبحها في نظام Linux على مستوى النواة. بعدها جاء مشروع LXC (اختصارا لـ LinuX Containers) والذي جمع بين cgroups وميزة عزل نطاقات الأسماء (namespace isolation) في نواة Linux، لتوفير إمكانية إنشاء مجموعات منفصلة عن بعضها من العمليات (process groups)، كل مجموعة مكتفية ذاتيا و/أو محدودة المواد، بحيث لا تدري كل مجموعة عن الأخرى بالرغم من أنهم يشاركون نفس النواة (نواة Linux). هذه المجموعات عُرفت باسم الحاويات Containers. على الرغم من أن LXC الأقرب لفكرة Docker، إلا أنه بقي على مستوى منخفض ولم يوفر واجهة برمجية سهلة للمطورين مثل ما قدمه Docker. إضافات Dockerفي أيامه الأولى، اعتمد مشروع Docker على LXC وبنى عليه، أي استعمله كـ backend أو driver، (لكن الآن يمكن استعمال بدائل لـ LXC) لكنه أضاف عدة أمور عصرية، بعضها مستوحى من أنظمة إدارة النسخ (Version Control Systems) من ذلك: مفهوم Docker image لبناء لقطات من الحاويات (نفس فكرة ملفات .iso) يمكن تصديرها واسترادها، وبالتالي يمكن بناء صورة للمشروع بأكمله ثم يكفي استراد تلك الصورة على الخاودم، يتوجب فقط أن يكون Docker مُنصّبا.إمكانية عمل "إيداع" (Commit) للتغيرات التي قمت بها على صورة المشروع الخاص بك، وبالتالي إمكانية الرجوع للوراء في حال الخطأ، هذه الميزة تسمح أيضا لـ Docker أن يكون وسيلة حفظ احتياطي "backup".كل صورة بنيتها يمكنك مشاركتها مع المجتمع في فهرس docker، والذي كان اسمه Docker index ثم تحول مؤخرا إلى docker hub. ستجد فيه مثلا صور لـتطبيق WordPress منصبة على Ubuntu جاهزة للاستهلاك المباشر، أليس هذا رائعا؟مفهوم الـ Dockerfile الذي سبق عرض ماهيته، وهو وسيلة لأتمتة وسرد خطوات بناء مشروعك أو حاويتك. الأتمتة التي تتيحها ملفات Dockerfiles تسمح بانتهاج نسق Continuous integration الذي تكلمنا عنه، تخيل أنك تريد تجربة مشروعك على Python 3 مثلا، كل ما عليك هو تغيير نسخة Python في ملف Dockerfile وبناء حاوية جديدة لتجرب عليها الناتج، فإن كان جيدا تدفعه للخادوم، وإن لم يكن كذلك تحذفه. نفس الشيء مع إصدارات المكتبات التي يعتمد عليها مشروعك.هذه بعض مما أضافه Docker لما هو موجود، وهي وحدها كفيلة بإحداث قفزة وتحول نوعي في طريقتنا لبناء ونشر البرامج. لكن السؤال الذي قد يطرحه البعض: أليس ما يعمله Docker هو نفسه ما تعمله الآلات الافتراضية Virtual Machines ومحاكاة الأنظمة؟ باختصار، نعم ولا وسنلخص الأمر في النقاط التالية: Docker أخف بكثير من الآلات الافتراضية، يمكنك تشغيل العشرات من الحاويات في حاسوب عادي واحد، في حين لا يمكنك تشغيل 3-4 آلات افتراضية في حاسوب عادي واحد ولو كان قويا نسبيا (يثقل النظام). أي أن Docker يستهلك موارد أقل بكثير.الآلات الافتراضية تقوم بمحاكاة كـــامــل النظام وكل ما فيه ووضعه فوق النظام المضيف، في حين Docker يتشارك النواة (Linux kernel) مع النظام المضيف.ما يقوم به Docker هو تنزيل التوزيعات فقط، أي الـ bins/libs لكل توزيعة وفقط، في حين يتشارك النواة مع النظام المضيف ولا يُنزّل نواة جديدة مع تلك التوزيعة. تلك الـ bins/libs كفيلة لمحاكاة بيئة التوزيعة المرجوة، أما النواة فهي متشابهة بين جميع التوزيعات وبالتالي يتقاسمها مع النظام المضيف (لهذا Docker لا يعمل إلا على Linux).Docker يعزل التطبيق واعتمادياته فقط، في حين الآلات الافتراضية تعزل كامل النظام وما فيه من تطبيقات.الصورتان التاليتان توضحان الفرق بين Docker والآلات الافتراضية: من خلال الصورتين يمكن ملاحظة أن وزن Docker على الخادوم بشكل عام أخف بكثير من الثقل الذي تحدثه الآلات الافتراضية. الجدير بالذكر أيضا أن القائمين على مشروع Docker قاموا بتوفير ما يسمى بـ Docker Hub، يمكن فيه مشاركة صور (images) لمشروعك (إن كان مفتوح المصدر)، تجد فيه صورا للحلول مفتوحة المصدر المعروفة، كصور Wordpress, joomla, mysql, nginx .. الخ، بحيث يمكنك استهلاكها مباشرة أو استيرادها والبناء عليها أدعوك ﻷن تلقي عليه نظرة. يمكن أيضا أن تكون مستودعا خاصا لك، لمشاريعك التجارية غير مفتوحة المصدر / مجانية، تجلب منه وتسترد صورك الخاصة التي قمت ببنائها. إلى هنا نصل إلى خاتمة هذه المقدمة التعريفية. سنقوم في مقال لاحق إن شاء الله بشرح أساسيات Docker بشكل عملي. إذا كانت لغتك الانجليزية جيدة، فأنصحك بمشاهدة الفيديو التالية لفهم أعمق للمقال:
  2. بعد إنشاء متجرك الإلكتروني على WooCommerce وتهيئته و ضبط إعداداته (راجع الدروس السابقة)، ستكون خطوتك الأولى هي إنشاء المنتجات. لكن قبل أن نشرع في الحديث عن أنواع المنتجات وكيفية إنشائها، لنتعرّف أولا على كيفية إدارة فئات/تصنيفات المنتج Categories، الوسوم Tags، فئات الشحن Shipping Classes، والسّمات Attributes. فئات المنتج Product Categories على غرار فئات المنشورات على ووردبريس، بإمكانك إضافة فئات لتصنيف المنتجات، حذفها أو تعديلها. هناك بعض الخيارات الإضافية المتعلّقة بفئات المنتجات، وكذلك إمكانية رفع صور لتمثل الفئات. لإنشاء فئة جديدة اذهب إلى: Dashboard > Products > Categories من هذه النافذة تستطيع إنشاء فئات لإضافة منتجات إليها لاحقًا. علمًا أنّه يمكنك إنشاء الفئات أثناء إنشاء المنتجات أيضًا، لكن لن تملك التحكّم الكامل في خيار slug، الفئات الرئيسية Parent Categories، إلخ. في حقل Name قم بإدخال اسم الفئة، وفي حقل Slug قم بإدخال جزء العنوان URL لهذه الفئة. إذا لم تقم بإدخال slug مخصص سيقوم ووردبريس باستخدام اسم الفئة تلقائيًا عندما تنقر على Add New Product Category عند الانتهاء. إذا كانت لديك فئات رئيسية وفئات فرعية (مثلا فئة "ملابس" رئيسية وفئة "أقمصة" فرعية) يمكنك إدخال الفئة الفرعية ضمن الفئة الرئيسية من قائمة Parent. من هذه القائمة اختر الفئة الرئيسية (يُفترض أنّك قمت بإنشائها مسبقًا)، أو اختر الخيار None إن لم يكن لديك فئات متداخلة. في حقل Description قم بإدخال وصف للفئة، وهذا الخيار مفيد إذا كنت ستوفّر طريقة لبيع المنتجات حسب الفئة. عادة ما يُعرض الوصف على العملاء عندما يقومون بتصفّح المنتجات حسب الفئات، مع ذلك يعتمد الأمر على إعداداتك والقالب الذي تستخدمه. من قائمة Display Type اختر طريقة عرض الفئات على العملاء. يمكنك استخدام الخيار الافتراضي Default الذي سيعرض جميع المنتجات من جميع الفئات الفرعية، الخيار Products الذي سيعرض المنتجات فقط على صفحة الفئة، الخيار Subcategories الذي سيعرض قائمة من المنتجات الفرعية وعدد المنتجات التي تحتويها، أو الخيار Both الذي سيعرض كلّ من الفئات الفرعية في الأعلى، والمنتجات في الأسفل. وأخيرا يمكنك رفع صورة مصغّرة للفئة بالنقر على زر Upload/Add Image. وهذا الخيار مفيد إذا اخترت خيار Subcategories من طريقة العرض، حيث سيعرض قوائم من الصور المصغّرة لجميع الفئات الفرعية عند عرض الفئات مع الفئات الفرعية: وكذلك ستمثّل هذه الصورة المصغّرة الفئة عند عرض الفئات بالشكل المعتاد: بعد الانتهاء من تعديل جميع الخيارات انقر على Add New Product Category لإضافة الفئة. الوسوم Tags تعمل الوسوم بنفس طريقة عمل وسوم منشورات ووردبريس العادية. لإضافة وسم انقر على Tags من قائمة Products ثم قم بإدخال اسم الوسم في حقل Name، و slug مخصص في حقل Slug ووصف الوسوم في حقل Description: يمكن أن تكون الوسوم مفيدة إذا رغبت في توفير طريقة لتصفّح المنتجات باستخدام الوسوم، حيث يمكن إضافتها إلى قوائم التصفّح ويمكن حتّى أن تظهر على المنتجات نفسها. انقر على Add New Product Tag لحفظ الوسم. فئات الشحن Shipping Classes يمكن أن تُستخدم هذه الفئات لجمع المنتجات المتشابهة لغرض حساب سعر الشحن. لإضافة فئة شحن جديدة انقر على Shipping Classes من قائمة Products: تُستخدم هذه الفئات من قبل طرق الشحن الأساسية التي تم تحديدها ضمن إعدادات الشحن (مثل Flat Rate Shipping) أو طرق الشحن الاستثنائية premium (مثل Table Rate Shipping) لغرض المساعدة على إنشاء كُلف الشحن. على سبيل المثال لنقم بإضافة فئة شحن باسم "Book" لتساعدنا على إنشاء قواعد شحن خاصّة بمنتجاتنا من الكتب. في حقل Name قم بإدخال اسم فئة الشحن (وهو Book في مثالنا)، ثم أدخل slug هذه الفئة في حقل Slug، وضمّنها في الفئة الرئيسية إن وجدت باختيار الفئة الرئيسية من قائمة Parent، وأخيرًا اكتب الوصف المرغوب. بعد ذلك انقر على زر Add New Shipping Class لحفظ الفئة. السمات Attributes تُستخدم السمات لتعريف بيانات إضافية للمنتج كاللون، الحجم، الوزن، إلخ ومن ثم استخدامها عند إنشاء المنتجات. وهي مفيد ومطلوبة عند إنشاء المنتجات المتنوّعة variable على وجه الخصوص: يجب أن تأخذ في الاعتبار عند إنشاء السمات أنّه بعد إنشائها لن تتمكن من إعادة تسميتها لاحقًا. لنفترض أننا نبيع القمصان فقط في متجرنا، لذلك سنقوم بإنشاء سمة "Size" خاصة بالأحجام المختلفة. في حقل Name أدخل اسم السمة (وهو "Size" في هذا المثال)، ثم أدخل slug مخصص في حقل Slug. قم بتأشير الخيار Enable Archive لتفعيل صفحة أرشفة لهذه السمة، ثم حدد كيفية اختيار السمة من قائمة Type. بإمكانك تحديد طريقة الاختيار بالتحديد Select أو بإدخال نص يدويًا Text. استخدم Select إذا كنت ستقوم بإعداد المفردات terms مسبقًا في قائمة منسدلة (أي في هذا المثال نقوم بإعداد قائمة منسدلة تحتوي على الأحجام المختلفة المتوفرة). من قائمة Default Sort Order حدد طريقة فرز المفردات في قائمة السمة على الواجهة الأمامية لمتجرك. الخيارات المتوفرة هي ترتيب مخصّص Custom Order، أبجديًا حسب الاسم Name، أو حسب التسلسل (الرقمي) Name numeric، أو حسب الرمز التعريفي للمفردة Term ID. بإمكانك استخدام الترتيب المخصص لتتمكنّ من ترتيبها بسهولة بالسحب والإفلات. انقر على Add Attribute لكي تتمكّن من إضافة مفردات السمة. انقر على أيقونة الترس بجانب اسم السمة لإعداد مفرداتها. في حقل Name قم بإدخال اسم المفردة الأولى للسمة. في هذا المثال سنقوم بإضافة ثلاثة أحجام: صغير، متوسط، وكبير. لذلك سيكون اسم المفردة "Small". بعد ذلك قم بإدخال slug مخصص، وحدد السمة الرئيسية التي تتضمّن هذه السمة، إن وجدت، من قائمة Parent، ثم أدخل وصفًا مختصرًا في حقل Description. في العادة لا يظهر وصف السمة، لكن بعض القوالب توفر إمكانية عرضه. بعد ذلك انقر على زر Add New لإضافة مفردات جديدة. بعد إضافة جميع المفردات قم بترتيبها بسحب كل مفردة وإفلاتها عند الموضع المرغوب. بعد الانتهاء من إعداد جميع فئات المنتجات، الوسوم، فئات الشحن، والسمات، حان الوقت لتبدأ في إنشاء منتجاتك. تابع الدرس القادم لتتعرف على أنواع المنتجات وكيفية إنشائها.
  3. إذا كانت هذه هي المرة الأولى التي تقرأ فيها حول إعدادات WooCommerce ننصحك بالرجوع إلى الدروس السابقة لتطّلع أولا على طريقة تثبيت الملحق وتهيئته، وتتعرّف على كيفية ضبط إعدادات المنتجات، الضرائب، والدفع. سنغطّي في هذا الدرس خطوات ضبط إعدادات الشحن العامة، بالإضافة إلى إعدادات كل طريقة من طرق الشحن المتوفّرة. يمكنك تجاوز ضبط إعدادات الشحن إذا كانت المنتجات التي تبيعها رقمية جميعها. فمن البديهي أن لا تكون هناك حاجة لشحنها. ابدأ بتسجيل الدخول إلى موقعك ثم الذهاب إلى: Dashboard > WooCommerce > Settings > Shipping خيارات الشحن Shipping Options تحت هذا التبويب الفرعي ستجد مجموعة من خيارات الشحن العامة: قم بتأشير الخيار الأول، Enable Shipping لتمكين شحن الطلبات. قم بتأشير الخيار الثاني، Enable the shipping calculator on the cart page لتمكين العملاء من رؤية رسوم الشحن للسلع الموجودة على السلّة وحسب قواعد الشحن الخاصة بمتجرك. بإمكانهم حساب رسوم الشحن باختيار اسم البلد، المحافظة/الولاية، والرمز البريدي Zip Code ومن ثم النقر على Update Totals لمعرفة مقدار الرسوم: الخيار الثالث هو Hide shipping costs until an address is entered، والذي عند التأشير عليه سيقوم بإخفاء جميع كلف الشحن حتّى يتم إدخال العنوان. فإذا كان نسبة الشحن التي تستخدمها تُحسب على أساس موقع العميل، لن تظهر كلفة الشحن ما لم يتم إدخال تفاصيل الموقع عند الدفع. من مجموعة خيارات Shipping Destination بإمكانك تحديد العنوان الذي سيتم استخدامه كعنوان العميل الافتراضي. بإمكانك اختيار أما عنوان الشحن Default shipping address أو عنوان الفوترة Default billing address كخيارات افتراضية، أو الشحن إلى عنوان الفوترة الخاص بالعميل فقط Only ship to the customer's billing address. بعد ذلك حدد المواقع التي تريد تمكين الشحن إليها من قائمة (Restrict shipping to Location(s. بإمكانك اختيار الشحن لجميع البلدان التي تبيع لها Ship to all countries you sell to، والذي يتيح الشحن إلى مواقع البيع التي قمت بتحديدها في الإعدادات العامة General، أو الشحن لجميع البلدان Ship to all countries (وهذا الخيار واضح من اسمه)، أو الشحن إلى بلدان محددة Ship to specific countries only والذي عند اختياره سيظهر حقل يساعدك على اختيار البلدان التي تريد الشحن إليها: القسم الأخير في هذا التبويب هو طريقة الشحن Shipping Method: من هذا القسم يمكنك معرفة أسماء طرق الشحن، رموزها التعريفية ID، أولوية استخدامها، وكذلك معرفة فيما إذا كانت مفعّلة أو لا. بإمكانك التحكم في ترتيب ظهور كل طريقة من طرق الشحن في صفحة الدفع بالنقر على أيقونة (≡) بجانب اسم الطريقة، ومن ثم السحب إلى الأعلى أو الأسفل والإفلات عند الترتيب المرغوب. وباستخدام حقول Selection Priority تستطيع اختيار الطريقة التي تُحدد أولًا بشكل افتراضي. ستُحدد الطريقة ذات الأولوية رقم 1 بشكل افتراضي عندما يقوم العميل بالدفع. وإذا لم تكن الطريقة الأولى مُتاحة لذلك العميل، سيتم تحديد الطريقة ذات الأولوية رقم 2 بشكل افتراضي عند الدفع، وهكذا. إذا كان لأكثر من طريقة شحن نفس الأولوية، سيتم تحديد الطريقة ذات الكلفة الأقل كخيار افتراضي. بإمكانك الوصول إلى إعدادات كل طريقة على حدة بالنقر على اسمها، أو الذهاب إلى أعلى الصفحة حيث ستجد إعدادات كل طريقة في تبويب فرعي منفصل. وسنغطّي إعدادات جميع طرق الشحن في الفقرات التالية. سعر الشحن الموحد Flat Rate ويُقصد بـ flat rate سعر الشحن الثابت الموحّد الذي لا يتغيّر وفق أشياء محددة. أي أنّه باستخدام هذه الطريقة ستقوم بإضافة سعر شحن واحد لكل الطلبات على متجرك. انقر على تبويب Flat rate الفرعي لعرض الإعدادات: قم بتأشير الخيار Enable this shipping method لتفعيل الشحن بهذه الطريقة. بعدها قم بإضافة عنوان للطريقة في حقل Method Title إن رغبت في تغيير العنوان الافتراضي. الخطوة التالية هي تحديد البلدان التي تريد إتاحة استخدام هذه الطريقة فيها. بإمكانك تحديد الخيار All Allowed Countries والذي يعني إتاحة هذه الطريقة لجميع البلدان التي تبيع لها والتي حددتها في الإعدادات العامة General، أو Specific Countries والذي عند تحديده سيظهر لك حقل جديد يساعدك على اختيار البلدان التي تريد إتاحة طريقة الشحن هذه فيها: من قائمة Tax Status يمكنك تحديد فيما إذا كانت طريقة الشحن هذه خاضعة للضرائب Taxable، أو لا None. في حقل الكلفة Cost قم بإدخال كلفة استخدام طريقة الشحن الحالية لكل طلب. بإمكانك إدخال رقم عادي ليمثّل رسوم الشحن، مثل 5$، لكن هناك المزيد مما يمكنه فعله في هذا الحقل. بإمكانك إدخال عمليات حسابية لمساعدتك على حساب الكلف بصورة صحيحة. فهذا الحقل يتقبّل الصيغ الرياضية بالإضافة إلى بعض العناصر النائبة placeholders. من العناصر النائبة المتاحة هي الكميّة والتي تُكتب بالشكل التالي: [qty] والرسوم التي تُكتب بالشكل التالي: [fee] على سبيل المثال، إذا أردنا فرض كلفة شحن تساوي 10$، ومن ثم إضافة دولارين لكل سلعة في السلة، نستخدم العنصر النائب للكمية وبالشكل التالي: هذا مجرّد مثال بسيط، حيث هناك الكثير من الطرق لإعداد رسوم الشحن باستخدام العناصر النائبة والعمليات الرياضية. ستكون إعدادات طريقة Flat Rate قد انتهت إذا لم تكن تستخدم فئات شحن shipping classes، انقر Save Changes لحفظ التغييرات. أما إذا كنت تستخدم فئات شحن في متجرك، سيظهر لك قسم جديد في هذه الصفحة بعنوان Shipping Class Costs: ستلاحظ في هذا القسم وجود حقل كلفة لكل فئة شحن قمت بإنشائها سابقًا في إعدادات الضريبة، بالإضافة إلى حقل للكلفة في حالة عدم وجود فئات شحن No Shipping Class Costs. هذه الحقول تعمل بنفس طريقة حقل الكلفة Cost، تأكّد فقط من ضبط هذه الحقول بشكل صحيح إذا كنت تريد استخدام رسوم مختلفة لفئة الشحن الواحدة. قد تتساءل عن الفرق بين حقل No Shipping Class Costs، وحقل Cost المذكور أعلاه، حيث أنّ كليهما خاص بحالة عدم استخدام فئات شحن. الحقل الأول، No Shipping Class Costs مفيد إذا كنت ستستخدم خيار Per Class أدناه، وبخلاف ذلك أدخل كلفة الشحن في حقل Cost. من قائمة Calculation Type حدد طريقة حساب رسوم الشحن. لديك خياران، الأول، Per Class، ويُستخدم لفرض رسوم الشحن لكل فئة شحن، مما يعني أنّ كلفة فئة الشحن ستُضاف إلى كل سلعة في السلة حسب فئة الشحن لتلك السلعة. على سبيل المثال، لنفترض أنّه لديك سلعتان في السلة كل منها ذات فئة شحن مختلفة؛ فئة الشحن الأولى كلفتها 5$، وفئة الشحن الثانية كلفتها 8$. في هذه الحالة سيصبح إجمالي كلفة الشحن مساويًا لـ 13$. أما عند تحديد الخيار الثاني، Per Order، فسيتم البحث عن أعلى كلفة لفئات الشحن ومن ثم استخدامها ككلفة الشحن الثابتة حتّى وإن اختلفت فئات الشحن للسلع في السلّة. انقر على Save Changes لحفظ التغييرات. الشحن المجاني Free Shipping الشحن المجاني من الطرق الرائعة التي تشجّع العملاء على إنفاق المزيد من المال. على سبيل المثال اعرض إمكانية الحصول على شحن مجاني للطلبات التي تزيد قيمتها عن 100$. للوصول إلى إعدادات طريقة الشحن المجاني انقر على تبويب Free Shipping الفرعي: قم بتأشير الخيار Enable Free Shipping لتفعيل طريقة الشحن هذه. بعدها قم بإدخال عنوان الطريقة الذي سيظهر لعملائك عند الدفع من حقل Title، ثم حدّد البلدان التي تريد إتاحة هذه الطريقة فيها من قائمة Availability. وكما في الطريقة السابقة بإمكانك تحديد الخيار All Allowed Countries والذي يعني إتاحة هذه الطريقة لجميع البلدان التي تبيع لها والتي حددتها في الإعدادات العامة General، أو تحديد Specific Countries والذي عند تحديده سيظهر لك حقل جديد يساعدك على اختيار البلدان التي تريد إتاحة طريقة الشحن هذه فيها. من قائمة Free Shipping Requires حدّد الشرط الذي يجب تحقيقه لتمكين الشحن المجاني. الخيارات المتاحة هي تمكين الشحن المجاني إذا كان العميل يملك قسيمة شحن مجاني صالحة A valid free shipping coupon، عند حد أدنى لمبلغ لطلب (يُحدد في الحقل السفلي) A minimum order amount، عند حد أدنى لمبلغ الطلب أو قسيمة صالحة A minimum order amount OR coupon، أو عند حد أدنى لمبلغ الطلب وقسيمة صالحة A minimum order amount AND coupon. إذا اخترت أحد الخيارات التي تحتوي على حد أدنى لمبلغ الطلب، تأكّد من إدخال قيمة الحد الأدنى لمبلغ الطلب في حقل Minimum Order Amount الأخير. انقر على Save Changes لحفظ التغييرات. International Flat Rate تستند طريقة International Flat Rate على طريقة Flat Rate، وهي تتيح إمكانية تحديد سعر شحن قياسي لكل طلب، لكل سلعة، أو لكل فئة شحنة لغرض التوصيل الدولي. للوصول إلى إعدادات هذه الطريقة انقر على تبويب International Flat Rate الفرعي: قم بتأشير الخيار الأول، Enable this shipping method لتفعيل هذه الطريقة ثم قم بإدخال العنوان المرغوب في حقل Title. من قائمة Availability حدّد البلدان التي تريد إتاحة هذه الطريقة فيها. بإمكانك تحديد بلدان محددة باختيار الخيار Selected Countries، ثم إدخال أسماء هذه البلدان في حقل Specific Countries. أو استثناء بلدان محدّدة باختيار الخيار Excluding Selected Countries وإدخال أسماء هذه البلدان في حقل Specific Countries. من قائمة Tax Status يمكنك تحديد فيما إذا كانت طريقة الشحن هذه خاضعة للضرائب Taxable، أو لا None. في حقل الكلفة Cost قم بإدخال رسوم الشحن لكل طلب باستخدام طريقة International Flat Rate. بإمكانك إدخال رقم عادي ليمثّل رسوم الشحن، مثل 5$، لكن هناك إمكانية استخدام العناصر النائبة والعمليات الحسابية كما في طريقة Flat Rate. من العناصر النائبة المتاحة هي الكميّة والتي تُكتب بالشكل التالي: [qty] والرسوم التي تُكتب بالشكل التالي: [fee] على سبيل المثال، إذا أردنا فرض كلفة شحن أساسية تساوي 12$، ومن ثم إضافة 3 دولار لكل سلعة في السلة، نستخدم العنصر النائب للكمية وبالشكل التالي: هذا مجرّد مثال بسيط، حيث هناك الكثير من الطرق لإعداد رسوم الشحن باستخدام العناصر النائبة والعمليات الرياضية. ستكون إعدادات طريقة International Flat Rate قد انتهت إذا لم تكن تستخدم فئات شحن shipping classes، انقر Save Changes لحفظ التغييرات. أما إذا كنت تستخدم فئات الشحن، سيظهر لك قسم جديد في هذه الصفحة بعنوان Shipping Class Costs: ستلاحظ في هذا القسم وجود حقل كلفة لكل فئة شحن قمت بإنشائها سابقًا في إعدادات الضريبة، بالإضافة إلى حقل للكلفة في حالة عدم وجود فئات شحن No Shipping Class Costs. هذه الحقول تعمل بنفس طريقة حقل الكلفة Cost، تأكّد فقط من ضبط هذه الحقول بشكل صحيح إذا كنت تريد استخدام رسوم مختلفة لفئة الشحن الواحدة. من قائمة Calculation Type حدّد طريقة حساب رسوم الشحن. لديك خياران، الأول، Per Class، ويُستخدم لفرض رسوم الشحن لكل فئة شحن على حدة، مما يعني أنّ كلفة فئة الشحن ستُضاف إلى كل سلعة في السلة حسب فئة الشحن لتلك السلعة. على سبيل المثال، لنفترض أنّ لديك سلعتان في السلة كل منها ذات فئة شحن مختلفة؛ فئة الشحن الأولى كلفتها 5$، وفئة الشحن الثانية كلفتها 8$. في هذه الحالة سيصبح إجمالي كلفة الشحن مساويًا لـ 13$. أما عند تحديد الخيار الثاني، Per Order، فسيتم البحث عن أغلى كلفة لفئة الشحن ومن ثم استخدامها ككلفة الشحن الثابتة حتّى وإن اختلفت فئات الشحن للسلع في السلّة. انقر على Save Changes لحفظ التغييرات. طريقة الشحن المحلية Local Delivery هذه الطريقة هي من طرق الشحن البسيطة لتسليم الطلبات محليًا. يمكن تحديد الرسوم كنسبة مئوية من إجمالي كلف السلع في السلّة، كقيمة ثابتة، أو يمكن أن تكون مجانية. للوصول إلى إعدادات هذه الطريقة انقر على تبويب Local Delivery الفرعي: قم بتأشير الخيار Enable local delivery لتمكين خدمة التوصيل المحلي، ثم قم بإدخال العنوان المرغوب في حقل Title. في قائمة نوع الرسوم Fee Type لديك ثلاثة خيارات. إما اختيار قيمة رسوم ثابتة لكل الطلبات Fixed amount، أو كنسبة مئوية من إجمالي كلف السلع في السلّة Percentage of cart total، أو كقيمة ثابتة لكل منتج Fixed amount per product. سيحدد ما تختاره من هذه القائمة كيفية تطبيق رسوم التوصيل. قم بإدخال رسوم التوصيل في حقل Delivery Fee. في حقل Allowed ZIP/Post Codes قم بإدخال الرموز البريدية للمواقع التي يُتاح في التوصيل المحلي. قم بفصل الرموز البريدية باستخدام الفاصلة (,) أو استخدم رموز البدل wildcards أو الأنماط patterns. من الأمثلة على استخدام رموز البدل wildcards كتابة P* في حقل الرمز البريدي، وهذا يعني مطابقة جميع الرموز البريدية التي تبدأ بالحرف P. ومن الأمثلة على استخدام الأنماط كتابة (NG1___ (N، G، 1، وثلاث خطوط سفلية underscore وهذا يعني أنّه سيطابق رموز بريدية مثل NG1 1AA، لكن لا يطابق رمزًا مثل NG10 1AA. الخيار الأخير Method availability لتحديد المناطق التي تُتاح فيها هذه الخدمة. وكبقية الطرق السابقة بإمكانك تحديد الخيار All Allowed Countries والذي يعني إتاحة هذه الطريقة لجميع البلدان التي تبيع لها والتي حددتها في الاعدادات العامة General، أو الخيار Specific Countries والذي عند تحديده سيظهر لك حقل جديد يساعدك على اختيار البلدان المحددة التي تريد إتاحة طريقة التوصيل المحلي فيها. انقر على Save Changes لحفظ التغييرات. Local Pickup تتيح هذه الطريقة للعملاء إمكانية الذهاب وأخذ طلباتهم بأنفسهم. لتفعيل هذه الطريقة انقر على تبويب Local Pickup الفرعي ثم قم بتأشير الخيار Enable Local Pickup: قم بإدخال عنوان مناسب للطريقة في حقل Title، وفي حقل Zip/Post Codes قم بإدخال الرموز البريدية للمواقع التي ترغب في تمكين هذه الطريقة فيها، وافصل بين كل رمز وآخر باستخدام الفاصلة (,). وكذلك يمكنك استخدام رموز البدل wildcards أو الأنماط patterns كما في الطريقة السابقة. من الأمثلة على استخدام رموز البدل wildcards كتابة P* في حقل الرمز البريدي، وهذا يعني مطابقة جميع الرموز البريدية التي تبدأ بالحرف P. ومن الأمثلة على استخدام الأنماط كتابة (NG1___ (N، G، 1، وثلاث خطوط سفلية underscore وهذا يعني أنّه سيطابق رموز بريدي مثل NG1 1AA، لكن لا يطابق رمزًا مثل NG10 1AA. استخدم الخيار الأخير Method availability لتحديد المناطق التي تُتاح فيها طريقة Local Pickup. وبالضبط كسابقاتها من الطرق، بإمكانك تحديد الخيار All Allowed Countries والذي يعني إتاحة هذه الطريقة لجميع البلدان التي تبيع لها والتي حددتها في الاعدادات العامة General، أو الخيار Specific Countries والذي عند تحديده سيظهر لك حقل جديد يساعدك على اختيار البلدان التي تريد إتاحة هذه الطريقة فيها. انتهى درس اليوم، لكن ما زالت هناك إعدادات أخرى تحتاج للضبط، نكملها في الدرس القادم -إن شاء الله-.