خمس طرق لإنشاء استعلامات مخصصة في ووردبريس
في عالم إدارة المحتوى باستخدام ووردبريس، يُعتبر إنشاء الاستعلامات المخصصة (Custom Queries) من الأدوات الأساسية التي تمكّن المطورين ومديري المواقع من عرض المحتوى بطريقة متقدمة تلبي احتياجاتهم الخاصة. الاستعلامات المخصصة تتيح التحكم الكامل في كيفية استرجاع البيانات من قاعدة بيانات ووردبريس، سواء كانت مقالات، صفحات، منتجات، أو حتى بيانات مخصصة (Custom Post Types). هذه المرونة تتيح بناء مواقع ديناميكية، ذات أداء عالي وتجربة مستخدم متطورة.
في هذا المقال، سنستعرض بالتفصيل خمس طرق متقدمة لإنشاء استعلامات مخصصة في ووردبريس، مع شرح مبسط لكل طريقة، وكيفية استخدامها في السيناريوهات المختلفة.
مقدمة عن الاستعلامات في ووردبريس
ووردبريس يعتمد على قاعدة بيانات MySQL أو MariaDB، ويعتمد نظامه على استعلامات SQL لاسترجاع المحتوى. عندما نقول استعلام مخصص، نعني استعلامًا يتم تصميمه خصيصًا لجلب بيانات معينة من قاعدة البيانات، وليس الاستعلام الافتراضي الذي يستخدمه ووردبريس لعرض المقالات أو الصفحات.
الاستعلامات المخصصة في ووردبريس تتم عادةً باستخدام فئة WP_Query أو دوال مشابهة مثل get_posts و query_posts. إضافة إلى ذلك، يمكن الاستفادة من الدوال الوظيفية مثل pre_get_posts لتعديل الاستعلامات الافتراضية.
1. استخدام فئة WP_Query لإنشاء استعلام مخصص
ما هي WP_Query؟
WP_Query هي الفئة الأساسية لإنشاء استعلامات مخصصة في ووردبريس. توفر هذه الفئة وسيلة قوية لاسترجاع أنواع المحتوى المختلفة من قاعدة البيانات مع تحديد شروط متعددة مثل التصنيفات، الوسوم، عدد النتائج، ترتيب النتائج، وغيرها.
كيف تستخدم WP_Query؟
يمكن إنشاء كائن من فئة WP_Query مع تمرير مجموعة من المعاملات (arguments) التي تحدد شروط الاستعلام.
مثال على استعلام لاسترجاع آخر 10 مقالات من تصنيف معين:
php$args = array(
'post_type' => 'post',
'posts_per_page' => 10,
'category_name' => 'technology',
'orderby' => 'date',
'order' => 'DESC'
);
$custom_query = new WP_Query($args);
if($custom_query->have_posts()) {
while($custom_query->have_posts()) {
$custom_query->the_post();
the_title(''
, '');
the_excerpt();
}
wp_reset_postdata();
}
المميزات
-
مرونة عالية في تحديد الشروط.
-
القدرة على استرجاع أي نوع من أنواع المحتوى (مقالات، صفحات، محتوى مخصص).
-
دعم الترتيب والتصفية المتقدمة.
2. استخدام دالة get_posts للاستعلامات البسيطة
تعتبر دالة get_posts طريقة مختصرة وسهلة لإنشاء استعلامات مخصصة، لكنها أقل تعقيدًا من WP_Query. تعيد هذه الدالة مصفوفة من الكائنات WP_Post بحسب الشروط المحددة.
مثال على استخدام get_posts
php$args = array(
'post_type' => 'product',
'posts_per_page' => 5,
'meta_key' => 'price',
'orderby' => 'meta_value_num',
'order' => 'ASC'
);
$products = get_posts($args);
foreach($products as $product) {
setup_postdata($product);
echo ''
. get_the_title($product) . '';
echo 'Price: '
. get_post_meta($product->ID, 'price', true) . '';
}
wp_reset_postdata();
الفرق بين WP_Query و get_posts
-
get_postsيستخدمWP_Queryداخليًا لكنه يعيد نتائج بسيطة ومصفوفة. -
لا يدعم بعض الوظائف المتقدمة مثل تقسيم الصفحات pagination بسهولة.
-
مناسب للعمليات السريعة التي تحتاج فقط إلى عرض عدد معين من النتائج.
3. تعديل الاستعلامات الافتراضية باستخدام فلتر pre_get_posts
في بعض الحالات، قد لا يكون الهدف إنشاء استعلام جديد، بل تعديل الاستعلام الأساسي لووردبريس لصفحة معينة أو نوع محتوى.
كيف يعمل pre_get_posts؟
فلتر pre_get_posts يسمح بالتلاعب بالاستعلام قبل تنفيذه مباشرة، مما يوفر وسيلة ممتازة لتغيير سلوك عرض المحتوى الافتراضي.
مثال عملي
تعديل صفحة المدونة لعرض 20 مقالًا بدلاً من العدد الافتراضي:
phpfunction modify_main_query( $query ) {
if( !is_admin() && $query->is_main_query() && is_home() ) {
$query->set( 'posts_per_page', 20 );
}
}
add_action( 'pre_get_posts', 'modify_main_query' );
المميزات
-
لا تحتاج لتغيير ملفات القالب.
-
يمكن التحكم في الاستعلامات حسب النوع، الصفحة، أو أي شرط آخر.
-
يحافظ على قابلية التحديث والتوافق مع إضافات ووردبريس.
4. استعلامات مخصصة عبر WP_Meta_Query للبحث في حقول البيانات المخصصة
تدعم ووردبريس تخزين بيانات مخصصة لكل مقال أو صفحة عبر ما يعرف بالـ Meta Fields. يسمح لك استخدام meta_query ضمن WP_Query بالبحث في هذه الحقول.
الاستخدامات الشائعة
-
استرجاع المقالات أو المنتجات حسب سعر معين.
-
استعراض المحتوى بناءً على تاريخ مخصص أو حالة معينة.
-
تصفية المحتوى حسب بيانات مخصصة مثل المدينة، الفئة العمرية، وغيرها.
مثال على meta_query
php$args = array(
'post_type' => 'product',
'meta_query' => array(
array(
'key' => 'price',
'value' => 100,
'compare' => '>',
'type' => 'NUMERIC'
)
)
);
$query = new WP_Query($args);
while($query->have_posts()) {
$query->the_post();
echo ''
. get_the_title() . '';
echo 'Price: '
. get_post_meta(get_the_ID(), 'price', true) . '';
}
wp_reset_postdata();
توضيحات
-
compareيمكن أن يكون:=,!=,>,<,>=,<=,LIKE,NOT LIKE, وغيرها. -
typeيحدد نوع البيانات: نصي، رقمي، تاريخ.
5. استعلامات SQL مخصصة باستخدام $wpdb
في حالات متقدمة، عندما لا تغطي فئة WP_Query أو دوالها كافة الاحتياجات، يمكن اللجوء إلى تنفيذ استعلامات SQL مباشرة على قاعدة البيانات عبر الكائن $wpdb.
ما هو $wpdb؟
هو الكائن المسؤول عن التعامل مع قاعدة بيانات ووردبريس بطريقة آمنة، مع دعم للاستعلامات المحمية ضد هجمات حقن SQL.
مثال على استعلام مخصص باستخدام $wpdb
phpglobal $wpdb;
$results = $wpdb->get_results(
$wpdb->prepare(
"SELECT ID, post_title FROM $wpdb->posts WHERE post_status = %s AND post_type = %s ORDER BY post_date DESC LIMIT %d",
'publish',
'post',
5
)
);
foreach($results as $post) {
echo ''
. esc_html($post->post_title) . '';
}
مميزات استخدام $wpdb
-
تحكم كامل في الاستعلامات.
-
القدرة على تنفيذ استعلامات معقدة تتجاوز حدود فئة
WP_Query. -
يمكن ربط عدة جداول لإنشاء استعلامات مركبة.
محاذير
-
يجب استخدام
$wpdb->prepareدائمًا لتأمين الاستعلامات. -
ليس مناسبًا للمستخدمين المبتدئين.
-
قد يؤدي سوء استخدامه إلى مشاكل في الأداء أو أمان الموقع.
مقارنة بين الطرق الخمس لإنشاء الاستعلامات المخصصة
| الطريقة | مستوى التعقيد | المرونة | الاستخدام النموذجي | المميزات الأساسية |
|---|---|---|---|---|
| WP_Query | متوسط إلى عالي | عالي جدًا | إنشاء استعلامات معقدة مع شروط متعددة | مرونة عالية ودعم لأنواع المحتوى المختلفة |
| get_posts | منخفض | متوسط | استعلامات بسيطة وسريعة لاسترجاع عدد محدود من المحتوى | سهولة وسرعة التنفيذ |
| pre_get_posts | متوسط | متوسط إلى عالي | تعديل الاستعلامات الافتراضية في صفحات معينة | تعديل ديناميكي بدون تغيير القوالب |
| WP_Meta_Query ضمن WP_Query | متوسط | عالي | تصفية المحتوى حسب الحقول المخصصة | دعم متقدم للبحث داخل البيانات المخصصة |
| $wpdb | عالي | عالي جدًا | استعلامات SQL مخصصة ومعقدة خارج إطار WP_Query | تحكم كامل في الاستعلامات وقاعدة البيانات |
أهمية الاستعلامات المخصصة في تطوير مواقع ووردبريس
تكمن قوة ووردبريس في سهولة تخصيص المحتوى حسب احتياجات الموقع، والاستعلامات المخصصة تلعب الدور المحوري في ذلك. من خلالها يمكن بناء مواقع إلكترونية معقدة تشمل متاجر إلكترونية، مدونات متخصصة، مواقع تعليمية، أو منصات تواصل اجتماعي مصغرة.
التحكم في طريقة عرض المحتوى عبر الاستعلامات المخصصة يسمح بتحسين تجربة المستخدم، رفع مستوى الأداء، وتقليل التحميل غير الضروري على قاعدة البيانات، خصوصًا عندما تكون الاستعلامات دقيقة وفعالة.
نصائح لتحسين أداء الاستعلامات المخصصة
-
استخدام الكاش (Cache): تخزين نتائج الاستعلامات الثقيلة مؤقتًا يقلل الضغط على قاعدة البيانات.
-
تقليل عدد الحقول المسترجعة: حدد الحقول المطلوبة فقط لتقليل حجم البيانات المنقولة.
-
تجنب الاستعلامات المتكررة: اجعل الاستعلامات موجهة بشكل دقيق لتفادي إعادة استدعاء نفس البيانات.
-
استخدام فهارس (Indexes) في قاعدة البيانات: خاصة عند استخدام الاستعلامات المعقدة مع حقول مخصصة.
-
اختبار الأداء: يمكن استخدام أدوات مثل Query Monitor لتحليل أداء الاستعلامات.
خاتمة
إن إنشاء استعلامات مخصصة في ووردبريس يعد مهارة حيوية للمطورين ومديري المواقع الراغبين في تطوير تجربة المحتوى بشكل دقيق وفعال. من خلال الطرق الخمس التي تم استعراضها في هذا المقال، يمكن اختيار الأنسب حسب الحاجة، سواء كانت استعلامات بسيطة أو معقدة، تعديل الاستعلامات الافتراضية أو إنشاء استعلامات مباشرة عبر SQL.
هذه المرونة والتنوع هي ما جعلت ووردبريس النظام الأول لإنشاء وإدارة المواقع الإلكترونية، قادرًا على التكيف مع مختلف المتطلبات التقنية والفنية بسهولة واحترافية.

