اذهب إلى المحتوى

Adil Elsaeed

الأعضاء
  • المساهمات

    28
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    7

آخر يوم ربح فيه Adil Elsaeed هو يوليو 3 2017

Adil Elsaeed حاصل على أكثر محتوى إعجابًا!

11 متابعين

المعلومات الشخصية

  • النبذة الشخصية
    مطور ووردبريس ومصمم مواقع انترنت
  • الموقع

آخر الزوار

لوحة آخر الزوار معطلة ولن تظهر للأعضاء

إنجازات Adil Elsaeed

عضو مساهم

عضو مساهم (2/3)

36

السمعة بالموقع

1

إجابات الأسئلة

  1. نعم هذا خطأ الاسم الصحيح للدالة هو ha_widget شكرا على التنبيه أخي الكريم
  2. شكرا على التنبيه أخي أيمن، يوجد خطأ في التعريف فقد تم عكس الثابتين
  3. ربما كان خطأ من الكاتب أو يقصد Shopify لأن الكلام كان في سياق الحديث عنه، أو ربما يقصد تكاليف بوابات الدفع، فمثلا بايبال يقوم بأخذ عمولة عند الدفع عن طريقه، ويدلل على هذا قوله لان WooCommerce لا تحتاج منك إلى تسجيل أصلا.
  4. هذا هو الكود لعرض 3 مقالات من التصنيف ذو الإسم cat1 ويمكنك تطبيق نفس الطريقة على بقية التصنيفات $cat1_query = new WP_Query( array( 'category_name' => 'cat1', 'posts_per_page' => 3 ) ); if($cat1_query->have_posts()): while($cat1_query->have_posts()): $cat1_query->the_post(); // عرض عنوان المقالة the_title(); // يمكنك عرض بقية تفاصيل المقال بنفس الطريقة endwhile; endif;
  5. تحتاج إلى عمل ثلاث حلقات بإستخدام WP_Query كل واحدة لجلب مقالات تصنيف معين، وهنا تجد شرح لهذه الطريقة مع بعض الأمثلة إستخدام أكثر من حلقة لجلب المقالات في ووردبريس
  6. لا غير صحيح، منصة WooCommerce مجانية بالكامل وهي عبارة عن إضافة تقوم بتنصيبها على موقع ووردبريس ولا تأخذ نسبة عن كل عملية بيع.
  7. ربما يفيدك هذا المقال دليلك لإختيار الإستضافة المناسبة لموقع ووردبريس
  8. فهمت من ردك هذا أن كل ما تحتاجه هو أن يكون شكل صفحة المدونة والمقالات مختلف عن بقية صفحات الموقع (الصفحة الرئيسية، الخدمات، ...الخ)، يمكن عمل هذا من خلال إستخدام قالب واحد والتعديل على برمجته،، وذلك بإعطاء ملف index.php (رئيسية المدونة) وصفحة single.php (صفحة عرض مدونة واحدة) وبقية الملفات المختصة بالتدوينات (مثل category.php) إعطائها التنسيق الذي تريده للمدونة وبقية ملفات الموقع بالتنسيق الآخر،، أما في حالة أردت إستخدام قالبين مختلفين فعندئذ لا يوجد طريقة لإدارة الموقعين من خلال لوحة تحكم واحدة، الهم إلا من خلال خاصية Multisite في ووردبريس (والتي لا أنصح بها لعدة أسباب) أو من خلال إحدى خدمات إدارة عدة مواقع ووردبريس مثل MainWP أو ManageWP، وفي كلا الحالتين لن تتحصل على تحكم كامل من لوحة التحكم الموحدة.
  9. هذا يعتمد على مدى مرونة الإضافة لكن في أغلب الأحيان لن تواجه صعوبة في إضافة ما يتعلق بالتنسيق Style، أما التعديلات الأكثر تعقيدا فأكثر الإضافات المبرمجة بصورة جيدة تحتوي على أكواد مختصرة Shortcode ودوال Template Tags تمكنك من عرض محتويات الموقع، وخطافات Actions & Filters تمكنك من التعديل على سلوك وبيانات الإضافة بدون تعديل مباشر على ملفات الإضافة. لذا أنصحك بدراسة الاضافة بصورة جيدة لتحديد إذا ما كانت توفر لك المرونة التي تحتاجها قبل إتخاذ القرار بإستخدامها.
  10. الطريقة السهلة هي بإستخدام إحدى الإضافات الجاهزة مثل: DW   AnsPress أو غيرهما من الإضافات، كما يمكنك إستخدام أحد القوالب الجاهزة أما الطريقة الصعبة والتي قد تكون أكثر مرونة هي باستخدام أنواع المقالات المخصصة Custom Post Types والحقول المخصصة Custom Fields والتعليقا ت ورتب وصلاحيات المستخدمين، وهذه الطريقة بالطبع تتطلب منك معرفة ببرمجة ووردبريس. نوع وحجم ومتطلبات المشروع هي ما يحدد ما ستستخدمه من هذه الطرق.
  11. مرحبا بك سيد محب، وشكرا على تعليقك بالتأكيد يمكنك إستخدامه في أي عمل تجاري، فالقالب مرخص بنفس رخصة ووردبريس وهي GPL، لكن ضع في إعتبارك أن أي عمل يعتمد على ووردبريس (إضافة أو قالب) يجب أن يكون مرخص بنفس الرخصة (على حسب شروط الرخصة)، وعادة هنا نتكلم عن ملفات php للقالب أو الإضافة، لكن لك كامل الحرية في ترخيص الملفات المساعدة (الصور وملفات CSS الخ) بأي ترخيص تريده، وهذه الطريقة (إستخدام ترخيص مختلف لكل من الملفات البرمجية والملفات المساعدة) مستخدمة في منتجات عدة مواقع من ضمنها الكثير من منتجات ثيم فورست Themeforst.
  12. تعرفنا في المقال السابق على ملفات الوظائف في قالب Underscores بشئ من التفصيل وفي هذا المقال سنلقي نظرة على ملفات العرض وهي ملفات القالب التي يستخدمها ووردبريس لعرض محتويات الموقع في مختلف الصفحات وكذلك ملفات التنسيق. لكن دعنا في البداية نلقي نراجع بصورة سريعة مفهوم ملفات القالب وكذلك هرمية القالب. ملفات القالب وهرمية القالبملفات القالب Template files هي عبارة عن ملفات قابلة لإعادة الإستخدام Reusable يستخدمها ووردبريس لتوليد صفحات الموقع المختلفة. بعض هذه الملفات (مثل ملف الترويسة header.php وملف التذييل footer.php) تستخدم في جميع صفحات الموقع تقريبا، وبعضها مثل ملف single.php وملف index.php تستخدم في حالات معينة فقط (مثلا الصفحة الرئيسية، أو صفحة عرض المقال). يتبع ووردبريس نظام معين لتحديد ملف القالب الذي سيتم إستخدامه في الصفحة الحالية ويقوم بتحميله عند طلب الصفحة ليستخدم في عرضها. هذا النظام يمكن أن نسميه هرمية القالب في ووردبريس WordPress Template Hierarchy. وفقا لهرمية القالب فإن الملفات الموجودة في القالب قد تختلف من قالب لأخر (وهو ما يحدث عادة) ولكن هنالك ملفات أساسية موجودة في أغلب القوالب، وقالب Underscores بدوره يحتوي على هذه الملفات الأساسية، ويمكنك بالطبع إضافة المزيد من ملفات القالب على حسب المشروع الذي تقوم بتطويره وكذلك يمكنك الإستغناء عن بعضها. ملفات القالب في قالب Underscoresملف الترويسة header.phpهذا الملف من الملفات التي يتم إستخدامها في جميع ملفات القالب الأخرى تقريبا حيث يحتوي على ترويسة الموقع اي بداية وسم html ووسم head وكذلك بداية وسم body، ويحتوي أيضا على عنوان ووصف الموقع وكذلك القائمة الرئيسية للموقع. من الأمور والممارسات الجيدة التي يمكن ملاحظتها في هذا الملف: إستخدام الدالة language_attributes داخل وسم html وهي عبارة عن دالة يوفرها ووردبريس وتعرض خصائص اللغة لوسم html وهي خاصية dir وكذلك خاصية lang وهي مفيدة جدا في حالة تطوير الموقع بأكثر من لغة حيث تقوم بجلب إتجاه اللغة الحالية تلقائيا وكذلك اللغة نفسها.إستخدام الدالة wp_head قبل إغلاق وسم head وهي دالة مهمة جدا يستخدمها ووردبريس في عدة امور وتعتمد عليها مجموعة كبيرة من الإضافات لذلك إذا لم تقم بمناداتها في هذا المكان فقد تتفاجأ بأن كثير من الإضافات لا تعمل في موقعك وكذلك لن يتمكن ووردبريس من ربط ملفات التنسيق والجافا إسكربت في ترويسة الموقع. وفي الحقيقة هي مسئولة من من اداة الحدث وبالتالي مناداة أي دالة مرتبطة به.إستخدام الدالة body_class داخل وسم body والتي تقوم بإخراج كلاسات CSS للصفحة الحالية على حسب الصفحة نفسها، فمثلا في ستجد كلاس home في الصفحة الرئيسية وكلاس blog في صفحة المقالات وغيرها من الكلاسات المفيدة والتي تعينك في تنسيق الموقع إعتمادا على الصفحة نفسها.يتم تضمين هذا الملف في بقية ملفات القالب من خلال الدالة get_header. ملف الفوتر footer.phpمثل ملف الهيدر فإن ملف الفوتر يتم إستخدامه في جميع ملفات القالب الأخرى تقريبا، حيث يحتوي على وسم الإغلاق لكل من html وكذلك body ويحتوي أيضا على الدالة wp_footer والتي يتم مناداتها قبل إغلاق وسم body مباشرة ومهمتها مشابهة لمهمة الدالة wp_head التي ذكرناها اعلاه إلا أن هذه الدالة مرتبطة بالحدث wp_footer وهي بنفس أهمية wp_head وعليك دوما التأكد من أن قالبك يحتوي على كليهما في جميع صفحات الموقع. ملف المقالات (الصفحة الرئيسية) index.phpهذا الملف يستخدم لعرض الصفحة الرئيسية للموقع، أو بصورة أدق صفحة المقالات (لانه يمكنك إستخدام صفحة ثابتة لرئيسية الموقع وعرض المقالات في صفحة اخرى غير الصفحة الرئيسية وهو ما يمكنك التحكم به من خلال إعدادات القراءة في لوحة تحكم ووردبريس). مهمة هذا الملف هو عرض جميع المقالات في الموقع وبالتالي فإن الحلقة Loop في هذا الملف تجلب بصورة تلقائية جميع المقالات، وما يمكن ملاحظته في هذا الملف: يتم تضمين ترويسة الموقع (ملف الترويسة) من خلال إستخدام الدالة get_header كما أسلفنا.يتم إستخدام الدالة get_template_part مع الدالة get_post_format لتضمين ملف الcontent المناسب من داخل مجلد template-parts على حسب بنية المقال بالصورة التالية:get_template_part( 'template-parts/content', get_post_format() );فمثلا عندما تكون بنية المقال إقتباس quote سيتم تحميل ملف content-quote.php من داخل مجلد template-part، وهذا في حالة كان الملف content-quote.php موجودا وإذا لم يكن موجود فإن الدالة get_template_part تقوم تلقائيا بتضمين الملف content.php وهذه إحدى مميزات الدالة get_template_part. وكما سترى فإن هذه الدالة مستخدمة في عدد من ملفات القالب لجلب الأجزاء الموجودة في مجلد template-parts وبهذه الطريقة تصبح ملفات القالب أكثر تنظيما وتصبح الشيفرة البرمجية مقرؤة بصورة أكبر. ملف المقال المفرد single.phpكما هو معلوم لديك فإن ووردبريس يستخدم هذا الملف لعرض المقال المفرد وقد يستخدمه أيضا لعرض صفحة التفاصيل لأنواع المقالات المخصصة الأخرى في بعض الأحيان وفق هرمية القالب التي أشرنا إليها سابقا. ما يمكن ملاحظته في هذا القالب هو إستخدام الدالة get_template_part داخل الحلقة لجلب ملف تفاصيل المقال المفرد وبعد ذلك يتم إستدعاء الدالة the_post_navigation التي تم تعريفها في ملف template-tags.php لعرض المقال السابق والمقال التالي لهذا المقال في حالة وجودهما. بعد ذلك يتم التحقق من إذا ما كانت التعليقات مفتوحة لهذا المقال وفي هذه الحالة يتم جلب ملف comments.php والذي يحتوي نموذج التعليقات وأيضا يعرض التعليقات السابقة في حالة وجودها. وأخيرا يتم جلب ملف sidebar.php من خلال الدالة get_sidebar التي يوفرها ووردبريس، وكذلك يتم جلب ملف الفوتر. ملف الصفحة المفردة page.phpهذا الملف شبه مطابق للملف السابق، فقط داخل الحلقة يتم جلب ملف content-page.php بدلا عن ملف content-single.php. ملف الشريط الجانبي sidebar.phpفي هذا الملف يتم التحقق من وجود أي ودجات نشطة في الشريط الجانبي Sidebar المسمى sidebar-1 وذلك من خلال الدالة is_active_sidebar وفي حالة لم يكن هنالك ودجات نشطة يتم الخروج من الملف وإلا سيتم جلب محتويات الشريط الجاني من خلال الدالة dynamic_sidebar والتي تستقبل معرف الشريط الجانبي لجلبه. ملف الأرشيف archive.phpكما هو معلوم وفق هرمية القالب يتم إستخدام هذا الملف لعرض أرشيف التصنيفات والشهور والكاتب وعموما أي أرشيف إذا لم يكن لديه ملف أرشيف خاص به (مثلا في حالة وجود ملف category.php فحينها سيتم إستخدامه لعرض أرشيف التصنيف ولا يتم إستخدام ملف archive.php لأرشيف التصنيف). نلاحظ أنه في البداية وقبل الدخول الى الحلقة يتم إستخدام الدالتين the_archive_title و the_archive_description لجلب عنوان ووصف الأرشيف على التوالي، وبعد ذلك تجد بقية الملف مشابه لملفات single.php وpage.php طبعا مع إختلاف الملف content الذي يتم جلبه حيث يتم جلبه هاهنا وفق تنسيق المقال كما في ملف index.php. ونلاحظ فرق أخر في هذا الملف وهو أنه في حالة لم يكن هنالك محتويات في الأرشيف الحالي يتم جلب ملف content-none.php والذي في هذه الحالة يخرج رسالة للزائر تفيده بأنه لا يمكن إيجاد المحتوى المطلوب بالإضافة لنموذج البحث. وقبل ذلك وبعد نهاية الحلقة يتم إستدعاء الدالة the_posts_navigation التي تم تعريفها في ملف template-tags.php والتي تعرض روابط التنقل بين المقالات (الصفحة السابقة والصفحة التالية). ملف البحث search.phpفي بداية هذا الملف وقبل الدخول الى الحلقة يتم عرض عنوان يشير الى كلمة البحث (يمكن ان يترجم إلى نتائج البحث عن: "كلمات البحث") حيث يتم الوصول الى الكلمة التي بحث عنها المستخدم من خلال الدالة get_search_query التي يوفرها ووردبريس. بعد ذلك يتم عرض نتائج البحث في حالة وجودها من خلال إستدعاء ملف content-search.php وفي حالة عدم وجود نتائج مطابقة يتم إستدعاء الملف content-none.php والذي في هذه الحالة يعرض رسالة للزائر تفيده بأنه لم يتم إيجاد نتائج مطابقة وتقترح عليه إستخدام كلمات أخرى في البحث ويرفق له نموذج البحث. ملف الخطأ 404.phpيستخدم هذا الملف لعرض صفحة الخطأ المشهورة 404 وفي قالب underscores تم برمجته بحيث يقدم فائدة كبيرة للمستخدم حيث أنه بالإضافة لعنوان الصفحة ورسالة الخطأ يقوم بعرض نموذج البحث، وودجت أخر المقالات، والتصنيفات الأكثر إستخداما في المدونة، والأرشيف الشهري للمدونة، بالإضافة لسحابة الوسوم. ملف التعليقات comments.phpيستخدم هذا الملف لعرض التعليقات السابقة ونموذج التعليقات لكل من الصفحات والمقالات في حالة كانت التعليقات مفتوحة للمقال المعين. وربما نخصص لطريقة برمجة ملف التعليقات في ووردبريس مقالا مفردا لنتعرف على أهم الدوال التي يوفرها ووردبريس للتعليفات وطريقة إستخدامها، وحاليا يمكنك إستخدام هذا الملف كما هو في قالبك مع التعديل على التنسيق بما يتناسب مع تصميم القالب. ملفات التنسيق في قالب Undescoresلا يجبرك قالب Underscores على إستخدام ملفات التنسيق الموجودة فيه ويمكنك بكل بساطة مسحها أو مسح محتوياتها والبدء بكاتبة شيفراتك الخاصة، لكنه يوفر لك بعض الأمور الأساسية المهمة في تنسيق قوالب ووردبريس لتبني عليها كما سنرى. ملف style.cssكما هو معلوم فإن هذا الملف من الملفات الأساسية التي لا بد من وجودها في أي قالب ووردبريس ليعمل حيث يستخدم ووردبريس الترويسة الموجودة في هذا القالب والمكتوبة كتعليق ليأخذ منها معلومات القالب التي سيعرضها في لوحة التحكم لذلك لابد من إرفاق هذا القالب وكتابة هذه المعلومات في أي قالب ووردبريس، لكنك غير مجبر على كتابة تنسيقات القالب في هذا الملف ولا ربطه في ترويسة الموقع (من خلال إستخدام الدالة wp_enqueue_style كما أشرنا لذلك في المقال السابق) ولكن يحسن بك أن تستخدمه ما دام ليس هنالك مانع يمنعك من إستخدامه. بعد ترويسة هذا الملف تلاحظ وجود تعليق طويل هو عبارة عن جدول لمحتويات الملف، وهذه من الأشياء التي يمكنك تعلمها من قالب Underscores ليسهل فهم ملف التنسيق والوصول لأي جزء فيه فيما بعد بسرعة أكبر. وكما هو ملاحظ في جدول المحتويات فإن هذا الملف يحتوي مسبقا على الأمور الأساسية في تنسيقات CSS حيث يحتوي على Normalize لعناصر html وتنسيقات الخطوط والعناصر والنماذج وهذه الثلاثة الأخيرة يمكنك تعديلها بما يتناسب معك. بعد ذلك يحتوي على تنسيقات التنقل وتنقسم الى الروابط والقائمة، وفي تنسيقات القائمة ستجد بعد الأصناف المعدة مسبقا لتضيف عليها تنسيقات القائمة (وفق الصنف الذي تم كتابته في القائمة في ملف header.php)وبعض التنسيقات الأساسية التي تجدها مكتوبة بل إن القائمة معدة مسبقا للعمل في الأجهزة الصغيرة من خلال توفير تنسيقات مختلفة لهذه الأجهزة من خلال Media queries وهنالك أيضا ملف navigation.js المسئول عن إضافة وحذف بعض الأصناف على حسب عرض الجهاز المستخدم لتصفح الموقع وهذا يعني أن القائمة شبه جاهزة لديك وعليك فقط إضافة القليل من الشيفرات لتتناسب مع تنسيق القالب الخاص بك. بعد ذلك يحتوي الملف على تنسيقات خاصة بإمكانية الوصول والمحازاة وتنظيف الfloat، وبعدها بعض التنسيقات الخاصة بالودجات. وبعدها تسنيقات المحتويات (الصفحات والمقالات والتعليقات) وتلاخظ فيها إستخدام بعض الأصناف التي يولدها ووردبريس سواء في وسم body أو وسم المقال نفسه من خلال الدالتين body_class و post_class على التوالي، وبعدها تنسيقات خاصة بـ Infinite scroll في إضافة Jetpack. بعد ذلك هنالك التنسيقات الخاصة بالميديا وهذه التنسيقات مفيدة لمعرفة الأصناف التي يولدها ووردبريس مع الميديا مثل Caption الخاص بالصور والمعرض Gallery. ملف التنسيق لللغات من اليمين للشمال rtl.cssفي حالة كانت لغة العرض للموقع تتبع التنسيق من اليمين للشمال مثل اللغة العربية يقوم ووردبريس تلقائيا بربط الملف المسمى rtl.css في ترويسة الموقع في حالة وجوده في القالب، بالتالي يحسن وضع التنسيقات المختصة بهذه اللغات في هذا الملف حيث أن ووردبريس يقوم بربطه بعد ملف style.css وهذا يعني أن التنسيقات في هذا الملف سيكون لها أولوية للتنسيقات المشابهة في ملف style.css كما هو معلوم في لغة CSS. خاتمةكما تلاحظ فإن ملفات العرض (ملفات القالب) في قوالب ووردبريس تعتمد بصورة كبيرة على فهم هرمية القالب والحلقة وكذلك معرفة وسوم القالب التي يوفرها ووردبريس ومنها الوسوم الشرطية وقد تحتاج أيضا لإنشاء دوال أخرى لإستخدامها ورأينا أنه من المهم أيضا معرفة الأصناف التي يولدها ووردبريس لتستطيع الإستفادة منها في تنسيق القالب وفق الصفحة والمقال وتنسيق طريقة عرض الميديا. بهذا نكون وصلنا لختام هذه السلسلة التي ألقينا فيها نظرة سريعة على ملفات قالب Underscores بشيء من التفصيل وتعلمنا منه بعض الأمور المفيدة في تطوير قوالب وودربريس.
  13. في الدرس السابق من هذه السلسلة، تعرفنا على بعض مميزات قالب s_ وإستعرضنا مجلدات القالب وبعض الملفات الأساسية، وفي هذا الدرس سنكمل الإطلاع على الملفات الأساسية وسنحاول شرح مهمة بعض الشيفرات والدوال البرمجية بالإضافة الى الإشارة الى بعض الممارسات الجيدة في تطوير قوالب ووردبريس والتي يمكن أن نتعلمها من قالب underscores. ملفات الوظائف والأحداث والمفلتراتنقصد بهذه الملفات ملف functions.php والملفات التي يتم تضمينها من خلاله، حيث تحتوي هذه الملفات في قالب underscores على بعض الشيفرات المهمة التي يتكرر استخدامها في كل قالب ووردبريس تقريبا (أحيانا مع تعديلات بسيطة عليها) وبالطبع يمكنك إضافة المزيد من الشيفرات أو التخلي عن بعضها على حسب القالب الذي تقوم بتطويره. ملف functions.phpالدالة hsb_setupكما تلاحظ فإن أول الدوال الموجودة في ملف functions.php دالة تأخذ الاسم اللطيف للقالب متبوعا بكلمة setup وبالمناسبة هذه من الممارسات المهمة جدا في تطوير قوالب وإضافات ووردبريس أي أن تقوم ببدء تسمية الدوال الخاصة بالقالب بكلمة مميزة (عادة الاسم اللطيف للقالب) حتى لا تختلط مع اسم أحد الدوال الموجودة في ووردبريس أو أي من الإضافات في الموقع. في حالتنا هنا سنستخدم hsb كاسم لطيف للقالب وهو اختصار لكلمة Hsoub بالتالي فإن اسم الدالة سيكون كالاتي function hsb_setup()قبل أن ندخل في شرح مهمة هذه الدالة قد تكون لاحظت السطر البرمجي السابق لها (تجاهل التعليقات البرمجية) والذي هو عبارة عن عبارة شرطية if statement تأخذ الصورة if ( ! function_exists( 'hsb_setup' ) ) : ويتم إنهاء هذه العبارة الشرطية بعد قوس إغلاق الدالة مباشرة، وهذه أيضا من الممارسات الجيدة حيث أنه بهذه الطريقة يتم التأكد أولا من وجود تعريف الدالة في مكان أخر وفي حالة وجودها يتم تجاهل هذا التعريف وهذا بالطبع يتيح لك إعادة تعريف الدالة من خلال القالب الأبن أو الإضافات وهذا يزيد من دعم القالب لخاصية القالب الإبن. الان لنعود لمهمة هذه الدالة ويمكن أن نقول أنها مسؤولة من ثلاثة أمور: تحميل دعم القالب للترجمة من خلال استخدام الدالة load_theme_textdomain.تسجيل قوائم القالب والتي ستظهر للمستخدم عند إنشائه قائمة جديدة في مكان مواضع القالب ويتم تسجيلها من خلال الدالة register_nav_menus، ويأتي قالب underscores مسجلا لقائمة واحدة فقط وهي القائمة الرئيسية، ويمكنك بالطبع إضافة المزيد على حسب عدد القوائم في قالبك.تعريف خصائص ووردبريس التي يدعمها القالب، أو ببساطة إضافة خصائص القالب من خلال الدالة add_theme_support ومنها على سبيل المثال الصورة البارزة وخصائص أخرى يمكنك الإطلاع عليها في صفحة توثيق الدالة.كما تلاحظ يتم إضافة هذه الدالة الى الحدث after_setup_theme وهو الحدث المناسب معها، وهذه ميزة أخرى يمنحك لها قالب underscores وهي التعرف على الأحداث المناسبة لمختلف الوظائف التي تحتاجها في القالب. الدالة hsb_widgets_initهذه الدالة مسؤولة عن تسجيل مواضع الودجات في القالب، فمثلا قد يحتوي القالب على موضوع واحد وهو موضع الشريط الجانبي الأيسر وقد يحتوي بالإضافة الى ذلك الى مواضع للودجات في الفوتر أو غيره مثلا، وكل هذه المواضع يتم تسجيلها داخل هذه الدالة من خلال الدالة register_sidebar، وبعد ذلك يتم إضافة هذه الدالة الى الحدث widgets_init. الدالة hsb_scriptsوتستخدم هذه الدالة لصف ملفات CSS وملفات الجافا اسكربت ويمكنك معرفة المزيد عن هذا الامر من خلال هذا المقال. كما تلاحظ في نهاية هذا الملف يتم تضمين خمسة ملفات تحتوي على بعض الوظائف ومقسمة على حسب مهامها وهي ما سنتطلع علي تفاصيله في الفقرات القادمة ملف custom-header.phpيوفر لك ميزة ووردبريس تمكين المستخدم من صورة ترويسة القالب من لوحة التحكم وتجدها تحت قائمة المظهر في حالة كان القالب يدعمها، وقالب s_ يأتي افتراضيا داعم لهذه الخاصية حيث يمكنك استدعاء صورة الترويسة التي اختارها المستخدم لعرضها في أي مكان في القالب من خلال هذه الشيفرة (الموجودة في التعليقات أعلى هذا الملف) <?php if ( get_header_image() ) : ?> <a href="<?php echo esc_url( home_url( '/' ) ); ?>" rel="home"> <img src="<?php header_image(); ?>" width="<?php echo esc_attr( get_custom_header()->width ); ?>" height="<?php echo esc_attr( get_custom_header()->height ); ?>" alt=""> </a> <?php endif; // End header image check. ?> ويحتوي هذا الملف على الدوال اللازمة لجعل القالب يدعم الترويسة وقد يفيدك الاطلاع على هذه الدوال وطريقة عملها لتطبيق هذه الميزة كما يمكنك تعديل بعض القيم الافتراضية في حالة أردت ذلك بالإضافة لإضافة التنسيق الخاص بصورة الترويسة وكذلك عنوان ووصف المدونة. ملف template-tags.phpوسوم القالب Template Tags أو يمكن تسميتها بدوال القالب هي مجموعة من الدوال يوفرها ووردبريس لمطوري القوالب ويتم إستخدامها عادة في ملفات القالب لعرض معلومات الموقع والمقالات مثل عنوان المقال و إسم المقال وكاتب المقال ورابط الموقع وغيرها من البيانات التي تحتاج عادة لعرضها في القالب وهذه الدوال تتيح لك عرض مثل البيانات فقط بكتابة إسم الدالة، فبدلا عن الإتصال بقاعدة البيانات وجلب البيانات التي تريدها فإن الدالة (وسم القالب) تقوم بهذه العمليات نيابة عنك وترجع لك المحتويات. هذا الملف يوفر لك مجموعة إضافية من دوال القالب التي تعرض بعض البيانات التي تحتاجها عادة في القالب، وبدلا من كتابة الشيفرة البرمجية لجلب هذه البيانات بداخل ملفات القالب يتم كتابتها في هذه الدوال وتستطيع مناداة هذه الدوال في ملفات القالب وبالتالي تحافظ على شيفرة برمجية نظيفة ومقروءة في ملفات القالب بالإضافة لإمكانية جلب البيانات في اكثر من ملف فقط بإستدعاء هذه الدالة. من الدوال الموجودة في هذا الملف الدالة the_posts_navigation وتستخدم لعرض صفحة المقالات السابقة وصفحة المقالات التالية في صفحة الأرشيف (صفحة عرض المقالات، وصفحة التصنيف وغيرها من الصفحات التي تعرض مجموعة من المقالات).الدالة the_post_navigation وتستخدم لعرض المقال السابق والتالي للمقال الحالي (في صفحة المقال الحالي).الدالة hsb_posted_on تستخدم لعرض تاريخ وكاتب المقال.الدالة the_archive_title تستخدم لعرض عنوان الأرشيف إعتمادا على نوعه فمثلا تعرض عنوان التصنيف بصورة مختلفة عن عنوان الوسم وغيرها من الأرشيفات.الدالة the_archive_description لعرض وصف الأرشيف.الدالة hsb_categorized_blog للتأكد من أن الموقع يحتوي على أكثر من تصنيف للمقالات حيث ترجع true في هذه الحالة.الدالة hsb_category_transient_flusher وتستخدم لمسح الtransient الخاص بالتصنيف والذي يستخدم عادة لزيادة سرعة الموقع.بالطبع يمكنك إضافة المزيد من الدوال في هذا الملف وتذكر أنه أنسب الأماكن لكتابة الدوال التي تحتاج لإستخدامها في ملفات القالب لعرض بيانات معينة، فمثلا يمكنك إنشاء دالة لعرض عدد مشاهدات المقال وسيكون هذا الملف هو الأنسب لكتابتها. ملف extras.phpهذا الملف مشابه للسابق ويختلف عنه أن الدوال في هذا الملف لا يتم إستخدامها عادة في ملفات القالب بل تقوم بعمل مهام لا تعتمد على ملفات القالب، وعموما يمكن أن نقول أن الدوال في هذا الملف هي عادة الدوال التي يتم إضافتها الى مفلترات Filters أو أحداث Actions معينة وليست الدوال التي يتم إستداعائها داخل القالب. من الدوال في هذا الملفK، الدالة hsb_body_classes والتي تستخدم للتعديل على المتغير الذي يحتوي على CSS Classes الخاص بوسم body للموقع من خلال مفلتره body_class، وهي في هنا تضيف الClass المسمى group-blog في حالة كانت المدونة تحتوي على أكثر من كاتب. الدالة hsb_wp_title والتي تقوم بالتعديل على إسم الموقع (الذي يظهر في وسم title بداخل وسم head في الموقع) من خلال فلتره wptitle ويتم التعديل على حسب الصفحة المعروضة (حيث يختلف عنوان الموقع في الصفحة الرئيسية من العنوان في صفحة عرض المقال). الدالة hsb_render_title وهي المسؤولة عن عرض عنوان الموقع داخل وسم head وذلك من خلال إضافتها للحدث wphead. وكما هو الحال بنسبة لملف template-tags.php يمكنك إضافة المزيد من الدوال لهذا الملف كما تريد. ملف jetpack.phpيستخدم هذا الملف لإضافة توافقية القالب مع إضافة Jetpack المشهورة وبالتحديد مع خاصية Infinite Scroll التي توفرها هذه الإضافة حيث وذلك من خلال دالتين الأولى وهي hsb_jetpack_setup تقوم بإخبار ووردبريس أن الموقع متوافق مع خاصية infinite-scroll بإستخدام الدالة add_theme_support، والدالة الثانية هي hsb_infinite_scroll_render وهي المسؤولة عن طريقة عرض المقالات التي سيتم تحميلها من خلال هذه الخاصية. ملف customizer.phpهذا الملف يستخدم لإضافة دعم القالب للمخصص Theme Customizer في تعديل إسم ووصف الموقع بحيث تظهر مباشرة في العرض الحي Live Preview بعد التعديل عندما يتم التعديل على المخصص وهذه هي الطريقة التي يعمل بها المخصص، وسنتناول طريقة عمل المخصص وكيفية جعل القالب داعم له وكيفية إضافة بعض الخيارات في المخصص في سلسلة مقالات اخرى إن شاء الله. خاتمة بهذا المقال نكون قد أكملنا الحديث عن ما يتعلق بالوظائف العامة Functions التي يوفرها القالب وطريقة ترتيبها وتوزيعها بين الملفات، وتبقى لنا الكلام عن ملفات القالب المسؤولة من عرض محتوى الموقع للمستخدم وطريقة تنسيقه وترتيبها وهو ما سنتكم عنه في المقال القادم إن شاء الله.
  14. في الدرس السابق من هذه السلسلة بدأنا بتطوير إضافة عداد المشاهدات حيث قمنا بإضافة عدد المشاهدات لكل مقال ومتابعته كما قمنا بتوفير شيفرة مختصرة Shortcode لعرض عدد مشاهدات أي مقال، وتبقى لنا أن نبرمج ويدجت لعرض المقالات الأكثر مشاهدة وهذا ما سنقوم به في هذا الدرس بالإضافة لبعض الإقتراحات لتطوير الإضافة في نسخها القادمة ونختم هذا الدرس والذي هو الأخير في هذه السلسلة باستعرض بعض الأدوات المفيدة لمطوري إضافات ووردبريس. برمجة ويدجت المقالات الأكثر مشاهدةلبرمجة ودجت جديد في ووردبريس تقوم ببساطة بإنشاء صنف class جديد يرث الصنف الأساسي للويدجات الذي يوفره ووردبريس حيث تعتمد هذه الجزئية على البرمجة الكائنية ولكن لا تقلق إن كان هذا المصطلح لم يمر عليك من قبل فإن التطبيق لا يحتاج منا سوى كتابة أربعة دوال: الأولى هي الدالة الأساسية للويدجت والتي نعرف فيها اسم ووصف الودجت. والثانية لعرض خيارات الويدجت في لوحة تحكم ووردبريس (في القائمة المظهر – الودجات) .والثالثة لحفظ خيارات الويدجت عندما يقوم المستخدم بتعديلها.والرابعة هي ما سيتم عرضه في واجهة الموقع (الشريط الجانبي) عند إستخدام الويدجت. وإذا أردت أن تتعمق أكثر في برمجة الويدجات يمكنك مراجعة مقال كيف تبني ودجت لووردبريس. ملف widget.phpبالطبع سنكتب جميع الشيفرات المتعلقة ببرمجة الويدجت في هذا الملف، ولنبدأ بكتابة صنف الودجت وفيه الدوال الأربعة السابقة بدون تفصيل كالآتي: class HA_Views_Widget extends WP_Widget { // البيانات الأساسية للودجت (مثل اسم ووصف الودجت) public function __construct() { } // عرض خيارات الويدجت في لوحة تحكم ووردبريس public function form( $instance ) { } // لحفظ خيارات الويدجت عندما يقوم المستخدم بتعديلها public function update( $new_instance, $old_instance ) { } // ما سيتم عرضه في واجهة الموقع (المقالات الأكثر مشاهدة) public function widget($args, $instance ) { } }الأن سنقوم بإعلام ووردبريس أنه لدينا ودجت جديد من خلال تسجيله كالآتي: // تسجيل الويدجت من خلال إضافة الدالة أدناه للحدث widget_init add_action( 'widgets_init', 'ha_widget_init' ); function ha_widget() { register_widget( 'HA_Views_Widget' ); }لاحظ أن الدالة ()register_widget تستقبل مُعاملًا واحدًا وهو اسم صنف الودجت الذي نود تسجيله وهو في حالتنا هذه HA_Views_Widget كما اخترناه في الأعلى. بعد ذلك لنقم بكتابة تفاصيل الدوال التي عرفناها أعلاه. الدالة constructفي هذه الدالة نقوم ببناء الودجت من خلال تمرير البيانات الأساسية للودجت وهي الاسم والوصف بالإضافة للمعرف وكذلك اسم صنف CSS الذي سيقوم ووردبريس بإضافة للودجت، ويتم ذلك بهذه الطريقة: $widget_details = array( 'classname' => 'ha_views_widget', 'description' => 'ودجت لعرض المقالات الأكثر مشاهدة' ); parent::__construct( 'ha_views_widget', 'المقالات الأكثر مشاهدة', $widget_details );الان ستجد أن الودجت ظهرت في لوحة تحكم ووردبريس بالاسم والوصف اعلاه. الدالة formنود أن نضيف للمستخدم خيار لاختيار عدد المقالات الأكثر مشاهدة التي يود عرضها في واجهة الموقع وخيار آخر لاختيار عنوان الودجت الذي سيظهر أعلى المقالات، وهذا ما ستقوم به هذه الدالة فهي المسؤولة عن إنشاء النموذج form الذي سيظهر للمستخدم في لوحة التحكم، وهذه هي الصورة النّهائية لها: public function form( $instance ) { $instance = wp_parse_args( (array) $instance, array( 'title' => '', 'count' => '' ) ); $title = strip_tags($instance['title']); $count = $instance['count']; ?> <p><label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('العنوان:'); ?></label> <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo esc_attr($title); ?>" /></p> <p><label for="<?php echo $this->get_field_id('count'); ?>"><?php _e('عدد المقالات:'); ?></label> <input class="widefat" id="<?php echo $this->get_field_id('count'); ?>" name="<?php echo $this->get_field_name('count'); ?>" type="text" value="<?php echo $count; ?>" /></p> <?php }الدّالة updateهذه الدالة مهمتها بسيطة جدا وهي حفظ خيارات المستخدم عندما يقوم بتعديلها من خلال الضغط على زر الحفظ، وهي ببساطة تقوم بإرجاع القيم الجديدة للخيارات بالصورة التالية: public function update( $new_instance, $old_instance ) { return $new_instance; }الدالة widgetسنقوم من خلال هذه الدالة بعرض اكثر المقالات مشاهدة وذلك من خلال استخدام حلقة ووردبريس لجلب المقالات وذلك باستخدام صنف WP_Query والذي يمكننا من تحديد المقالات التي نود جلبها وفي حالتنا هذه نود جلب أعلى المقالات مشاهدة اعتمادًا على قيمة الميتا post_meta التي استخدمناها سابقا لحفظ عدد المقالات، أي أننا نود جلب المقالات مرتبة على حسب قيمة الميتا ha_post_views_count ولحسن الحظ يوفر صنف WP_Query طريقة سهلة لإنشاء مثل هذا الاستعلام. وهذه هي صورة الاستعلام: $count = ( ! empty( $instance['count'] ) ) ? $instance['count'] : 5 ; $query_args = array( 'meta_key' => 'ha_post_views_count', 'orderby' => 'meta_value_num', 'posts_per_page' => $count ) $query = new WP_Query($query_args);حيث أننا باختيار قيمة orderby لتكون على حسب meta_value_num أي على حسب قيمة الميتا وهي قيمة عددية، وكذلك قمنا باختيار عدد المقالات المعروض ليساوي count$ وهي القيمة التي سيدخلها المستخدم والتي نستطيع التوصل إليها من خلال المتغير instance$ الذي يتم تمريره للدالة والذي من خلاله يمكنك الوصول للبيانات التي قام المستخدم بإدخالها في لوحة التحكم. في حالة لم يقم المستخدم باختيار عدد المقالات المعروضة سيتم عرض 5 مقالات. الآن لم يتبقَ لنا سوى إنشاء الحلقة وعرض عناوين وروابط المقالات وكذلك عنوان الودجت لتصبح الصورة النهائية لهذه الدالة كالاتي: public function widget($args, $instance ) { $title = ( ! empty( $instance['title'] ) ) ? $instance['title'] : 'المقالات الأكثر مشاهدة' ; $count = ( ! empty( $instance['count'] ) ) ? $instance['count'] : 5 ; $query_args = array( 'meta_key' => 'ha_post_views_count', 'orderby' => 'meta_value_num', 'posts_per_page' => $count ); $query = new WP_Query($query_args); if($query->have_posts()): ?> <?php echo $args['before_widget']; ?> <?php if ( $title ) { echo $args['before_title'] . $title . $args['after_title']; } ?> <ul> <?php while ( $query->have_posts() ) : $query->the_post(); ?> <li> <a href="<?php the_permalink(); ?>"><?php get_the_title() ? the_title() : the_ID(); ?></a> </li> <?php endwhile; ?> </ul> <?php echo $args['after_widget']; ?> <?php wp_reset_postdata(); endif; }وبهذا نكون قد أكملنا برمجة الودجت ولا تنس إضافة بعض التنسيقات للودجت في ملف widget.css والذي قمنا بصفه سابقا. اقتراحات لتطوير الإضافةكانت هذه النسخة الأولى من الإضافة بالتالي تحتوي على المميزات الأساسية ويمكنك إضافة المزيد من المميزات في النسخ القادمة وسنقترح عليك بعض التطوير لتتدرب عليها، وهي: إضافة خيار في الشيفرة المختصرة shortcode لإدخال معرف المقال الذي تود عرض عدد مشاهداته، فربما يود المستخدم عرض عدد مشاهدات مقال ما داخل مقال آخر.إضافة المزيد من الخيارات للودجت مثل اختيار المدة الزمنية للمقالات المعروضة، مثلا أشهر المقالات خلال هذا الأسبوع.التعديل على ما يعرضه الويدجت وكذلك تنسيقه، كأن تعرض مثلا صور بارزة للمقالات الأكثر مشاهدة.يمكنك تحميل أو نسخ الإضافة من هذا الرابط. أدوات مفيدة لمطوري إضافات ووردبريسهنالك بعض المصادر والمواقع والأدوات التي توفر لك كثيرًا من الجهد والوقت عند برمجة إضافات ووردبريس خصوصا مع شهرة ووردبريس فهذا يعني أن هنالك العديد من الأسئلة التي قد تخطر ببالك قد تم الإجابة عنها مسبقا وبعض الأشياء التي تود برمجتها ربما سبقك بها بعض المطورين وقاموا بإتاحتها لمجتمع المطورين ولا ننسى المصادر الرائعة التي لا غنى لك عنها في كثير من الأحيان، وإليك بعض هذه الأدوات. مكتبات وفئات Classes جاهزة1- WordPress Plugin Boilerplateوهي عبارة عن نموذج جاهز أو أساس يمكنك استخدامه لبناء إضافتك، وما يميزها أنه تم بناءها من قبل المطور المشهور Tom McFarlin كما أنه تم بنائها بأسلوب برمجة الكائنات Object Oriented Programming بالتّالي تعتبر بالفعل أساسًا جيّدًا لإضافة قابلة للتطوير. فوق ذلك هنالك مولد يمكنك استخدامه لإنشاء ملفات إضافتك بالاعتماد على هذا النموذج. 2- CMB2وهذه عبارة عن مكتبة جاهزة للتعامل مع الحقول المُخصصة Custom fields لأنواع المقالات المختلفة Post Types وكذلك الحقول والبيانات الخاصة بالمستخدمين User Meta كما يمكنك استخدامها لإنشاء صفحات الخيارات Options Page ويمكنك دمجها في مشروعك بسهولة. تدعم هذه المكتبة عددًا كبيرًا جدًا من الحقول المتقدمة ويمكنك إضافة أنواع جديدة بسهولة حيث توفر مجموعة كبيرة من الخطافات Hooks التي تسهل من عملية التعديل عليها وزيادة مميزاتها بدون لمس الشيفرات الأساسية. ولا ننسى أن نذكر أن هذه المكتبة والنسخة الأولى منها CMB لقيت قبول ورواج كبير بين مطوري ووردبريس. 3- Settings API Classفي بعض الأحيان يكون التعامل مع Settings API بطيئًا وربما مُتعبًا بعض الشّيء، في مثل هذه الحالات يمكنك استخدام هذه الصّنف الجاهز التي تُسهّل التّعامل مع هذه الواجهة البرمجية، خصوصا إذا لم ترد أن تُثقل مشروعك بمكتبات كبيرة. إضافات للمطورين1- إضافة Developerهذه الإضافة تساعدك في عملية التطوير وبعد تنصيب الإضافة تعرض عليك اختيار ما تقوم بتطويره (إضافة، قالب) وبعدها تعرض عليك مجموعة من الإضافات التي تعمل معها لتنصيبها كما موضح في الصورة: وإليك بعض أهم هذه الإضافات: Debug Bar وكما يظهر من اسمها حيث تعرض قائمة لعمل Debug للاستعلامات Query والـ Cache ومجموعة أخرى من المعلومات المفيدة لعمل Debug.Rewrite Rules Inspector وهي عبارة عن أداة لتحليل قواعد إعادة كتابة الروابط links rewrite rules.log Viewer توفر لك طريقة سهلة لعرض ملفات Log عن طريق لوحة تحكم ووردبريس مباشرة.2- إضافة Query Monitorتقوم هذه الإضافة بعرض معلومات متعلقة باستعلامات قاعدة البيانات مثل الأداء Performance للاستعلامات وكذلك الخطافات Hooks وغيرها من المعلومات المفيدة التي تساعدك في تتبع الأخطاء وزيادة كفاءة وسرعة استعلامات قاعدة البيانات. مواقع ومصادر1- التّوثيق الرّسمي لووردبريس WordPress Codexببساطة إذا أردت احتراف برمجة ووردبريس فليكن هذا مصدرك الأول. يحتوي على توثيق للدوال والأصناف والخطافات التي يوفرها ووردبريس كما يحتوي على بعض المصادر والمراجع بل وحتى على كُتب للمطورين. 2- القسم الخاص بووردبريس في موقع StackExchangeفي كثير من الأحيان تقابلك بعض المشاكل التي قد لا تجد لها إجابة في المصادر المعروفة وعندها ربما تحتاج الى طرح هذه المشكلة على المختصين وهذا الموقع من أنسب المواقع لطرح الأسئلة المتعلقة بووردبريس. 3- مجموعة Advanced WordPress على فيس بوكنعم هذه مجموعة على فيس بوك لكنها مختلفة نوعا ما فهي تجمع مجموعة كبيرة من محترفي ووردبريس ومطوري بعض الإضافات الشهيرة مثل Joost de Valk مطور إضافة WordPress SEO by Yoast المشهورة. 4- رابطة مطوري ووردبريس (باللغة العربية)على غرار المجموعة السابقة هذه مجموعة أخرى تجمع عدد كبير من مستخدمي ومطوري ووردبريس العرب، بالتالي هي مكان جيد لتبادل الأفكار والآراء وحتى الأسئلة. 5- موقع ManageWP.orgهذا الموقع يبقيك على إطلاع دائم على آخر المقالات المتعلقة بووردبريس من مختلف المواقع، حيث يمكن للأعضاء مشاركة المواضيع المتعلقة بووردبريس وتقييمها، لذلك يستحسن أن يكون هذا الموقع في مفضلتك للعودة إليه بصورة يومية. 6- موقع wpsnippمجموعة من الشيفرات الجاهزة لعمل أشياء مختلفة ربما تفيدك. 7- موقع WP-Snippetsشبيه بالموقع السابق.
  15. بعد أن تطرّقنا إلى أساسيات تطوير إضافات ووردبريس حان الوقت لنقوم بإنشاء إضافة لتطبيق بعض ما تعلمناه. وهذا ما سنقوم به في هذا الدرس والدرس الذي يليه من خلال إنشاء إضافة تقوم بإضافة مربع جانبي لعرض المقالات الأكثر مشاهدة في موقع ووردبريس مع إمكانية عرض عدد المشاهدات في كل مقالة. التخطيط للإضافةلنبدأ بتحديد الأمور التي ستقوم بها الإضافة: إحصاء عدد المشاهدات لكل مقال.توفير شيفرة مختصرة Shortcode لعرض عدد مشاهدات المقال في أي مكان.توفير ودجت Widget لعرض المقالات الأكثر مشاهدة.وذلك من خلال: الاستفادة من البيانات الإضافية للمقال Post Meta لإضافة حقل بيانات جديد للمقالات يستخدم في حفظ واسترجاع عدد المشاهدات.الاستفادة من Shortcode API التي يوفرها ووردبريس لإنشاء الشيفرة المختصرة.الاستفادة من Widget API التي يوفرها ووردبريس لإنشاء الودجت واستخدام صنف WP_Query للحصول على المقالات مرتبة على حسب عدد المشاهدات.برمجة الإضافةدعنا في البداية نقوم بالتخطيط لجميع الملفات والمجلدات التي سنقوم بإنشائها لبرمجة الإضافة. تركيبة الملفات والمجلداتلنبدأ أولا بإنشاء مجلد للإضافة يحمل الإسم: ha-views-widget وأظن أنه اختصار جيد لاسم الإضافة واستخدامنا في البداية الحرفين ha كاختصار ل Hsoub Academy :). وبالطبع سنضع هذا المجلد في مجلد إضافات ووردبريس (ونحن نفترض أنك قمت بتنصيب ووردبريس مسبقا) والموجود في المسار wp-content/plugins. بعد ذلك سنقوم بإنشاء ملف php بنفس اسم المجلد وهو ha-views-widget.php وهذا الملف هو الملف الأساسي للإضافة وسيحتوي على الترويسة التي بها معلومات الإضافة والتي تعرفنا عليه في الدرس الأول من هذه السلسلة وبالتالي سيحتوي على هذه الترويسة: /** * Plugin Name: Hsoub Views Widget * Plugin URI: http://academy.hsoub.com/ * Description: إضافة صغيرة تقوم بإضافة مربع جانبي لعرض المقالات الأكثر مشاهدة في موقع ووردبريس مع إمكانية عرض عدد المشاهدات في كل مقالة. * Version: 1.4.0 * Author: Adil Elsaeed * Author URI: http://adilelsaeed.com * Text Domain: ha-widgets * Domain Path: /lang/ * License: GPL2 */بالطبع يمكننا أن نكتب جميع شيفرات php الخاصة بالإضافة في هذا المجلد لكن هذه ليست فكرة جيدة خصوصا إذا أردنا إنشاء إضافة سهلة التطوير والمراجعة، لذلك سنخصص ملفًا لإنشاء ومتابعة عدد المشاهدات وليكن باسم views.php وملف آخر لإنشاء الودجت وليكن باسم widget.php (لاحظ أنه داخل مجلد الإضافة يمكنك تسمية الملفات بأي اسم بدون خوف من التعارض مع ملفات ووردبريس الأخرى)، كما أننا سنحتاج لملف آخر لإنشاء الشيفرة المختصرة وليكن باسم shortcode.php ويمكننا أن نضع هذه الملفات الثلاثة داخل مجلد باسم includes للمحافظة على المجلد الرئيسي للإضافة مرتبًا. وبالطبع ما دمنا سنكتب بعض شيفرات html فإننا سنحتاج لتنسيقها من خلال CSS وهذا يعني أننا نحتاج لملف لوضع شيفرات CSS هذه، لذلك سنقوم بإنشاء مجلد أخر باسم css وبداخله ملف widget.css. هذه كل الملفات والمجلدات التي سنحتاج إليها في هذه النسخة الأولى من الإضافة. الملف الأساسي للإضافةفي الملف الأساسي للإضافة سنقوم أولا بتعريف بعض الثوابت التي سنحتاج إليها لاحقا، حيث سنحتفظ بكل من مسار الإضافة ورابطها URL وكذلك النسخة الحالية للإضافة كثوابت بالصورة التالية: if ( !defined( 'SDG_PLUGIN_DIR' ) ) { define( 'HA_VIEWS_DIR', plugin_dir_path( __FILE__ ) ); } if ( !defined( 'HA_VIEWS_URL' ) ) { define( 'SDG_PLUGIN_URL', plugin_dir_url( __FILE__ ) ); } if ( !defined( 'HA_VIEWS_VER' ) ) { define( 'SDG_PLUGIN_VER', '1.1.0' ); }لاحظ أننا استخدمنا الدالتين plugin_dir_path و plugin_dir_url اللتين يوفرهما ووردبريس حيث تُرجعان مسار الإضافة ورابطها على التوالي. ثانيا سنقوم بتضمين ملفات php التي أنشأناها سابقا حتى ينفذ ووردبريس الشفرات الموجودة فيها ويتم تضمينها من خلال require_once كالآتي: // الملف المسؤول عن عدد المشاهدات require_once HA_VIEWS_DIR . 'includes/views.php'; // الملف المسؤول عن الويدجت require_once HA_VIEWS_DIR . 'includes/widget.php'; // الملف المسؤول عن الكود المختصر require_once HA_VIEWS_DIR . 'includes/shortcode.php';ثالثا وأخيرًا سنقوم بصف ملف الCSS الخاص بتنسيق الويدجت من خلال استخدام الحدث wp_enqueue_scripts ويمكنك معرفة المزيد حول التعامل مع ملفات CSS في ووردبريس بالإطلاع على مقال صف و تسجيل ملفات CSS في ووردبريس. وهذه هي الطريقة التي سنصف بها ملف widget.css: add_action('wp_enqueue_scripts', 'ha_scripts'); function ha_scripts(){ wp_enqueue_script( 'sdg-admin', HA_VIEWS_URL . 'css/widget.css', array(), HA_VIEWS_VER); }حفظ وتحديث عدد المشاهداتلننتقل الآن إلى ملف views.php حيث سنقوم بإضافة عداد المشاهدات لكل مقال من خلال بيانات الميتا الخاصة بالمقال post meta حيث سنقوم بإنشاء الدالة ha_set_post_views والتي تقوم بتحديث عدد المشاهدات للمقال عند زيارته ولنضمن تنفيذها عند كل مقال سنقوم بإضافتها للحدث wp_head والذي يتم تنفيذه في ترويسة Header كل صفحات الموقع. ويتم إضافة الدالة إلى هذا الحدث بالصورة التالية: add_action('wp_head', 'ha_set_post_views');أما بالنسبة للدالة نفسها فهذه هي صورتها: function ha_set_post_views() { // إذا لم يكن هذا مقال مفرد (صفحة أو مقال) لا تنفذ أي شيء if(!is_singular()){ return; } // الوصول إلى بيانات المقال الحالي global $post; $post_id = $post->ID; $count_key = 'ha_post_views_count'; // استرجاع العدد الحالي للمشاهدات $count = get_post_meta($post_id, $count_key, true); if($count==''){ // هذا يعني أنه لم يتم إنشاء الميتا الخاص بحفظ عدد المشاهدات حتى الان $count = 0; delete_post_meta($post_id, $count_key); add_post_meta($post_id, $count_key, '0'); // إنشاء الميتا الخاص بحفظ عدد المشاهدات }else{ // زيادة عدد المشاهدات بمقدار مشاهدة واحدة $count++; // حفظ الميتا التي حفظنا فيه عدد المشاهدات update_post_meta($post_id, $count_key, $count); } }لعل التعليقات تشرح الدالة بصورة واضحة لكن دعنا نوضح الأمور أكثر، قمنا في هذه الدالة أولا باستخدام الدالة is_singular والتي تتحقق إن كان المعروض حاليا صفحة مقال مفرد (مقال، صفحة، مقال مخصص) أم لا (صفحة تصنيف مثلا أو أرشيف أو غيرهما) وفي حالة لم يكن المقال مفردًا يتوقف تنفيذ الدالة لأن مهمتها تحديث عدد المشاهدات للمقالات والصفحات والمقالات المخصصة فقط وليس بقية صفحات الموقع (الأرشيفات أو التصنيفات أو غيرها). ثانيا قمنا باستخدام المتغير العام (global) الذي يوفره ووردبريس وهو post$ والذي يحفظ فيه بيانات المقال الحالي (الذي يتم عرضه) حتى نحصل على معرف المقال الحالي من أجل استخدامه في تحديث عدد مشاهداته. ثالثا قمنا باستخدام الدوال update_post_meta، get_post_meta، add_post_meta و delete_post_meta والتي تمكننا من إضافة ميتا مخصصة للمقال واسترجاعها وحذفها وتحديثها على التوالي. وكما تلاحظ قمنا بالتأكد من أن عدد المشاهدات لا يساوي قيمة خالية (غير موجود) وفي حالة أنه غير موجود يتم إنشاؤه وفي حالة أنه موجود يتم زيادته بمقدار واحد وهذه كل مهمة الدالة. استرجاع عدد المشاهداتفي هذا الملف أيضا (أعني ملف view.php) سنقوم بإنشاء دالة أخرى تقوم باسترجاع عدد المشاهدات للمقال الحالي حتى نستخدمها لاحقا في الشيفرة المختصرة shortcode، وهذه هي الدالة: function ha_get_post_views(){ // الوصول إلى بيانات المقال الحالي global $post; $post_id = $post->ID; $count_key = 'ha_post_views_count'; $count = get_post_meta($post_id, $count_key, true); if($count==''){ delete_post_meta($post_id, $count_key); add_post_meta($post_id, $count_key, '0'); return "0 مشاهدة"; } return $count.' مشاهدة'; }ليس هنالك الكثير مما يحتاج إلى شرح فقط قمنا باستخدام الدالة get_post_meta لاسترجاع قيمة الميتا ha_post_views_count وإعادتها في حالة كانت القيمة غير خالية وإعادة صفر في حالة كانت القيمة خالية وفي هذه الحالة تقوم أيضا بإضافة الميتا. برمجة الشيفرة المختصرة shortcodeفي هذه الجزئية سنعتمد على الواجهة البرمجية التي يوفرها ووردبريس حيث سنستخدم الدالة add_shortcode والتي لها الصورة التالية: <?php add_shortcode( $tag , $func ); ?>حيث: tag$ هو اسم الشيفرة المختصرة التي سيستخدمها المستخدم في حالتنا هذه سنسميها ha_views وسيقوم المستخدم بإستدعائها بالصورة التالية [ha_views] في المقال أو الصفحة. func$ هي الدالة المسؤولة عن إرجاع محتويات الشيفرة المختصرة أي ما تقوم به الشيفرة المختصرة وفي حالتنا هذه الدالة عبارة عن دالة ترجع عدد المشاهدات للمقال الحالي وهذه هي الشيفرة النهائية في ملف shortcode.php function ha_views_shortcode( $atts ){ return ha_get_post_views(); } add_shortcode( 'ha_views', 'ha_views_shortcode' );لاحظ أن الدالة ha_views_shortcode تقوم فقط بإرجاع القيمة المرجعة من الدالة ha_get_post_views والتي عرفناها مسبقا في ملف views.php والتي بدورها ترجع عدد المشاهدات للمقال الحالي. ولن نتطرق إلى شرح المزيد من التفاصيل حول الدالة add_shortcode تجنبا للإطالة وربما نخصص لها مقالا مفردا بعد نهاية هذه السلسلة إن شاء الله. سنكتفي بهذا القدر في هذا الدرس وفي الدرس الأخير من هذه السلسة سنكمل –إن شاء الله- برمجة الإضافة (حيث تبقى فقط برمجة الويدجت الذي يعرض أكثر المقالات مشاهدة)، كما سنلقي بعض الضوء على مجموعة من الأدوات والمواقع المفيدة لمطوري إضافات ووردبريس.
×
×
  • أضف...