يشرح هذا المقال أحد أهم المواضيع المرتبطة بتطوير ووردبريس وهو حلقة ووردبريس WordPress loop وتُدعى أيضًا "The loop"، لذلك يُعَد المحتوى مهمًا جدًا، كما أنه يُمثل دليلًا عمليًا لفهم ووردبريس، حيث تُعَد الحلقة ركنًا أساسيًا في تطوير قوالب ووردبريس، ولهذا يجب التعرف عليها، ولحسن الحظ فهي ليست معقدةً. يهدف المقال هنا إلى توضيح مبدأ عمل الحلقات في ووردبريس ثم الانتقال إلى الشيفرة البرمجية وآلية عملها.
تعريف الحلقة ببساطة
في هذا القسم لن يُستعان بالبرمجة لشرح عمل الحلقة، بل سيُشرح مبدأ عملها والفكرة منها.
حلقة ووردبريس موجودة في ملفات القالب
تتكون قوالب ووردبريس من ملفات قوالب PHP، وتُحدد هيكلية قوالب ووردبريس ملفات القالب المرتبطة مع كل صفحة، حيث يرتبط ملف page.php
مثلًا مع طلبٍ لصفحة "من نحن About"، وhome.php
مع طلب الصفحة الرئيسية للموقع، بينما يُستخدم ملف index.php
احتياطيًا في حال لم يُفعّل الجزء الأعلى من هذه الهرمية.
يجب الغوص في محتوى ملف القالب بعد تحديد أي ملفٍ نريد العمل عليه لإيجاد الحلقة.
الحلقة هي المسؤولة عن معالجة المنشورات في ووردبريس
حلقة ووردبريس هي الآلية التي يتعامل فيها ووردبريس مع أي منشورٍ أو مجموعة منشورات، حيث تستطيع ضمن الحلقة تحديد كيفية عرض كل منشور لتُطبّق الحلقة البنية المطلوبة على كل منشور ضمن المجموعة، فعلى سبيل المثال تتضمن صفحة المدونة حلقة ووردبريس التي تعالج العديد من المقالات، ثم تُعيد استخدام بنية المنشور التي حددتها على جميع هذه المقالات، ولكن إذا وُجد مقال واحد فقط أو طلب المستخدم الوصول لصفحة "من نحن About"؛ فعندها سوف يستخدم ووردبريس مبدأ الحلقة ذاته ولكن لعرض منشورٍ واحدٍ فقط سواءً كان مقالًا أو صفحة.
حلقة ووردبريس هي أساس التخصيص في ملفات القالب في ووردبريس
تُعَد الحلقة المحرك النابض لأي ملف قالب، فهي قابلة للتخصيص وتتغير حسب الملف، ويُعَد تغيير محتوى الحلقة هو الطريقة الرئيسية لتغيير وظيفة ملفات القالب، فقد تريد لصفحة المدونة لديك مثلًأ (والتي يُتحكم بها من قِبل ملف home.php
للقالب المُستخدم) عرض مقتطفاتٍ من فقرةٍ واحدةٍ من مقالات المدونة بدلًا من عرض كامل المحتوى، ولتحقيق ذلك سوف تُستخدم الدالة the_excerpt()
داخل حلقة الملف home.php
، وبنفس الوقت ربما نريد لصفحات مقالات المدونة والتي يُتحكم بها من قِبل ملف single.php
عرض محتوى المقال كاملًا وليس فقط المقتطف، لذا علينا استخدام الدالة the_content()
داخل حلقة الملف single.php
بدلًا من الدالة the_excerpt()
.
يتمحور تطوير قوالب ووردبريس حول معرفة هذه التفاصيل والفرق بينها.
مثال على استخدام حلقة ووردبريس
تجد في الصورة المُبينة في الأسفل محتوى ملف single.php
للقالب الشهير Twenty Fifteen، حيث تشغُل الحلقة مجال السطور (15 وحتى 43)، ولكن أُخفي محتواها كي لا نشغل ذهننا به الآن (أي السطور من 18 إلى 39 مخفية)، مع ملاحظة كيف أن ملف single.php
مكونٌ تقريبًا ْمن الحلقة فقط، وبالتالي فهي التي تسمح لملف القالب بعرض محتواه.
بعد رؤية توظيف الحلقة ضمن ملفٍ حقيقي، لنبدأ عملية التشريح الوظيفي لها في أي قالب.
النسخة البسيطة من الحلقة
سنلقي نظرةً هنا على الشيفرة البرمجية PHP للحلقة وبنيتها الأساسية، حيث يُمكن كتابة شيفرة الحلقة بطريقتين وكلتاهما تؤديان الوظيفة ذاتها.
<?php /* Environment: We're inside a theme template file in the WordPress template hierarchy */ if ( have_posts() ) { // (1) while ( have_posts() ) { // (2) the_post(); // (3) // (Loop contents will go here) (4) } // end while (5) } // end if (6)
أو
<?php /* Environment: We're inside a theme template file in the WordPress template hierarchy */ if ( have_posts() ) : // (1) while ( have_posts() ) : // (2) the_post(); // (3) // (Loop contents will go here) (4) endwhile; // (5) endif; // (6)
لا داعي للارتباك بفكرة وجود طريقتين لكتابة الحلقة، فما هي إلا خياراتٌ مختلفةٌ توفرها لغة البرمجة PHP ولها المعنى ذاته. وستُسخدم الطريقة الثانية في الأقسام الآتية من المقال.
كيفية عمل الحلقة في ووردبريس
سيشرح هذا القسم الطريقة الثانية لاستخدام الحلقة سطرًا سطرًا (المثال الذي يتضمن endwhile
)، ولا بد من ملاحظة أن حلقة ووردبريس هي فعلًا حلقة بالمفهوم البرمجي، فهي تتكرر على مجموعةٍ من منشورات ووردبريس، ولا تتوقف إلا عند انتهاء هذه المنشورات.
تعمل الحلقة وفقًا للخطوات التالية المُرقمة ضمن الشيفرة:
-
تسأل الحلقة بيئة ووردبريس الرئيسية عما إذا كانت هناك أي منشوراتٍ لمعالجتها من خلال دالةٍ تُدعى
have_posts()
، حيث تُعيد هذه الدالة إماtrue
في حال وُجد منشورات جاهزةٍ للمعالجة أوfalse
في حال عدم وجود منشورات؛ وإذا كانت النتيجة المُعادة من قِبل الدالةhave_posts()
ضمن عبارةif
هيtrue
، فسوف تعمل أجزاء الحلقة؛ أما إذا كانتfalse
، فسوف يتجاوز معالج PHP الحلقة لأنها لا تحتوي على شيء. -
سوف تُنفّذ تعليمة
(()while ( have_posts
عند تحقق شرط عبارةif
، والذي يعني وجود منشورات يجب معالجتها ضمن الحلقة، وفعليًا هذا هو السطر الذي تبدأ عنده الحلقة، وهو عبارةٌ عن حلقةwhile
في لغة PHP تُعيد تنفيذ التعليمات داخلها طالما أن شرطها مُحقق، أي وبمعنىً آخر "طالما توجد منشورات لمعالجتها ادخل الحلقة"، وبالتالي ستُنفذ الحلقة الشيفرة البرمجية الموجودة داخلها مرةً لكل منشور وتستمر هذه العملية حتى تنتهي المنشورات وتنتقل الصفحة لتنفيذ تعليمات PHP التي تلي الحلقة في نفس ملف القالب. -
نحن الآن داخل حلقة
while
المُشار إليها بالفقرة السابقة وتدل تعليمةthe_post()
على أنه "طالما لدينا منشورٌ للعمل عليه، فيجب أن نُضيف المنشور الحالي للرتل"، حيث تعمل هذه الدالة على إضافة المنشور للرتل أي أنها تُجهّز المنشور التالي لتُطبّق عليه عمليات ووردبريس المتوفرة ضمن الحلقة، ويجب أن تكون هذه الدالة موجودةً ضمن الحلقة. -
كتابة محتوى الحلقة، حيث يُعَد هذا القسم الجزء الرئيسي للحلقة وهنا نستطيع الإبداع وكتابة الشيفرة البرمجية التي سوف تُطبق على كل منشور، وهو فارغٌ الآن لأنه القسم الذي علينا كتابته بأنفسنا، وسنتوسع في شرح هذا القسم في الفقرات القادمة من هذا المقال.
-
نهاية الحلقة من خلال كتابة تعليمة
endwhile;
وهذه هي طريقة PHP للقول "انتهينا من حلقةwhile
" وكل التعليمات المتواجدة بينwhile() :
وendwhile;
هي تعليماتٌ تابعةٌ للحلقةwhile
، وأي شيءٍ بعدها هو خارج هذه الحلقة وسوف يُنفذ لمرةٍ واحدة بعد الانتهاء من تنفيذ حلقةwhile
. -
نهاية الشرط من خلال تعليمة
endif;
، وهذه هي طريقة PHP للقول "انتهينا من عبارةif
التي كنا داخلها"، حيث تُنفذ جميع التعليمات المتواجدة بينif():
وendif;
لمرةٍ واحدة (طالما أنها ليست داخل حلقة) عند تحقق شرط عبارةif
، ولن تتأثر أي تعليماتٍ بعدها بالشرط الخاص بها، وسوف تُنفذ مهما كانت نتيجة الشرط.
مثال على عمل حلقة
سنطلّع الآن على مثالٍ لحلقةٍ تُنفّذ وظيفةً ما، حيث أصبح من الأسهل فهم ما يجري بعد الاطلاع على أجزاء الحلقة وعملها.
<?php /* Environment: We're inside a theme template file in the WordPress template hierarchy */ if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <article class="full-article"> <h2><?php the_title(); ?></h2> <?php the_excerpt(); ?> </article> <?php endwhile; endif;
خرج هذه الحلقة في قوالب ووردبريس
تُنشئ هذه الحلقة من أجل كل منشورٍ ضمن المجموعة وسمًا <article>
، حيث تعرض داخله العنوان أولًا ثم مُقتطفًا قصيرًا (افتراضيًا أول 55 كلمة يتبعها الرمز [...]
) للمنشور الحالي.
سوف تعرض الحلقة السابقة المُخرج التالي بعد استخدام عدة منشوراتٍ من ضمن الموقع الذي نجربها عليه.
<article class="full-article"> <h2>What Your Minimum Viable Product Should Be Measuring</h2> <p>In our last article we introduced you to the idea of the Minimum Viable Product (MVP), and covered some of the internal challenges that often arise when you prepare to share a beta version of your idea. An MVP isn't just a quick, cheap version of your product that you're releasing because it's easy. On […]</p> </article> <article class="full-article"> <h2>Starting Small: Creating a Minimum Viable Product</h2> <p>A common mistake entrepreneurs make is to start with a very specific idea and grind as hard as possible to make it work. This might work out great—but as many entrepreneurs learn, it's far too easy to rush through, or entirely overlook, the process of refining our initial ideas into something people truly want. Not […]</p> </article> <article class="full-article"> <h2>How to Plan a Successful Web Project</h2> <p>It's too easy to plan out a web project in terms of technologies rather than solutions. Too many web projects don't meet their goals. The project could be the wrong solution for the right goal, the right solution for the wrong goal—or, perhaps worst of all, a shiny solution for no goal. The problem is […]</p> </article> // (And so on for many more articles)
أنماط علينا ملاحظتها في الحلقة
يجب الانتباه لأمرين اثنين في المثال السابق: كيفية الانتقال بين وسوم HTML والصيغ المُستخدمة في PHP، ولا بد من الإنتباه إلى أن أي شيءٍ ليس ضمن <?php ?>
فهو وسم HTML فقط، وفي مثالنا السابق هذه الوسوم كانت <h2>
و<article>
، حيث تُطبع هذه الوسوم مبُاشرةً في المتصفح في كل مرةٍ تمر فيها الحلقة على منشورٍ جديد. الجزء الحقيقي والعميق المُتعلقان بووردبريس، وهما وسما PHP المُستخدمان: الوسم الأول هو the_title()
والذي يطبع عنوان المقال الحالي في كل مرةٍ يُستخدم فيها ضمن الحلقة؛ أما الوسم الثاني فهو the_excerpt()
ويطبع مُقتطفًا من نفس المقال.
نستطيع إنشاء قالبٍ واستخدام ملفٍ واحدٍ ضمنه وهو index.php
، وكذا استخدام الحلقة السابقة ضمنه لتعرض الصفحة الرئيسية للموقع عناوين ومقتطفات أحدث المنشورات ضمنه (سواءٌ كان مقالًا أو صفحةً).
الخلاصة
يساعد هذا المقال في توضيح مفهومٍ رئيسيٍ في ووردبريس وهو الحلقة، والتي تكون أكثر تعقيدًا في معظم القوالب المُستخدمة في ووردبريس ولكن يمكن البدء بالأمثلة الموجودة هنا.
ترجمة -وبتصرّف- للمقال Understanding The Loop: WordPress’s Way of Showing Posts لصاحبه David Hayes.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.