انتقل إلى المحتوى
مساحة عربية للمعرفة والأدوات اليوميةتعرّف على مواضيع
البرمجة

دليل استخدام استعلامات WP_Query

أبلغ عن هذا المحتوى
في هذه الصفحة
  1. أولًا: ما هي WP_Query؟
  2. ثانيًا: البنية الأساسية لـ WP_Query
  3. ثالثًا: المعلمات الأساسية للاستعلام
  4. رابعًا: استعلامات الأنواع المخصصة (Custom Post Types)
  5. خامسًا: استعلام التصنيفات (Taxonomy Queries)
  6. سادسًا: استعلامات الحقول الوصفية (Meta Queries)
  7. سابعًا: استعلامات التاريخ والوقت
  8. ثامنًا: الجمع بين شروط متعددة
  9. تاسعًا: استعلامات متقدمة باستخدام المعاملات المنطقية
  10. عاشرًا: الأداء وتحسين الاستعلامات
  11. الحادي عشر: تقنيات مفيدة وملاحظات متقدمة
  12. جدول ملخص للمعلمات الأكثر استخدامًا في WP_Query
  13. المصادر والمراجع

الدليل الشامل في استخدام استعلامات WP_Query في ووردبريس

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

في هذا الدليل الموسّع، سيتم تناول جميع جوانب WP_Query بشكل منهجي وعميق، ابتداءً من الأساسيات وحتى الاستعلامات المعقدة والمتقدمة، مع تغطية الهيكل، المعلمات، الاستخدامات المختلفة، الأداء، الأخطاء الشائعة، والتقنيات المرتبطة.


أولًا: ما هي WP_Query؟

WP_Query هي فئة (Class) موجودة ضمن نواة ووردبريس، وهي مسؤولة عن تنفيذ استعلامات SQL بطريقة آمنة ومدارة من خلال نظام ووردبريس. بعبارة أخرى، تُستخدم WP_Query لطلب التدوينات (أو الأنواع الأخرى من المنشورات) من قاعدة البيانات بناءً على معايير معينة يحددها المطور.

php
$query = new WP_Query( array( 'post_type' => 'post', 'posts_per_page' => 10, ) );

الكود أعلاه يسترجع آخر 10 تدوينات من نوع post.


ثانيًا: البنية الأساسية لـ WP_Query

عند إنشاء كائن جديد من WP_Query، يُمرر مصفوفة من المعلمات (arguments) تُحدد خصائص الاستعلام. المعلمات تدعم مجموعة كبيرة من الخيارات التي تتحكم في نوع المحتوى، العدد، الترتيب، الفئات، التصنيفات، الحقول الوصفية، التاريخ، والمزيد.

البنية العامة:

