و لكنك مرة تلو الأخرى تفتقر لأن تقوم ببعض الإستعلامات المتغايرة بعض الشئ. و سواء أكان هذا في محتوى صفحتك الأساسية أو في أي مقر آخر (كما في القائمة الجانبية 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 و إرجاع إخضاع معلومات التدوينة.
كتوضيح عملي, سوف يكون الشأن أشبه بالآتي:
2017-03-17_08-38-40
تَستطيع أن تقوم بتحديد الـ arguments خلال كتابة الإستعلام, و لكني أفضل تعريفها في الطليعة, لجعل الشأن أكثر تنسيقاً.
إرجاع إخضاع معلومات التدوينة
في المثال الماضي, قمت بإلحاق الدالة 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 لهذا فهي تعتبر أداة أخرى من نفس الشأن, غير أن ثمة خطوة أخرى إضافية لأنهم هم من يستدعون الـ WP_Query بدلاً عنك. على الارجح تَستطيع إستخدامهم للإستعلام عن التدوينات posts أو الصفحات pages , في الوقت الذي يكون إستعمال الـ WP_Query ذاته أفضل و يترك لك الميدان للإستعلام عن كل الأشياء إلى حد ماً المتواجدة داخل قاعدة المعلومات.
الدالة query_posts تعدل من الإستعلام الأساسي , و إلا أن يلزم عدم إستعمالها لا في الاضافات plugins أو القوالب templates. و هذا لأنها تقوم بحذف الإستعلام الأساسي بالكامل, و تبدأ الشأن كله مجددا. أي أنها تستبدل الإستعلام الأساسي في الصفحة, بواحد حديث. و كما أنها معرضة لإرتكاب الأخطاء, خاصة مع خاصية ترقيم الصفحات pagination, و غير فعالة و ستؤثر على وقت تحميل الصفحة. لهذا فإذا أردت أن تعدل من الإستعلام الأساسي, استخدمpre get posts , و إذا أردت أن تنشئ إستعلام كامل حديث, استخدم WP_Query
المخطط بالأدنى, المنشور من قبل Andrey “Rarst” Savchenko , يفسر الشأن على نحو يسير بشكل كبير :
2017-03-17_08-49-55
متى تَستطيع إستعمال الـ WP_Query
هناك الكثير من الحالات التي تكون الـ 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.
أرجو ان تكونوا استفدتوا من الدرس
وتابعونا سنذودكم بالمزيد عن الووردبريس وكل شئ

ليست هناك تعليقات:
إرسال تعليق