إنشاء أكثر من حلقة لجلب المقالات في ووردبريس

في درس سابق تعرفنا على مقدمة عن الحلقة في ووردبريس وكيف يمكننا إستخدامها لجلب المقالات وعرضها في القالب. لكن ماذا إن أردنا جلب المقالات التي تنتمي الى تصنيف معين فقط او حتى جلب اكثر من مجموعة من المقالات مثلا إحدى المجموعات هي المقالات الأكثر مشاهدة والأخرى هي المقالات الأكثر تعليقا وهكذا.
في كل هذه الأحوال قد نحتاج الى إستخدام أكثر من حلقة في القالب كل واحدة لجلب مقالات معينة تقوم بتحددها أو يمكن أن نقول أن كل حلقة لها معاملات مختلفة. هذا ما سنتعرف عليه في هذا الدرس إن شاء الله في ثنايا حديثنا عن طرق جلب المقالات في ووردبريس.

طرق جلب المقالات في ووردبريس

1- الحلقة الأساسية

هذه ببساطة هي الحلقة المعروفة والتي تناولناها في الدرس السابق والتي تستخدم لجلب أخر المقالات للصفحة الرئيسية للمدونة، والصورة العامة لهذه الحلقة هي

if(have_posts()):
while(have_posts()): the_post();

// هنا تجلب محتويات المقال التي تريدها بإستخدام وسوم القالب

endwhile;
endif;

كما تلاحظ في أي من القوالب الأساسية لووردبريس فإن هذه الحلقة تظهر في عدة أماكن منها:

  • ملف index.php وهنا تقوم بجلب إخر المقالات
  • ملف single.php حيث تجلب المقال الموجود في الرابط (أي الذي ضغط عليه زائر الموقع)
  • وفي ملف archive.php حيث تجلب أخر المقالات في الأرشيف سواء كان هذا الارشيف لتصنيف أو وسم أو تاريخ أو غيره.

بالتالي فإن ما تقوم الحلقة الأساسية بجلبه يعتمد على الملف الذي يستدعيها، وببساطة فهي تقوم بجلب المحتوى الأساسي للملف المعين (ملف index.php = آخر المقالات، ملف single.php = المقال الحالي، ملف archive.php = آخر مقالات الأرشيف).

أحيانا وكما ذكرنا في المقدمة تود أن تجلب مقالات أخرى غير التي تجلبها الحلقة الأساسية كأن تريد عرض مجموعة مقالات من تصنيف معين ومجموعة أخرى من المقالات من تصنيف آخر وتعرضهم في الصفحة الرئسية؛ وفي هذه الحالة يمكنك إستخدام إحدى الطرق التالية وعادة يتم إستخدام الطريقة التالية وهي ما سنقوم بالشرح على أساسها.

2- إستخدام كلاس WP_Query لإنشاء حلقة إضافية أو أكثر

بالإضافة للحلقة الأساسية في ووردبريس يمكنك إنشاء حلقات أخرى بإستخدام كلاس WP_Query حيث تقوم بإنشاء object من هذا الكلاس وتقوم بتحديد المقالات التي تود جلبها من خلال تمرير بعض المعاملات arguments عند إنشاء الكلاس، وهذه هي الصورة العامة لإنشاء الobject:

$my_query = new WP_Query($args); 

سنعود لجزئية المعاملات لاحقا،، لكن أولا دعنا نكمل الصورة العامة للحلقة وذلك بإستخدام الobject الذي عرفناه في الأعلى، حيث تكون الصورة العامة للحلقة كالأتي

if($query->have_posts()):
while($query->have_posts()): $query->the_post();

// هنا تجلب محتويات المقال التي تريدها بإستخدام وسوم القالب
// بنفس طريقة الحلقة الأساسية، أي أننا نستخدم نفس الدوال

endwhile;
endif;

