استعلامات WordPress المخصصة - حلقات متعددة

نشرت: 2021-01-29

في معظم الحالات عند إنشاء موقع ويب باستخدام WordPress ، سيعرض السمة التي تقوم بتنشيطها افتراضيًا الصفحة الأولى التي تسرد مشاركاتك الأخيرة إلا إذا اخترت عرض صفحة ثابتة من خيارات المسؤول ضمن الإعدادات> القراءة. ولكن ماذا لو أردت عرض مجموعة مختلفة من المحتوى لم تكن صفحة ثابتة ولا منشوراتك الأخيرة؟ لحسن الحظ ، هذا ممكن باستخدام WordPress Multiple Loops.

دعونا نرى كيف يمكن تحقيق ذلك!

استخدم حلقات متعددة على صفحة WordPress الرئيسية الخاصة بك

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

بغض النظر عن الموضوع الذي تستخدمه ، سيتضمن ملف PHP المقابل للصفحة الرئيسية حلقة قياسية تعرض بعض المنشورات (في معظم الحالات ، ستكون هذه منشورات منشورة مؤخرًا). في قالب Twenty Twenty على سبيل المثال ، ستجد الكود الذي يتحكم في هذا داخل ملف index.php حول السطر 79.

 if ( have_posts() ) { $i = 0; while ( have_posts() ) { $i++; if ( $i > 1 ) { echo '<hr class="post-separator styled-separator is-style-wide section-inner" aria-hidden="true" />'; } the_post(); get_template_part( 'template-parts/content', get_post_type() ); } }

في حلقة قياسية مثل هذه ، يتم استخدام متغيرين عالميين مهمين:

  • $wp_query وهو كائن فئة WP_Query ويحمل نتيجة استعلام قاعدة بيانات WP
  • $post وهو كائن فئة WP_Post الحالي.

في جزء الكود أعلاه ، نتحقق أولاً مما إذا كانت هناك أي منشورات لإظهارها باستخدام الدالة have_posts() العامة ، وإذا كان الأمر كذلك ، فكرر هذه المنشورات داخل حلقة while. the_post() هي الوظيفة التي تتكرر من خلال المنشورات التي تخبر WordPress بالانتقال إلى المنشور التالي.

إذا كنت تريد رؤية هذه الوظائف والفئات بالتفصيل ، فيمكنك العثور عليها في ملف wp-includes/class-wp-query.php .

لأغراض مثالنا ، قمنا بتنشيط موضوع Twenty Twenty ثم أنشأنا 6 منشورات ضمن فئة تسمى "الفئة 1" و 5 منشورات خدمة ضمن فئة تسمى "خدمات".

لإبقاء الأمور سهلة ، سنبقي رمز الحلقة بسيطًا قدر الإمكان من خلال عرض قائمة بعناوين المنشورات فقط.

 if ( have_posts() ) { while ( have_posts() ) { the_post(); the_title( '<h3 class="entry-title">', '</h3>' ); } }

هذا يعني أننا سنرى في صفحتنا الرئيسية شيئًا مثل هذا:

الشروع في تخصيص إخراج الصفحة الرئيسية لدينا

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

سننتقل الآن إلى إنشاء قالب الصفحة الرئيسية المخصص الخاص بنا حيث سنقوم بتضمين مخرجات مخصصة.

للقيام بذلك ، قم بإنشاء ملف يسمى custom-homepage.php واحفظه في مجلد السمة الخاصة بك. أضف الكود التالي إلى هذه الصفحة:

 <?php /* * Template Name: My custom homepage template */ get_header(); if ( have_posts() ) { while ( have_posts() ) { the_post(); the_title( '<h4 class="example"></h4>' ); } } get_footer();

بعد ذلك ، توجه إلى مسؤول WordPress الخاص بك وقم بإنشاء صفحة تسمى "صفحتي الرئيسية" وحدد "نموذج صفحتي الرئيسية المخصص" من القائمة المنسدلة للقالب باعتباره نموذجًا.

ثم لجعل هذه الصفحة الرئيسية الافتراضية ، ستحتاج إلى تحديدها في قائمة الإعدادات (الإعدادات> القراءة> صفحة ثابتة).

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

لقد حصلنا الآن على هذا الإعداد ، دعنا نضيف بعض الاستعلامات إلى نموذج "نموذج صفحتي الرئيسية المخصصة".

إضافة استعلامات مخصصة

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

لنبدأ باستبدال الحلقة الحالية (الموجودة في index.php عند السطر 79) بهذه الحلقة:

 $args = array( 'posts_per_page' => 8, 'orderby', 'date', 'order', 'DESC' ); $query = new WP_Query( $args ); while ( $query->have_posts() ) : $query->the_post(); the_title( '<h4 class="example"></h4>' ); endwhile;

ستعني هذه الحلقة أن صفحتك الرئيسية ستعرض الآن أحدث 8 مشاركات لك (كما هو موضح أدناه):

