يهمل بعض مطوروي قوالب ووربرديس استخدام الدالة get_template_part () عند كتابة الأكواد البرمجية لقوالبهم أو ثيماتهم، رغم أهميتها الكبيرة في تنظيم الملفات واختصار الكثير من التعلميات البرمجية المكررة في ملفات القالب.
في مقال اليوم سأشرح المزيد حول هذه الدالة وأوضح البنية العامة لها، والميزات التي تقدمها، ودورها الهام في تعزيز بنية قالب ووردبريس وجعل الأكواد أقصر وأبسط.
محتويات المقالة
كيف يتم استدعاء أجزاء القالب (ملفات تمبلت القالب) في ووردبريس
إن ووردبريس يتعرف تلقائيًا على ملفات نماذج القوالب التي تكون عبارة عن ملفات قوالب لصفحات كاملة، وهو يقوم باستخدامها أو استدعائها بصورة تلقائية في المكان المناسب بالاعتماد على بنية التسلسل الهرمي لملفات ثيمات ووردبريس. لذلك عندما نقوم بإنشاء ملف تمبلت صفحة كاملة في قالب ووردبريس الخاص بك لا يلزمك استدعاؤه من ملف آخر.
لكن ماذا عن أجزاء القالب الصغيرة التي لا تمثل صفحات كاملة، بل تكون عبارة عن ملفات مخصصة لعرض أجزاء معينة من الصفحة مثل comments.php المسؤول عن عرض التعليقات و header.php المسؤول عن عرض الترويسة و footer.php المسؤول عن عرض التذييل و sidebar.php المسؤول عن عرض الشريط الجانبي وما إلى ذلك…
فهذه الملفات تتضمن أكواد مخصص لعرض أجزاء محددة كي تعرض ضمن ملفات القوالب الأخرى. وفي هذه الحالة أنت تحتاج لأن تستدعي جزء القالب المطلوب في الموضع الذي تحتاجه بنفسك، فكيف يمكن القيام بذلك؟
هنا يجب أن نفرق بين الأجزاء العامة والأجزاء الخاصة من القالب أو الثيم. فبالنسبة للأجزاء العامة التي تستخدم في عدة مواضع ضمن الموقع مثل (الترويسة، والتذييل، والشريط الجانبي، ونموذج البحث) فكل جزء من هذه الأجزاء يتم تضمينه من خلال دالة محددة خاصة به في ووردبريس مثل:
get_header () تستدعي ملف header.php الذي يشكل الجزء العلوي لصفحات الموقع.
get_footer (): تستدعي ملف footer.php. الذي يعرض عادة تذييل صفحات الموقع.
get_sidebar (): تستدعي ملف sidebar.php المسؤول عن عرض الشريط الجانبي لصفحات الموقع.
get_search_form (): تستدعي ملف searchform.php في حال وجوده ضمن الدليل الرئيسي للقالب الحالي الخاص بك أو ضمن القالب الأب لهذا القالب، وإلا فسوف تستدعي تمبلت محرك البحث الافتراضي للوردبريس وهو عبارة عن فورم HTML.
الآن ماذا عن الأجزاء الخاصة للقالب، أي ماذا لو كنت تريد كتابة ملفات خاصة بك تمثل أجزاء مكتوبة باستخدام تعليمات برمجية خاصة بك ضمن القالب، هذه الأجزاء التي لا يتعرف عليها ووردبريس تلقائيًا من خلال هرمية القالب، ولا تتوفر لها كذلك دوال مخصصة لاستدعائها؟ فكيف يمكنك استدعاء هذه الملفات عدة مرات، أو استدعاؤها عند تحقق شروط معينة بحسب كل قالب؟
على سبيل المثال، لنفترض أنك أدرت إنشاء ملف تمبلت يتضمن كود مخصص لعرض الشريط الجانبي على صفحتك الرئيسية بشكل مختلف عن باقي الصفحات، أو كتابة كود معين لعرض اللوجو يتكرر استخدامه في أكثر من موضع واستدعاؤه في ملفات القالب المختلفة؟ للقيام بذلك، تحتاج إلى استخدام دالة تسمى get_template_part () لاستدعاء هذه الأجزاء المخصصة.
ما هي الدالة get_tmplate_part
الدالة get_template_part () هي دالة برمجية جاهزة يوفرها ووردبريس لمطوري القوالب كي يسمح لهم بتحميل أقسام التعليمات البرمجية القابلة لإعادة الاستخدام ضمن مواضع مختلفة من ثيماتهم المخصصة.
كي تستخدم هذه الدالة يجب عليك في البداية إنشاء ملف النموذج أو template file الذي يتضمن الكود البرمجي الخاص بك والذي ترغب في استخدامه عدة مرات ضمن الثيم وليكن على سبيل المثال custom-part.php، ثم تمرر اسم الملف لهذه الدالة (بدون الامتداد php) وتستدعيها في أي موضع تريده في ثيم ووردبريس كما يلي:
get_template_part( 'custom-part' );
تشابه هذه الدالة في طريقة عملها الدالة include() في PHP، وبالتالي يمكنك من خلالها تضمين جزء القالب نفسه عدة مرات في قالبك.
تأخذ الدالة get_template_part الشكل العام التالي:
get_template_part( string $slug, string $name = null, array $args = array() )
كما تلاحظ من الكود أعلاه يمكن أن تأخذ الدالة 3 برامترات وهي كالتالي:
$slug: برامتر إجباري وهو عبارة عن سلسلة نصية تمثل الاسم اللطيف لملف التمبلت العام generic template.
$name: برامتر اختياري قيمته الافتراضية null، وهو يمثل سلسلة نصية تمثل اسم التمبلت المخصص specialised template.
$args: برامتر اختياري يمثل مصفوفة فارغة يمكن من خلالها أن نمرر برامترات إضافية للتمبلت.
لنأخذ أمثلة إضافية حول تمرير البرامترات للدالة، لدينا الكود التالي الذي يجلب الملف fallback-content-main-content.php (ملف أكثر تخصيصًا) وفي حال لم يجده تجلب الملف fallback-content.php (الملف الأكثر عمومية)
get_template_part( 'fallback-content', 'main-content' );
أما الكود التالي فهو يقوم بجلب الملف content-postformat.php
get_template_part( 'content', get_post_format() );
يفضل أن تقوم بتجميع كافة الأكواد المكررة التي تريد استدعائها من خلال الدالة get_post_format() بشكل ملفات، وتضعها ضمن مجلد منفصل داخل مجلد القالب وتسميه مثلاً parts، أو template-parts، أوincludes، أو أي اسم معبر تريده، ثم تكتب اسم المجلد قبل اسم الملف كما يلي:
تجميع أجزاء القالب المخصصة في مجلد فرعي ضمن مجلد القالب
get_template_part('template-parts/content');
ما هي فوائد استخدام الدالة get_template_part ()؟
عند استخدام الدالة get_template_part سيتم تقليل مقدار التعليمات البرمجية التي يحتاج المطور لكتابتها عند تطوير الثيم الخاص به.
الأمر الهام الآخر الذي تفيد فيه الدالة get_template_part هو سهولة إجراء تعديلات في أحد أجزاء القالب، ففي حال كنت ترغب في إجراء تغيير في جزء معين، يكفي أن تقوم به في مكان واحد بدلاً من القيام به في أكثر من موضع ضمن ملفات القالب.
أخيرًأ تفيد الدالة get_template_part في تطوير قالب ابن (Child Theme)، فهي توفر آلية بسيطة للقوالب الأبناء لعمل تحميل زائد (overload) لأجزاء التعليمات البرمجية القابلة لإعادة الاستخدام في القالب الأب (Parent Theme). فإذا قمنا على سبيل المثال بتضمين ملف يسمى nav.php باستخدام get_template_part () في كل من القالب الأب والقالب الابن، فسوف يبحث ووردبريس بداية عن إصدار القالب الابن ويستخدمه أولاً، وإذا لم يعثر عليه فسوف يستخدم في هذه الحالة إصدار القالب الأب. وبما أن الدالة تبحث في البداية عن جزء الكود المطلوب في مجلد القالب الابن للقالب الحالي، وإذا لم تجده تبحث في القالب الأب فهي بهذه الآلية تمكنك من تجاوز قالب أب بشكل جزئي بسهولة عن طريق تضمين الأكواد التي تريد تعديلها في القالب الابن.
ملاحظة:
عند إنشاء قالب ابن باستخدام الدالة get_template_part يجب أن تنتبه لأولويات استدعاء ملف التمبلت الفرعي للقالب الابن والأب فهي تتم في ووردبريس بالشكل التالي:
get_template_part( 'fallback-content', 'main-content' );
في هذه الحالة سيتم البحث أولاً عن الملف fallback-content-main-content.php للقالب الابن
ثم عن الملف fallback-content-main-content.php للقالب الأب
ثم عن الملف fallback-content.php للقالب الابن
ثم عن الملف fallback-content.php للقالب الأب
أمثلة عملية على استخدام الدالة get_template_part ()
كي تفهم أهمية هذه الدالة بشكل أكبر دعنا نشرح بعض الأمثلة العملية على استخدام هذه الدالة في قالب ووردبريس
مثال1: تغليف كود قائمة التنقل nav.php
إذا كنت تحتاج لاستدعاء الدالة wp_nav_menu لعرض قائمة التنقل الرئيسية للموقع في أكثر من ملف من ملفات القالب، في هذه الحالة كل ما عليك هو تسجيل موضع القائمة primary في الملف functions.php، ثم إنشاء ملف جديد وتسميته nav.php على سبيل المثال وكتابة الكود التالي داخله:
<?php
if ( has_nav_menu( 'primary' ) ) {
wp_nav_menu(
array(
'theme_location' => 'primary',
'items_wrap' => '<ul>%3$s</ul>',
'fallback_cb' => false,
'depth' => 1,
)
);
}
الأن بإمكانك استدعاء هذا الملف في أي ملف آخر من ملفات القالب، على سبيل المثال لعرض القائمة الرئيسية في ترويسة الموقع نكتب ما يلي في الملف header.php:
<?php get_template_part('nav'); ?>
عند استدعاء هذه الدالة في الملف header.php سوف تبحث الدالة عن وجود ملف باسم nav.php في مجلد القالب الحالي وتعرض محتواه، وإذا لم يكن الملف متاح فلن يعيد تنفيذ هذه الدالة أي نتيجة، ولن يؤدي كذلك إلى حدوث أي خطأ في الكود.
بعدها إذا احتجت لعرض هذه القائمة الرئيسية في تذييل الموقع كذلك، فكل ما عليك هو كتابة نفس سطر الكود السابق واستدعاء الدالة get_template_part في الموضع المناسب ضمن الملف footer.php بدلاً من كتابة كامل كود عرض القائمة مرارًا وتكرارًا..
مثال2: تغليف كود حلقة ووردبريس loop.php
عندما تقوم بتطوير قالب لمدونة ستحتاج لكتابة كود حلقة ووردبريس لعرض مقالات الموقع عدة مرات في ملفات تمبلت مختلفة ضمن القالب والتي تعتبر من الأكواد المتكررة بشكل رئيسي عند تطوير أي قالب ووردبريس.
في هذه الحالة يمكنك كتابة كود حلقة ووردبريس القياسي في ملف منفصل وتسميته باسم loop.php واستدعاؤه في أي موضع تريده ضمن قالبك بكتابة سطر كود واحد بدلاً من تكرار نفس الكود في أكثر من ملف كالتالي:
<?php get_template_part('loop'); ?>
وفي حال رغبت كذلك بكتابة كود حلقة ووردبريس لعرض المقالات على صفحات المقال المفرد أو على صفحات الأرشيف بشكل مختلف عن طريقة عرضها على الصفحة الرئيسية، ما عليك في هذه الحالة سوى إنشاء ملفات مختلفة تخصص كود عرض الحلقة العام loop.php العام واستدعاؤها في الموقع المطلوب مع تمرير برامترات إضافية.
على سبيل المثال يمكن أن تنشئ ملف loop-single.php بالكود المطلوب واستدعاؤه ضمن ملف تمبلت القالب single.php كما يلي:
<?php get_template_part('loop','single'); ?>
وتنشئ ملف باسم loop-archive.php مخصص لاستدعاء كود الحلقة في صفحة تمبلت أرشيف المقالات archive.php من خلال سطر الكود التالي:
<?php get_template_part('loop','archive'); ?>
إن قالب Twenty Ten الافتراضي في نظام ووردبريس يعمل بهذه الطريقة، كما هو موضح في الصورة التالية التي توضح جزء من بنية ملفات القالب ويمكنك فحص كافة الملفات التي تبدا بكلمة loop لمزيد من التوضيح
بنية ملفات القالب Twenty Ten
الخاتمة
إلى هنا نكون قد وصلنا لنهاية مقال اليوم من سلسلة تطوير قوالب ووردبريس وقد تعرفنا فيه على الدالة get_template_part () التي تسمح لمطوري القوالب بتنظيم وترتيب ملفات القوالب الخاصة بهم، وشرحنا كيف يمكن استدعاء هذه الدالة بشكل صحيح وتوفير وقت وجهد في تطوير القالب وصيانته. فإذا كنت مطور قوالب ووردبريس، ووجدت أنك تكتب كود مكرر ومتشابه في أكثر من موضع في ملفات القالب، أنصحك بشدة بأن تقوم بتجميع هذه الأجزاء في ملفات منفصلة، وتستدعيها من خلال هذه الدالة لجعل كود قالبك أسهل وأنظف وأكثر اختصارًا وتنظيمًا.
Comments