الدليل
الشامل في
استخدام استعلامات WP_Query
إن الحصول على المواضيع من قاعدة بيانات الوورد بريس هي إحدى المواضيع المفضلة لدي، وذلك بسبب المرونة الرائعة التي يتيحها صنف
WP_Query التي تسمح لنا بالحصول على مانريده، وتُعتبر هذه الطريقة هي إحدى الميزات الأساسية في أنظمة إدارة المحتوى CMS التي نراها عند العمل في الواجهات الأمامية front-end.
قد تظهر أمامنا العديد من الحالات التي نحتاج فيها إلى معلومات محددة مثل قائمة بالمهام المدخلة من قبل مستخدم محدد بين تاريخين معينين، أو قائمة بكل المواضيع والصفحات المُدرجة ضمن تصنيف معيّن، والتي أُدخِل عليها تعديلات خلال أقل من أسبوعين. يمكن الحصول على جميع هذه المعلومات باستخدام صنف WP_Query، والذي يمتاز بسهولة
استخدام وتطبيقه، حيث سنشرح في هذا المقال طريقة استخدامه وسندرج أيضًا العديد من الأمثلة البرمجية العملية.
ماهو استعلام الوورد بريس؟
لنستذكر أولًا بعض المعلومات العامة المتعلقة بالاستعلامات queries، حيث يمكن تعريف الاستعلام من قاعدة البيانات بأنه السؤال عن بعض المعلومات الموجودة ضمنها، والتي يمكن أن تكون أي معلومة ابتداءًا من أرقام الهواتف لجميع المستخدمين ومرورًا بكل التصنيفات الأخرى المتاحة.
كما ننوّه إلى أن ذكرنا لكلمة استعلام query، أو استعلام وورد بريس wordpress query نقصد بها الاستعلام الذي يقوم باسترجاع بعض المواضيع posts من قاعدة البيانات الخاصة بالوورد بريس.
تقوم كل صفحات الوورد بريس تقريبًا بإنشاء الاستعلام الخاص بها، فصحة الفهرسة (وهي الصفحة الرئيسية التي تظهر في المدونة) هي عبارة عن إظهار نتيجة الاستعلام عن آخر المواضيع المنشورة، كما أن فئة الأرشيف تحوي على استعلام يقوم باستعادة أحدث المشاركات داخل هذه الفئة وتُظهر النتيجة ضمن الفئة المحددة، أما بالنسبة لصفحات المؤلف فإنه تُظهر آخر المواضيع التي نشرها المؤلف.
كما أن المنشورات الوحيدة والصفحات المفردة تستخدم
استعلامات خاصة بها، ولكن في هذه الحالة تستعاد دومًا نتيجة واحدة فقط من خلال الاستعلام.
وبالتالي نجد أن أي صفحة افتراضية نُحمّلها تحوي في الغالب على استعلام يُجرى تلقائيًا.
الحلقة: كيفية
استخدام الاستعلامات
تُعتبر الحلقة طريقة لاستعادة مجموعة من المواضيع معًا، ولكن المسألة الأساسية هنا هي كيفية عرض المواضيع المُسترجعة، حيث أن كل موضوع يستخدم عناصر الإظهار و HTML الخاصة به، مع أنها جميعها تشترك في حلقة واحدة. ببساطة تقوم الحلقة باستخدام آلية خاصة في الوورد بريس تُمكّنها من الانتقال عبر المواضيع المُسترجعة مع تمكين الموضوع من عرضه بطريقته الخاصة.
يمكن شرح هذه الآلية من خلال الأسطر البرمجية:
<?php if ( have_posts() ) : ?>
<?php while ( have_posts() ) : the_post() ?>
<div <?php post_class() ?>>
<h2><?php the_title() ?></h2>
<?php the_content() ?>
</div>
<?php endwhile ?>
<?php else : ?>
<h2>Ooops, no posts here!</h2>
<?php endif ?>
إن المثال السابق هو مثال مبسط عمّا يمكن إيجاده في أي صفحة تحوي قوائم يوجد داخلها مجموعة من المواضيع، حيث نلاحظ في المثال أن الحلقة تحوي أيضًا على تعليمة if/else .
حيث قمنا باستخدام ()have_post للتأكد من أنه في حالة وجود موضوع مُستعاد، نُنشئ عنصر من هذا الموضوع ويكون الخرج عبارة عن العنوان ومحتوى الموضوع.
أما تابع ()the_post فإنه هو المسؤول عن معالجة حالة "هل يوجد مواضيع أخرى بعد الموضوع الحال أم لا".
وفي النهاية عند المرور على جميع المواضيع، تُنفّذ تعليمة else وهي إظهار نص محدد قد يشير كما في المثال السابق إلى انتهاء المواضيع.
الآن قبل المتابعة في هذه المقالة، أود توضيح بعض المصطلحات التي مرت معنا، أولا مصطلح الحلقة "the loop" والذي يستخدم لوصف حلقة تمر على قائمة مو المواضيع الموجودة في الصفحة والمنشورة على الوورد بريس، لنستعرض مثالًا توضيحيًا، في حال كان لدينا قسم في المدونة نستعرض فيه المواضيع المتعلقة بمدونتنا والتي نستعرضها في قسم "Related articles on our blog"
001.JPG
إن هذا القسم عبارة عن مجموعة من قوائم المواضيع التي تم الحصول عليها من خلال
استخدام استعلام مخصص وحلقة خاصة بها، ولكن لايمكننا اعتبار هذه القوائم تشبه القوائم التي نتجت عن الاستعلام السابق (في المثال البرمجي) وذلك لأنه العناصر الموجودة داخل هذا القسم ليست إحدى القوائم الافتراضية الخاصة بهذه الصفحة، إنما هي عبارة عن ناتج عدة
استعلامات وحلقات وُضعت في نفس الصفحة .
بناء استعلام مخصص
سنتعلم في هذه الفقرة طريقة بناء استعلام مخصص، لنفترض أننا نريد الحصول على قائمة بالمواضيع الخاصة بمؤلف معين ومُدرجة ضمن فئة معينة. هذا المثال يطرح طريقة برمجية للوصول إليها:
<?php
$args = array(
'author_name' => 'danielpataki',
'category_name' => 'wordpress'
);
$author_posts = new WP_Query( $args );
if ( $author_posts->have_posts() ) :
?>
<?php while ( $author_posts->have_posts() ) : $author_posts->the_post() ?>
<div <?php post_class() ?>>
<h2><?php the_title() ?></h2>
<?php the_content() ?>
</div>
<?php endwhile ?>
<?php else : ?>
<h2>Ooops, no posts here!</h2>
<?php endif ?>
يتعامل القسم الأول من التعليمات مع الاستعلام في قاعدة البيانات حيث ترى أنني قمت ببناء غرض
WP_Query من خلال تمرير مجموعة من المعاملات arguments، ولكن لاتقلق في حال لست من المهتمين بالبرمجة غرضية التوجه لأننا سنستخدمها بطريقة بسيطة جدًا، حيث مررنا اسم المؤلف من خلال المعامل author_name والفئة المختارة من خلال المعامل category_name.
الآن لترتيب هذه المواضيع ضمن قائمة واحدة نحتاج إلى تعديل الحلقة قليلًا وذلك من خلال
استخدام التوابع الخاصة بالغرض
WP_Query بدلًا من
استخدام التوابع ()have_post و ()the_post وذلك يعني أن نسبق اسم التابع باسم المتغير بالشكل ()variable_name->function$.
مع العلم أنني لن أعرض الحلقة في الأمثلة التالية وذلك لأن الفكرة نفسها ستتكرر دومًا، والآن اسم متغيرنا هو $custom_post لذلك سنستخدم التوابع ()custom_posts->have_post$ و ()custom_posts->the_post$.
معاملات WP_Query
إن بناء استعلام مخصص يعتمد بالأساس على تغيير المعاملات parameters، ومن الأمثلة على الاستعلامات المخصصة استعلام الحصول على المواضيع من تاريخ محدد، المؤلفين، نمط نشر معين، تصنيفات مخصصة، وحالات وأمور أخرى.
الآن لنلق نظرة على جميع المعاملات من خلال بعض الأمثلة الأساسية البسيطة.
معامل المؤلف Author Parameters
يوجد أربع طرق مختلفة يمكن استخدامها لتجميع المؤلفين، حيث أن المعامل author يقبل رقم تعريفي وحيد لمؤلف محدد، أو قائمة من الأرقام المعرفة للمؤلفين مفصولة عن بعضها بفاصلة، كما يمكن
استخدام السالب أمام الأرقام التعريفية للمؤلفين لاستبعادها من ناتج الاستعلام:
// Posts from the author with the ID of 42
$args = array(
'author' => 42
);
// All posts except the ones from author 42
$args = array(
'author' => -42
);
// Posts from author 42, 38 and 55
$args = array(
'author' => '42,38,55'
);
// Posts from everyone except author 42 and 38
$args = array(
'author' => '-42,-38'
);
يمكن
استخدام المعامل author_name في حال كنا نريد تمرير اسم المؤلف بدلًا من رقمه التعريفي، ولكن من المهم الانتباه إلى
استخدام اسم المستخدم username الصحيح.
$args = array(
'author_name' => 'danielpataki'
);
المعاملان المتبقيان والمتعلقان بالمؤلف هما author_in و author_not_in حيث أُضيف هذين المعاملين في النسخ اللاحقة من الوورد بريس في 3.7 حيث تعرّف المؤلفين من خلال إدخال أرقام المؤلفين على شكل مصفوفة.
// Posts from author 42, 38 and 55
$args = array(
'author__in' => array( 42, 38, 55 )
);
// Posts from everyone except author 42 and 38
$args = array(
'author__not_in' => array( 42, 38 )
);
إن هذه الطريقة لاتبدو مختلفة كثيرا عن
استخدام المعامل author ولكن هذه الطريقة أفضل من حيث الطريقة التنظيمية.
حالة استخدام: إعداد قائمة بمقالات المؤلفين الأعلى تصنيفًا
لنلق نظرة على كيفية بناء قائمة بمقالات المؤلفين الأعلى تصنيفًا. حيث نفترض أن لدينا نظام تصنيف في مكان ما يُخزن فيه التقييم العالمي لكل مؤلف ضمن جدول أساسي مع معرف خاص به هو التصنيف rating، ونستيطع الحصول على المطلوب من خلال التابع ()get_user الذي يحوي حلقة مخصصة لجمع مشاركات المؤلفين الأعلى تصنيفًا وإعادتها كخرج للتابع المذكور.
<?php
$args = array(
'meta_key' => 'rating',
'meta_value' => 4,
'meta_compare' => '>',
'fields' => 'id',
);
$top_users = get_users( $args );
$args = array(
'author__in' => $top_users;
);
$top_author_posts = new WP_Query( $args );
?>
معامل الفئة Category Parameters
يمكن تقييد إضافة المواضيع على أساس الفئة باستخدام ما لا يقل عن خمس توابع منفصلة.
إن المعامل cat يشبه المعامل author الذي شرحناه بالأعلى، من حيث إسناد الأرقام الصحيحة والتي تستخدم كمفتاح تعريف للفئة، كما يمكن إضافة إشارة السالب (-) من أجل استبعاد الفئة التي تُعرّف بالرقم الصحيح الذي يلي الإشارة.
// Posts from the category with the ID of 42
$args = array(
'cat' => 42
);
// All posts except the ones from category 42
$args = array(
'cat' => -42
);
// Posts from categories 42, 38 and 55
$args = array(
'cat' => '42,38,55'
);
// Posts from all categories except 42 and 38
$args = array(
'cat' => '-42,-38'
);
من الأفضل عدم
استخدام category_name وذلك لأن اسم الفئة غالبًا يستخدم في توليد رابط URL الخاص بالمقالة، من خلال
استخدام اسم الفئة وعنوان المقالة مع بعض التعديلات الخاصة مثل تحويل جميع الأحرف إلى أحرف صغيرة، وحذف جميع الكلمات الخاصة، واستبدال الفراغات بـ (-)، فمثلًا الفئة المخصصة لمراجعات الكتب والمسماة "Book Reviews" غالبًا ستجد قسم من رابط المقالة يحوي على "book-reviews".
$args = array(
'category_name' => 'book-reviews'
);
كما يمكننا
استخدام مصفوفة من الفئات تحوي ثلاثة معاملات هي category_in، و category_not_in والتي تماثل في طريقة عملها مماثلاتها في معامل author، حيث يمكن من خلالها التأكد من أن المواضيع التي تم تحديدها من خلال الفئات المدخلة فقط هي التي استُرجِعت بواسطة الاستعلام.
$args = array(
's' => 'awesome+wordpress+plugins',
'posts_per_page' => 8
);
$results = new WP_Query( $args );
echo "A total of " . $results->found_posts . " posts were found.<br />";
echo "We will be displaying " . $results->query_vars['posts_per_page'] . " posts per page if possible.<br />";
echo "We need a total of " . $results->max_num_pages . " pages to display the results".
حالة استخدام: الحصول على مقالات الفئات الأكثر استخدمًا
نقصد بالفئات الأكثر استخدمًا هي الفئات التي تحوي أكبر عدد من المواضيع المنشورة، وسنقوم بهذه العملية من خلال استرجاع قائمة بالفئات اعتمادًا على عدد العناصر (المواضيع) الموجودة داخل الفئة، ثم نقوم بتمرير هذه المعلومة للاستعلام الذي نبنيه للحصول على المواضيع المنشورة في الفئات الثلاثة الأعلى استخدامًا.
$args = array(
'number' => 5,
'orderby' => 'count',
'order' => 'DESC',
'fields' => 'ids'
);
$top_categories = get_terms( array( 'category' ), $args );
$args = array(
'category__in' => $top_categories;
);
$top_category_posts = new WP_Query( $args );
معامل الوسم Tag Parameters
يمرر لمعامل الوسم خمس متغيرات هي tag، tag_id، tag_and، tag_in، tag_not_in نلاحظ وجود ثلاث منها ذُكرت مع المعاملات السابقة، وسنشرحها من خلال المثال:
// Posts from the tag named "Awesome Colors"
$args = array(
'tag' => 'awesome-colors'
);
// Posts from the tag named "Awesome Colors" or "Awesome People"
$args = array(
'tag' => 'awesome-colors,awesome-people'
);
// Posts from the contain both "Awesome Colors" and "Awesome People"
$args = array(
'tag' => 'awesome-colors+awesome-people'
);
// Posts from the tag with the ID of 23
$args = array(
'tag_id' => 23
);
// Posts from tag 42, 38 and 55
$args = array(
'tag__in' => array( 42, 38, 55 )
);
// Posts from all tags except 42 and 38
$args = array(
'tag__not_in' => array( 42, 38 )
);
// Posts that are assigned both tag 42 and 38
$args = array(
'tag__and' => array( 42, 38 )
);
أود أن أشير إلى أمرين، الأول أن نواة الوورد بريس ليست متناسقة تمامًا، فمثلًا معامل category يتوقع أن يمرر لها معرف ID، أما معامل tag و category_name فيتوقع قسم من الرابط، لذلك فالتحدي الذي يواجهك في البرمجة هنا هو أن تجعل المعلومات التي تدخلها دومًا متناسقة قدر الإمكان، مع أنه في بعض الأحيان تُجبر على تخطي بعض هذه القواعد لأسباب قديمة كانت موجودة سابقًا في النواة.
أما الأمر الثاني هو أنه من الأفضل
استخدام المصفوفات في حال كان ذلك مسموحًا، فمثلًا على الرغم من أن معامل tag يتيح لك إدخال متغيرات متعددة ولكن من الأفضل
استخدام tag_in والمتغيرات الأخرى التي تسمح بتمرير القيم على شكل مصفوفة.
ولتسهيل الأمور أكثر في التعامل مع الوسوم يوجد أيضًا معاملين آخرين هما tag_slug_and و tag_slug_in ويكون التعامل معها بالشكل التالي:
// Posts from the tag named "Awesome Colors" or "Awesome People"
$args = array(
'tag_slug__in' => array( 'awesome-colors', 'awesome-people' )
);
// Posts from the contain both "Awesome Colors" and "Awesome People"
$args = array(
'tag_slug__and' => array( 'awesome-colors', 'awesome-people' )
);
حالة استخدام: الدمج بين معاملات الوسم، الفئة، المؤلف
بما أننا تعرفنا على بعض المعاملات يمكننا الدمج فيما بينها ضمن استعلام واحد، على سبيل المثال لنجمع المقالات المتميزة (التي أُضيف لها وسم "featured") لمؤلفين محددين وذلك في فئتي الكتب والأفلام.
$args = array(
'tag' => 'featured',
'category__in' => array( 43, 52 ),
'author__in' => array( 255, 930 )
);
$author_featured_posts = new WP_Query( $args );
أنواع المواضيع Post Type
تحوي الوورد بريس على عدد من أنواع المواضيع المبنية داخله بالأساس وهي موضوع post، الصفحة page، مرفقات attachment، مراجعة revision، و عنصر قائمة التنقل، ولكن أصبح من الشائع إضافة أنواع أخرى عند إدارة المشاريع مثل الأعمال، المنتجات، المنتديات وهكذا بحسب مايحتاجه المشروع من أنواع.
يسمى المعامل المخصص للتعامل مع أنواع المواضيع الجديدة post_type والذي يساعدنا في تحديد النوع الذي ينتمي له الموضوع المُراد نشره.
عند تمرير هذا المعامل سيقوم الاستعلام بالبحث عن المنشورات المنتمية لهذا النوع فقط، ولكن في حالة تمرير القيم على شكل مصفوفة فإن البيانات المُعادة ستكون جميع المنشورات التي تطابق هذا النوع.
// Return posts with the 'page' post type
$args = array(
'post_type' => 'page'
);
// Return posts from two custom post types
$args = array(
'post_type' => array( 'product', 'post' )
);
// Returns posts from all post types
$args = array(
'post_type' => 'any'
);
مع العلم أنه هذا المعامل له قيمة افتراضية هي post، ولذلك في حال كنت ترغب في استعادة أنواع أخرى من المنشورات عليك تحديدها بشكل واضح.
في حال
استخدام المعامل tax_query (سنتكلم عنه لاحقًا) ستصبح القيمة الافتراضية هي any.
حالة المنشور Post Status
كما في الفقرة السابقة الخاصة بأنواع المواضيع، يمكننا تحديد حالة منشور محدد أو حالات لعدة مواضيع باستخدام المعامل post_status والذي يمرر له قيمة من نوع نص string في حال المنشور وحيد أو مصفوفة في حال اخترنا أكثر من واحدة،.
تحوي الوورد بريس على ثماني حالات مبنية في النواة هي:
publish الموضوع Post أو الصفحة page منشورة
pending الموضوع قيد الانتظار للمراجعة
draft الموضوع حُفظ كمسودة
auto-draft الموضوع المُنشأ حديثًا ولكن بدون محتوى
future موضوع سينشر في المستقبل
private ليس معروضًا أمام المستخدمين غير المسجلين الدخول
inherit مراجعة (له علاقة بـ get_children)
trash الموضوع في سلة المهملات (هذه الحالة متاحة في النسخة رقم 2.9)
يمكننا أيضًا
استخدام القيمة any لنقول بأننا نريد تضمين جميع حالات الموضوع، أما القيمة الافتراضية فهي Publish لذلك من الأفضل أن تتأكد بأنك حددت الحالة في حال كنت ترغب بحالة مختلفة.
حالة استخدام: الإعلان عن المنتجات القادمة
لنفترض أنك تدير متجر كتب وتعلم بأن الكتب الأكثر مبيعًا المحتملة ستصدر قريبًا، حيث يمكنك بناء استعلام وورد بريس مخصص لبناء قائمة بهذه الكتب.
في هذه الحالة لاتحتاج إلى نشر الكتب على شكل مواضيع ثم
استخدام بعض الخدع لتستثنيها من العرض حتى يُؤمّن ويستطيع المستخدم طلبها، يمكنك فقط ترتيب قائمة مباشرة بها بالشكل التالي:
$args = array(
'post_status' => 'future',
'post_type' => 'product',
'category_name' => 'books'
);
معامل البحث The Search Parameter
يسمى المعامل الخاص بعملية البحث s، ويأخذ قيمة نصية string هي نفسها المُستخدمة في عملية البحث داخل الموضوع. ولكن يجب تأكد من ترميز العبارة النصية المُستخدمة في البحث، حيث يمكنك القيام بذلك من خلال
استخدام التابع urlencode الموجود في PHP والذي يساعدك في تحديد عدد الفراغات والمحارف الخاصة الأخرى وتحويل العبارة إلى كلمات يمكن البحث عنها.
$args = array(
's' => 'awesome+wordpress+plugins'
);
حالة استخدام: البحث في موضوع فرعي
يمكن البحث في المحتوى كاملًا من خلال شريط البحث الافتراضي الموجود في الوورد بريس باستخدام المعامل s، ولكن يمكن أن يبحث بطريقة أكثر مهنية من خلال الدمج بين معامل البحث والمعاملات الأخرى، سنطرح في المثال التالي طريقة للبحث في مواضيع فرعية متعددة:
// Show posts about ACF (Advanced Custom Fields) from the news category
$args = array(
's' => 'ACF',
'category_name' => 'news'
);
// Search an author's posts
$args = array(
's' => 'custom post types',
'author_name' => 'danielpataki'
);
// Search an array of custom post types
$args = array(
's' => 'wordpress',
'post_type' => array( 'project', 'portfolio' )
);
المواضيع المحمية بكلمة مرور
تستطيع اختيار الموضوع الذي ترغب بحمايته بكلمة مرور من المربع الخاص بإعدادات النشر، حيث يوفر لك هذا الخيار المزيد من حماية خصوصية المحتوى، أو يمكن استخدامه لبناء نموذج اشتراك.
في جميع الحالات التي تجعلك ترغب بإضافة كلمة مرور للموضوع الخاص بك، يمكنك
استخدام المعامل has_password لتحديد فيما إذا كنت ترغب بإدراج الموضوع إلى قائمة المواضيع المحمية بكلمة المرور.
يمكن أن يُمرَّر للمعامل has_password قيمة true عندها سيقوم الاستعلام بجمع المواضيع التي تم إعطاؤها كلمة مرور، أو قيمة false وبذلك يختار الاستعلام المواضيع التي لم تُزود بكلمة مرور، ولكن في حال كانت قيمة المعامل محذوفة أو تم إسناد null لها عندها ستُنشر جميع المواضيع.
كما يمكن
استخدام المعامل post_password من أجل إعداد قائمة بالمواضيع المحمية بكلمة مرور محددة.
// Return only password protected posts
$args = array(
'has_password' => true
);
// Return posts protected with the password: qweasd
$args = array(
'post_password' => 'qweasd'
);
حالة استخدام: لعبة صيد الكنز أونلاين
يمكن بناء لعبة مرحة باستخدام الوورد بريس بالشكل التالي، يقوم المستخدمون بحل الأحجية والحصول على كلمة المرور الخاصة بقائمة المواضيع التي تحوي على أدلة تقود للحل الأخير. الآن يجب على المستخدم وضع كلمة المرور في المكان المخصص لها وعند إدخالها وتثبيت الجواب، سينتقل المستخدم إلى صحفة تستخدم كلمة المرور المُدخلة كمعامل مُمرر لاستعلام بالشكل التالي:
$args = array(
'post_type' => 'clue',
'post_password' => 'treasurehunt2015'
);
وباستخدام حلقة كاملة تمر على جميع المواضيع الموجودة ستكون لدينا حالتان، الأولى في حال كانت كلمة المرور المُدخلة خاطئة عندها ستظهر رسالة للمستخدم محتواها "لم يعثر على مواضيع"، أما الحالة الثانية فهي في حال كانت كلمة المرور المدخلة صحيحة عندها ستُعرض قائمة بالمواضيع المحمية بكلمة المرور هذه.
تضمين، استبعاد، واستهداف مواضيع محددة
يوجد تسعة معاملات مختلفة تُستخدم للحصول على مواضيع معينة في الاستعلام:
المعامل p: يُستخدم في تجميع المواضيع بالاعتماد على معرف الموضوع ID.
المعامل name: يُستخدم في تجميع تجميع المواضيع من خلال تمرير slug كقيمة نصية له.
المعاملين page_id و page_name: الأول يشبه معامل p والثاني يشبه name ولكنها تعمل بالنسبة للصفحات، مع بعض الاختلاف بينهما.
حيث سيعملان بشكل متشابه تمامًا في حال تم تحديد قيمة للمعامل post_type أما في حال عدم تحديد هذه القيمة فإن معامل page_id سيعمل كما هو مُتوقع منه على عكس معامل p
المعاملين post_in و post_not_in: تعمل بنفس الطريقة التي تعمل بها شبيهاتها مع الفئات والوسوم حيث تقبل تمرير مصفوفة من مُعرِّفات المواضيع.
المعامل post_parent: يأخد معِّرف وحيد عندها يقوم الاستعلام بإعداد قائمة بالمواضيع التي تكون أبناء تابعة للموضوع المُحدد بالمعرف المذكور.
المعاملين post_parent_int و post_parent_not_int: كما في شبيهاتها يُمرَّر لها مصفوفة من معرِّفات المواضيع.
من المهم الأخذ بالحسبان نوع المنشور post_type عند التعامل مع هذه المعامل، ففي حال قمت بتضمين المُعرِّفات لمجموعة من أنواع المواضيع عندها ستحتاج لتمرير القيمة any للمعامل post_type، أو تدخل النوع المحدد الذي تبحث عنه.
// Grab post 532 only
$args = array(
'p' => 532
);
// Grab the post with the given slug
$args = array(
'name' => 'guide-to-wp-query'
);
// Retrieve page 55
$args = array(
'page_id' => 55
);
// Retrieve the about page
$args = array(
'pagename' => 'about'
);
// Get the specified 5 posts
$args = array(
'post__in' => array( 31, 36, 39, 91, 119 )
);
// Get all posts except the specified 5
$args = array(
'post__not_in' => array( 31, 36, 39, 91, 119 )
);
// Get all child posts of post 6
$args = array(
'post_parent' => 6
);
// Get posts which are the children of the listed posts
$args = array(
'post_parent__in' => array( 6, 23, 55 )
);
// Get posts which do not have the listed parents
$args = array(
'post_parent__not_in' => array( 6, 23, 55 )
);
حالة استخدام: الوصول إلى جميع المرفقات في الموضوع
في حال كنت ترغب بالحصول على قائمة للصور والمرفقات الأخرى الموجودة في المنشور، ستحتاج لاستخدام معاملات الآباء للوصول إلى الهدف المحدد، حيث تعد هذه الطريقة المثالية لتنفيذ فكرة التوليد التلقائي للمعرف أو قوائم التحويل.
global $post;
$args = array(
'post_parent' => $post->ID,
'post_type' => 'attachment',
'post_status' => 'any'
);
استعلامات التصنيف
بعد أن تعرفنا بشكل مفصل عن المعاملات المُستخدمة في الاستعلام وكيفية التعامل معها، يمكننا الانتقال إلى موضوع متقدم أكثر هو tax_query.
إنّ ميزة هذا المعامل بأنه عبارة عن مصفوفة، يمكن استخدمها لبناء شروط أكثر تعقيدًا، أو في بناء تصنيفات مخصصة بشكل أكبر.