كما تلاحظ ليس هنالك إختلاف كبير بين هذا الكود والكود الخاص بالحلقة الأساسية، فقط هذه المرة قمنا بإستدعا الدالتين have_posts و the_post من خلال الobject الذي قمنا بتعريفه وهو $query.
الان نأتي للنقطة الأهم وهي المعاملات التي نقوم بتمريرها عند تعريف الأوبجكت كما في الأعلى $args، هذه المعاملات هي التي تحدد المقالات التي يتم جلبها وعرضها من خلال الحلقة، ولحسن الحظ يمكنك جلب المقالات التي تريدها إعتمادا على عوامل كثيرة جدا منها على سبيل المثال لا الحصر:

  • الكاتب Author: فيمكنك مثلا جلب المقالات التابعة لكاتب معين.
  • التصنيف أو الوسم Category or Tag: لجلب المقالات التابعة لتصنيف أو وسم معين أو أكثر من تصنيف أو وسم
  • التاريخ Date: فيمكنك جلب المقالات في تاريخ معين أو بين تاريخين
  • الحقل المخصص Custom Field: حيث يمكنك جلب المقالات التي تحتوي على حقل معين أو قيمة معينة لهذا الحقل
  • حالة المقال Post Status: فيمكنك مثلا المقالات المنشورة أو المسودات فقط

بالإضافة لجلب المقالات إعتمادا على شروط معينة فإن معاملات الحلقة تتيح لك أيضا إمكانية التحكم في ترتيب المقالات وعدد المقالات وغيرها من الأمور التي يصعب حصرها في هذا المقال لكن ننصحك بالإطلاع على وثائق ووردبريس الخاصة بكلاس WP_Query.

لكن في هذا المقال سنضرب مثالين لبعض الأمور الشائعة حتى يتبين بهما كيفية تمرير المعاملات إلى الحلقة. وإليك هذين المثالين.

1. جلب المقالات التابعة لتصنيف معين

يتم هذا من خلال تمرير معرف التصنيف ID إلى عند تعريف متغير الحلقة كالآتي

$query = new WP_Query( array( 'cat' => 4 ) );

يمكنك أيضا أن تمرر الإسم اللطيف للتصنيف بدلا عن المعرف كالآتي

$query = new WP_Query( array( 'category_name' => 'staff' ) );

كما يمكنك تمرير معرفات أو أسماء أكثر من تصنيف كالآتي

$query = new WP_Query( array( 'cat' => '2,6,17,38' ) );
$query = new WP_Query( array( 'category_name' => 'staff,news' ) );

بالطبع فإن بقية جسم الحلقة لن يتغير وسيكون كما ذكر أعلاه في الصورة العامة للحلقة غير الأساسية (التي تستخدم object من كلاس WP_Query)

يمكنك أيضا تمرير معاملات أخرى مع التصنيف فمثلا ربما تود جلب المقالات التابعة لتصنيف معين وكاتب معين أو تريد ترتيبها بصورة معينة، فمثلا هذه المعاملات

$args = array(
'category_name' => 'news', 
'tag' => 'cooking',
'author_name' => 'rami',
'orderby' => 'title',
'order'   => 'DESC',  
);

$query = new WP_Query( $args );

تقوم بجلب المقالات التي تتبع للتصنيف news والتي لديها الوسم cooking وقام بكتابتها الكاتب rami مع ترتيبها على حسب عنوان المقال ترتيبا تنازليا DESC.

2. جلب المنتجات التابعة لتصنيف معين

الفرق بين هذا المثال والمثال السابق أنه لجلب المنتجات علينا أن نصرح بذلك في معاملات الحلقة أما عند جلب المقالات فلا نحتاج لذلك لأنها نوع المقالات Post Type الإفتراضي في الحلقة، أما المنتجات فتعتبر نوع مقالات مخصص Custom Post Type.
كذلك فإن تصنيفات المنتجات ليست فئة Taxonomy أساسية بل هي فئة مخصصة Custom Taxonomy ولذلك فإن التعامل معها يختلف عن التعامل مع التصنيف.
وهذه هي المعاملات التي نحتاج لتمريرها حتى نحقق منشودنا