بعد ذلك ، إذا كنت تريد تضمين نوع المنشور المخصص "كتب" (أو أي نوع منشور آخر مخصص لهذه المسألة) ، فسنضيف حلقة ثانية لمنشورات الكتاب أسفل الحلقة الأولى مثل هذه:

 echo '<h4>Books</h4>'; $args = array( 'post_type' => 'book', 'posts_per_page' => 8 ); $query = new WP_Query( $args ); while ($query->have_posts()) : $query->the_post(); the_title( '<h4 class="example"></h4>' ); endwhile;

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

كسر استعلام مخصص في أجزاء

قد يكون من المفيد تقسيم الاستعلام المخصص إلى أجزاء. قد يكون سبب القيام بذلك هو أنك تريد "مقاطعة" الاستعلام الأول عن طريق إظهار منشورات من فئة أو نوع منشور آخر قبل استئناف الحلقة الأولية ثم. يكون هذا مفيدًا على سبيل المثال ، إذا كنت ترغب في إظهار أحدث المنشورات من فئة ثم إظهار محتوى آخر قبل الانتهاء أخيرًا بمزيد من "أحدث المشاركات" لإنهاء الصفحة.

دعنا نقفز إلى هذا. للبدء ، احذف محتويات ملف custom-homepage.php الذي استخدمناه من قبل وأضف الكود أدناه.

 <?php /* * Template Name: My custom homepage template */ get_header(); //////////// // Services Posts loop echo '<h4>Services</h4>'; $args = array( 'posts_per_page' => 3, 'category_name'=> 'services' ); $services = new WP_Query( $args ); while ( $services->have_posts() ) : $services->the_post(); the_title( '<h4 class="example"></h4>' ); endwhile; // Books Posts in between echo '<h4>Books</h4>'; $args = array( 'post_type' => 'book', ); $books = new WP_Query( $args ); while ( $books->have_posts() ) : $books->the_post(); the_title( '<h4 class="example"></h4>' ); endwhile; // Resume Services Posts loop echo '<h4>More Services</h4>'; $args = array( 'offset' => '3', 'posts_per_page' => 3, 'category_name'=> 'services' ); $services = new WP_Query( $args ); while ( $services->have_posts() ) : $services->the_post(); the_title( '<h4 class="example"></h4>' ); endwhile; //////////// get_footer();

في الحلقة الأولى نسترجع 3 مشاركات من فئة الخدمات. لاستئناف منشورات فئة الخدمات في الحلقة الثالثة مع تجنب التكرارات ، نحدد الإزاحة => 3 . هذا يعني أننا سنرى ما يلي:

بالطبع يمكنك تغيير قيمة الإزاحة إلى أي رقم تريده.

أضف منشورات مخصصة إلى آخر استعلام عن المنشورات

ماذا لو أردنا تضمين منشورات الكتاب في أحدث منشورات الصفحة الرئيسية؟ لا تتضمن الحلقة الافتراضية مشاركات مخصصة افتراضيًا. هنا كيف يمكننا إصلاح هذا.

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

الطريق الذي يجب اتباعه هنا هو استخدام خطاف pre_get_posts . يتم تقديم هذا الخطاف في ملف wp-includes/class-wp-query.php ويستخدم لتخصيص كائن $query و WordPress Loop الرئيسي كما تراه مناسبًا. يتم تنفيذه بعد إنشاء كائن متغير الاستعلام ، ولكن قبل تشغيل الاستعلام الفعلي.

افتح ملف functions.php الخاص بالثيم النشط وأدخل الجزء التالي من الكود في النهاية:

 function homepage_add_cpt( $query ) { if ( $query->is_main_query() && is_home() ) { $query->set( 'post_type', array( 'post', 'book' ) ); } } add_action( 'pre_get_posts', 'homepage_add_cpt' );

ما يفعله هذا الرمز في شرط if هو التأكد من تطبيق التعديلات في الصفحة الرئيسية فقط أثناء تشغيل الاستعلام الرئيسي.

إذا قمت بزيارة صفحتك الرئيسية الآن ، فستلاحظ أنه في أحدث المنشورات ، يتم أيضًا تضمين منشورات "الكتاب" المخصصة.

استنتاج

إلى حد كبير دون استثناء ، كل ما تحتاج إلى تحقيقه من حيث المحتوى لصفحة WordPress الرئيسية الخاصة بك ممكن. كما أوضحنا هنا ، يعد استخدام WordPress Multiple Loops طريقة فعالة لتخصيص الإخراج الذي يظهر على صفحتك الرئيسية. نهجنا هنا هو مجرد واحد من العديد. يوفر WordPress مستويات لا تصدق من التحكم في الإخراج الذي يظهر على موقعك. جرب الأدوات التي يقدمونها لتحقيق ما تريد!