إحترف الـ WP_Query بسهولة
الأمر الطبيعى أن يقوم الووردبريس بتنفيذ إستعلام لكل صفحة من موقعك يتم عرضها, و هذا بالطبع حسب نوع الصفحة التي يتم عرضها. و لذلك, و حتى لو كان هناك صفحة ثابته يتم عرضها, فإن الووردبريس عليه أن ينفذ إستعلام لجلب الصفحة ذات الرقم التعريفي ID المطلوب, و كذلك في حالة عرض صفحة أرشيف, فإن الإستعلام من شأنه جلب كل التدوينات المتعلقة بهذا الأرشيف.
و لكنك في بعض الأحيان تحتاج لأن تقوم ببعض الإستعلامات المختلفة بعض الشئ. و سواء أكان ذلك في محتوى صفحتك الرئيسية أو في أي مكان آخر (كما في القائمة الجانبية sidebar أو في ذيل الصفحة footer), فربما تود أن تظهر بعض المحتوى المخصص و الذي لا تستطيع الإستعلامات المعروفة و العادية أن تظهره.
الخبر الجيد أن الووردبريس جعل هذا ممكنا باستخدام كلاس الـWP Query هذا الكلاس يقدم لك العديد من التحديدات parameters و التي تستطيع أن توظفها لتحصل على المحتوى الذي تريد (و الذي لا يجب ان يكون قاصراً على التدوينات posts) و من ثم باستخدام دورة loop يمكنك عرض المحتوى بالضبط الذي تريد.
في هذه السلسلةسوف اصطحبك في جوله حول مدخلات و نواتج الـ WP Query
لذا عند إنتهائك من دراسة هذه السلسلة, ستستطيع إستخدام الأمر في العديد من الحالات و تحسن من طريقة الإستعلامات في الووردبريس حول البيانات في قاعدة البيانات.و في هذه المقدمة, سأقوم بتغطية هذه الأمور:
ما هو الـ WP Query ؟
لماذا يجب أن نستخدم ال WP Query ؟
ما هو الـ WP_Query ؟
الـ WP_Queryهو كلاس class مقدم من قبل الووردبريس. المغزى من وراء ذلك, أنه عبارة عن كلاس class يعني أنك بإستخدامه ستتمكن من الوصول للمتغيرات و الدوال التي تمت كتابتها في هذا الكلاس في بنية الووردبريس الأساسية Wordpress core, دون الحاجة للقلق حول إعادة كتابة هذا الكود بنفسك. و هذا يجعل من الكود الخاص بك أكثر كفاءة و موثوقية.
و لو أردت ان تعرف بالضبط حقيقة الأمر المكتوب في
WP_Query
, ربما يمكنك أن تتطلع على الكود بنفسك في الملف
includes/query.php
يتكون الـ WP_Query من أربعة عناصر:
الـ arguments المستخدمة في الإستعلام, تستخدم محددات parameters سوف نغطيها بالتفاصيل في هذه السلسلة
الإستعلام نفسه
الدورة loop, و التي ستعرض محتويات التدوينة, كما العناوين أو أي شئ آخر تود عرضه.
الإنتهاء من الأمر, عبر إغلاق الـ if و دورة الـ while و إعادة ضبط بيانات التدوينة.
إعادة ضبط بيانات التدوينة
في المثال السابق, قمت بإضافة الدالة
wp reset postdata بعد كل إستعلام. و هذا أمر مهم, لأنه يعيد ضبط الإستعلام مرة أخرى إلى الإستعلام الرئيسي في الصفحة التي أنت عليها.كمثال, لو أنك تستخدم الكلاسWP_Query
لتنفيذ إستعلام في القائمة الجانيية sidebar , فأنك بإستخدام wp reset postdata بفعالية تخبر الووردبريس أنك لازلت بمكان ما في الصفحة التي يتم عرضها, و هذا من شأنه أن يجعل الإستعلام يتوافق مع الإستعلام الرئيسي للصفحة التي أنت عليها.و لو أنك لم تفعل هذا, فإن أي إستعلام آخر في الصفحة (بما في ذلك الإستعلام الرئيسي) قد لا يتم عمله, و أي وسم conditional tag خاص بعرض نوع الصفحة التي أنت عليها لن يعمل أيضاً.
لماذا يجب أن نستخدم الـ WP_Query ؟
إذا لم تكن قد أستخدمت الـ WP_Query من قبل, فلا بد لك أن تتسائل لما يجب على أن أستخدمه. و هنا سأقوم بالتركيز على جانبين حول ذلك: لماذا يجب أن نستخدم الـWP_Query
عوضاً عن باقي الطرق الأخرى, و كذلك السيناريوهات المتوقعة و التي تدعوك لإستخدام الـ WP_Queryلماذا يجب أن أستخدم الـ WP_Query عوضاً عن باقي الطرق الأخرى ؟
الـ WP_Query ليس بالطريقة الوحيدة التي من شأنها تنفيذ إستعلام مخصص. هناك أربعة طرق أخرى لفعل ذلك:pre_get_posts
()get_posts
()get_pages
- الدالة ()query_posts (و التي يجب أن تتفادى إستخدامها, كما سأشرح لاحقاً)
- الـ
pre_get_posts
هو عبارة عن hook و الذي يتم استخدامه لتعديل طريقة عمل الإستعلام الرئيسي. ربما يمكنك إستخدامه مع وسم conditional tag لفحص نوع الصفحة التي يتم عرضها (الصفحة الرئيسية مثلاً) و من ثم تستخدمه لتعديل الإستعلام الذي يتم تنفيذه (مثلاً, أن يتم حذف مربع آخر ثلاث تدوينات مضافة, في حالة أنك ستقوم بعرضه في مكان آخر بالصفحة) أنها الطريقة المثلى لتعديل الإستعلام الرئيسي و يجب أن تكون خيارك الأول إذا كان هذا ما تود عمله بالضبط. و مع ذلك, فإنك لا تستطيع إستخدامه في إنشاء إستعلام جديد كامل. - الدوال
get_posts
و()get_pages
متشابهين لدرجة كبيرة, يختلفون فقط في الأمر الواضح من اسمائهم. الوسوم الخاصة بالقوالب template tags بالفعل تستخدم الـ WP_Query - الدالة
query_posts
تعدل من الإستعلام الرئيسي , و لكن يجب عدم إستخدامها لا في الاضافات plugins أو القوالب templates. و ذلك لأنها تقوم بحذف الإستعلام الرئيسي بالكامل, و تبدأ الأمر كله من جديد. أي أنها تستبدل الإستعلام الرئيسي في الصفحة, بواحد جديد. و كما أنها معرضة لإرتكاب الأخطاء, خاصة مع خاصية ترقيم الصفحات pagination, و غير فعالة و ستؤثر على وقت تحميل الصفحة. لذا فإذا أردت أن تعدل من الإستعلام الرئيسي, استخدمpre get posts , و إذا أردت أن تنشئ إستعلام كامل جديد, استخدم WP_Query
المخطط بالأسفل, المنشور من قبل Andrey “Rarst” Savchenko , يفسر الأمر بشكل سهل جدا :
متى يمكنك إستخدام الـ WP_Query
- لإضافة قائمة بالتدوينات المتعلقة related posts بتدوينة يتم عرضها حالياً - كمثال, أن تظهر قائمة لكل التدوينات المندرجة تحت نفس القسم.
- لتشغيل دورتين two loops في نفس الصفحة
- لعمل قائمة مخصصة لآخر التدوينات في القائمة الجانبية sidebar أو في ذيل الصفحة footer. عندما يكون مربع أخر التدوينات Recent Posts Widget الإفتراضي لا يلبي متطلباتك بالضبط.
- لعمل استعلامات مخصصة عن التصنيفات taxonomies , مستخدماً أكثر من تصنيف لتعريف ما يجب أن يتم عرضه.
- للإستعلام عن أنواع التدوينات post types و التي لا يتم عرضها عبر الاستعلام الافتراضي,
- لعمل صفحات مخصصة مع عدد من الإستعلامات لعرض محتويات مختلفة
عليك ان تحذر من :
الكلاس WP_Query
أمر عظيم لقد قمت بإنجاز العديد من المواقع التي تحتاج إستعلامات مخصصة, لذا فقد إستخدمته كثيراً. و لكنه لا يأتي بدون السلبيات الخاصة به. و ها هي بعض الأمور التي يجب عليك مراعاتها:- إذا كان كل ما تحتاجه هو تغيير طريقة عرض التدوينات من أجل نوع محتوى معين أو للأرشيف, لا تستخدم الـWP_Query
. بدلاً من ذلك, أنشئ ملف قالب template file لأجل هذا الأرشيف أو نوع المحتوى المعين, و غير من طريقة الـدورة loop في هذا الملف.
- إذا أردت أن تعرض عدد أقل أو أكثر من التدوينات التي تظهر إفتراضياً في صفحة أرشيف (كمثال, لا تريد اظهار تدوينات قسم معين), لا تستخدمWP_Query لعمل استعلام كامل جديد. بدلاً من ذلك, استخدم pre_get_posts لتعديل الإستعلام الرئيسي, بالإضافة لإستخدامك لوسم conditional tag لتحدد بالضبط أين تريد لذلك أن يتم.
- كن حذراً بشأن تنفيذ العديد من الإستعلامات بنفس الصفحة. نظرياً, يمكنك إنشاء المئات من الإستعلامات في نفس الصفحة, و لكن فكر في الحمل الثقيل على الخادم server load. إذا كنت تفكر في تنفيذ أربع أو خمس إستعلامات في نفس الصفحة, ربما يمكنك أن تنفذ الأمر عبر عدد من الصفحات الإضافية.
وفى النهاية
الكلاسWP_Query
هو كلاس قوي و مفيد بشكل كبير لعمل إستعلامات مخصصة و جعل موقع الووربريس الخاص بك يتصرف بالضبط كما تريد. و كما رأينا, هناك أوقات ربما يمكنك إستخدام الطرق الأخرى لعمل إستعلامات مخصصة, و لكن هناك أيضاً مجال واسع لإستخدام الـ WP_Query.أرجو ان تكونوا استفدتوا من الدرس
وتابعونا سنذودكم بالمزيد عن الووردبريس وكل شئ
ليست هناك تعليقات:
إرسال تعليق