$args = array(
        'post_type' => 'product',
        'tax_query' => array(
               array(
                        'taxonomy' => 'product_category',
                        'field'    => 'slug',
                        'terms'    => 'mobile',
                    ),
        ),
);
$query = new WP_Query( $args );

في البداية قمنا بتعريف نوع المقالات وهو product ثم قمنا بكتابة tax_query للتصريح بأننا نود الإستعلام بواسطة فئة Taxonomy مخصصة وقمنا بتمرير إسم هذه الفئة وهي product_category ثم الحقل الذي نود الإستعلام بواسطته وهو الإسم اللطيف slug ثم قمنا بتمرير قيمة هذا الحقل (الإسم اللطيف) للتصنيف وهو mobile.
هذه الطريقة التي إستعلمنا بها عن المنتجات التابعة لتصنيف منتجات معين تنطبق على جميع أنواع المقالات المخصصة وكذلك جميع الفئات المخصصة وهي كما ترى فإنها من السهولة بمكان.

كلاس WP_Query يوفر لك مرونة كبيرة جدا في الإستعلام عن المقالات ويمكنك من خلاله إنشاء أكثر من حلقة في أي مكان في ووردبريس فقط عليك أن تقرأ توثيقه حتى تتمكن من معرفة المعاملات المتطلب تمريرها لجلب المقالات وفق شروط معينة لذلك ننصحك مرة أخرى بالرجوع إلى توثيقه ومحاولة إلقاء نظرة سريعة على الأمثلة الموجودة فيه.

3- إستخدام الدالة get_posts

بالإضافة للطريقتين السابقتين فإن ووردبريس يوفر لك دالة get_posts وتختلف عن الحلقتين السابقتين في أنها ترجع لك المقالات في شكل مصفوفة، وتعتبر مثالية في حالة أردت إسترجاع مجموعة من المقالات في شكل مصفوفة إعتمادا على شروط قليلة.
تستخدم get_posts نفس معاملات WP_Query فهي في الحقيقة تقوم بإنشاء object جديد وترسل له المعاملات التي تمررها لها ثم ترجع لك المقالات التي تحقق الشروط في شكل مصفوفة.

 

4- إستخدام query_post

هذه الطريقة تمكنك من تعديل معاملات الحلقة الأساسية، فمثلا بصورة إفتراضية فإن الحلقة الأساسية في ملف index.php تقوم بإرجاع آخر المقالات المنشورة في الموقع، فيمكنك من خلال الدالة query_post تعديل هذه الحلقة لتجلب لك المقالات التابعة لتصنيف معين أو لكاتب معين أو غيرها من الشروط التي تستطيع تحقيقها من خلال المعاملات التي ذكرناها عند حديثنا عن WP_Query.

الصورة العامة لهذه الطريقة هي

query_posts( $args );
 
// The Loop
while ( have_posts() ) : the_post();

// هنا تخرج محتويات المقال

endwhile;

لاحظ أننا لم نقوم بتعريف object جديد من WP_Query كما أننا لم نقم بإستدعاء الدالتين have_posts و the_post من خلال object كما في الحلقة المذكورة في الطريقة الثانية من طرق إسترجاع البيانات، بل قمنا بإستخدام نفس صورة الحلقة الأساسية المذكورة في الطريقة الأولى، والتعديل عليها تم من خلال مناداة الدالة query_post.

هذه الطريقة لا تنشئ حلقة ثانية ولكن تقوم فقط بالتعديل على الحلقة الأساسية لكن لا ينصح أبدا بإستخدام هذه الطريقة للتعديل على الحلقة الأساسية حيث أنها تقوم بالتعديل على المتغير الأساسي للحلقة أي الobject الخاص بكلاس WP_Query الذي يستخدمه ووردبريس في الحلقة الأساسية، فإذا أردت التعديل على الحلقة الأساسية فإنه ينصح بإستخدام أحدى الطرق الأخرى مثل إستخدام pre_get_posts.

 

 

[mc4wp_form]

مشاركة:

Facebook
Twitter
LinkedIn
WhatsApp

مقالات ذات صلة