php
$query = new WP_Query( array( // معلمات الاستعلام ) ); if ( $query->have_posts() ) { while ( $query->have_posts() ) { $query->the_post(); // عرض المحتوى } wp_reset_postdata(); }

ثالثًا: المعلمات الأساسية للاستعلام

المعلمة الوصف
'post_type' لتحديد نوع المنشور مثل post, page, أو نوع مخصص
'posts_per_page' لتحديد عدد النتائج المسترجعة
'orderby' لترتيب النتائج بناءً على قيمة معينة مثل date, title, meta_value
'order' تحديد الترتيب تصاعدي (ASC) أو تنازلي (DESC)
'category_name' لاستعلام التدوينات حسب اسم الفئة
'tag' لاستعلام التدوينات حسب الوسوم
'paged' لتفعيل الترقيم (pagination)

رابعًا: استعلامات الأنواع المخصصة (Custom Post Types)

عند العمل مع أنواع منشورات مخصصة، مثل “مشاريع”، يمكن استخدام post_type لعرض هذه الأنواع بسهولة:

php
$query = new WP_Query( array( 'post_type' => 'project', 'posts_per_page' => -1, ) );

خامسًا: استعلام التصنيفات (Taxonomy Queries)

يمكن استهداف تصنيفات مخصصة باستخدام tax_query:

php
$query = new WP_Query( array( 'post_type' => 'product', 'tax_query' => array( array( 'taxonomy' => 'product_cat', 'field' => 'slug', 'terms' => 'electronics', ), ), ) );

يدعم tax_query عمليات أكثر تعقيدًا من خلال الجمع المنطقي بين الشروط باستخدام relation (مثل AND, OR).


سادسًا: استعلامات الحقول الوصفية (Meta Queries)

للاستعلام بناءً على الحقول الوصفية، تُستخدم meta_query:

php
$query = new WP_Query( array( 'post_type' => 'event', 'meta_query' => array( array( 'key' => 'event_date', 'value' => '2025-01-01', 'compare' => '>=', 'type' => 'DATE', ), ), ) );

تُستخدم meta_query بكثرة عندما يحتوي المحتوى على بيانات إضافية محفوظة كـ Metadata.


سابعًا: استعلامات التاريخ والوقت

php
$query = new WP_Query( array( 'date_query' => array( array( 'after' => 'January 1st, 2024', ), ), ) );

تُستخدم date_query لفلترة التدوينات بناءً على تاريخ النشر، ويمكن دمجها مع معلمات أخرى.


ثامنًا: الجمع بين شروط متعددة

يمكن الجمع بين meta_query و tax_query و date_query ضمن استعلام واحد لإنشاء استعلامات مركبة ومعقدة.

php
$query = new WP_Query( array( 'post_type' => 'course', 'meta_query' => array( array( 'key' => 'duration', 'value' => 10, 'compare' => '>=', 'type' => 'NUMERIC', ), ), 'tax_query' => array( array( 'taxonomy' => 'level', 'field' => 'slug', 'terms' => 'beginner', ), ), ) );

تاسعًا: استعلامات متقدمة باستخدام المعاملات المنطقية

php
'meta_query' => array( 'relation' => 'AND', array( 'key' => 'price', 'value' => 100, 'compare' => '>=', 'type' => 'NUMERIC', ), array( 'key' => 'availability', 'value' => 'in_stock', 'compare' => '=', ), ),

المرونة الكبيرة التي توفرها relation تجعل من الممكن إنشاء شروط منطقية شديدة التعقيد لتصفية المحتوى بدقة عالية.


عاشرًا: الأداء وتحسين الاستعلامات

عند التعامل مع مواقع تحتوي على كميات ضخمة من البيانات، يجب الانتباه إلى أداء الاستعلامات. بعض النصائح تشمل:

  • تجنب استخدام posts_per_page => -1 بشكل مفرط.

  • تأكد من وجود فهارس (Indexes) على الحقول الوصفية المستخدمة بكثرة.

  • استخدام fields => 'ids' عند الحاجة فقط إلى المعرفات لتقليل الحمل.


الحادي عشر: تقنيات مفيدة وملاحظات متقدمة

استخدام get_posts كبديل خفيف

get_posts() هي دالة مغلفة تستخدم WP_Query ولكن تُرجع نتائج أقل تعقيدًا، مما يجعلها أسرع للأغراض البسيطة.

php
$posts = get_posts( array( 'numberposts' => 5, 'post_type' => 'post', ) );

استخدام pre_get_posts لتعديل الاستعلام الرئيسي

php
function modify_main_query( $query ) { if ( is_home() && $query->is_main_query() ) { $query->set( 'posts_per_page', 5 ); } } add_action( 'pre_get_posts', 'modify_main_query' );

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


التعامل مع الاستعلامات الفارغة

في حال عدم وجود نتائج، يجب دائمًا استخدام شرط have_posts() لتجنب الأخطاء.


جدول ملخص للمعلمات الأكثر استخدامًا في WP_Query

المعلمة النوع الوصف
post_type سلسلة نوع المحتوى (post, page, custom)
posts_per_page عدد عدد النتائج
orderby سلسلة ترتيب النتائج (date, title, meta_value, إلخ)
order سلسلة تصاعدي ASC أو تنازلي DESC
meta_query مصفوفة استعلام حسب الحقول الوصفية
tax_query مصفوفة استعلام حسب التصنيفات
paged عدد لتفعيل الترقيم
date_query مصفوفة استعلام حسب التاريخ والوقت
author عدد أو مصفوفة لاستعلام التدوينات حسب الكاتب
s سلسلة البحث النصي داخل المحتوى

المصادر والمراجع


تم تصميم هذا الدليل ليكون مرجعًا تقنيًا شاملًا حول استخدام WP_Query في ووردبريس، وقد رُكز فيه على تغطية الجوانب العملية والبرمجية كافة بطريقة احترافية قابلة للتنفيذ مباشرة داخل مشاريع المطورين.

معلومة تحتاج إلى تصحيح؟ حدّد الجملة وأرسل بلاغًا واضحًا. أبلغ عن هذا المحتوى