در تکسانومی ها به سه صورت میتوان کوئری زد، که در ذیل آمده است و به توضیح آنها میپردازم.
در این مدل به یک تکسانومی خاص کار داریم و روی آن شروط خود را اعمل میکنیم به مثال زیر توجه کنید.
//تنظیمات کوئری
$args = array(
'post_type' => 'tin_pt_product',
'posts_per_page' => -1,
'tax_query' => array(
array(
'taxonomy' => 'tin_product_type',
'field' => 'slug', //term_id,name,slug
'terms' => 'apple',
'operator' => 'IN',//IN,NOT IN,AND,EXISTS,NOT EXISTS
'include_children' => true,
),
),
);
//کوئری زدن
$the_query = new WP_Query($args);
//حلقه
if ($the_query->have_posts()) {
while ($the_query->have_posts()) {
$the_query->the_post();
the_title();
echo '/';
}
} else {
echo 'no posts fund';
}
//ریست کردن پست دیتا
wp_reset_postdata();
WP_Query : توسط این تابع ما یک کوئری جدید از سیتم میگیریم، این تابع یک ورودی از نوع آرایه میگیرد، که توسط این آرایه میتوانیم شرط های خود را در کوئری خود لحاظ کنیم. در ادامه برخی از این شروط و تنظیمات را توضیح میدهیم
$the_query = new WP_Query($args);
post_type : همان طور که از نام آن مشخص است نوع پست تایپ یا پست تایپ ها را مشخص میکند یعنی میتوان به آن نام یک پست تایپ را دارد یا آرایه ای از پست تایپ ها را.
posts_per_page : مشخص میکند چه تعداد پست در صفحه نمایش داده شود. اگر -۱ بدهیم یعنی هر چند تا که وجود داشت را نمایش بده.
tax_query : مهم ترین بخش از این شرط هایی است که روی کوئری خود میزنیم، tax_query یک آرایه میگیرد و مواردی مثل تکسانومی ، فیلد ، ترم و … در آن مشخص میشود که در ادامه آن ها را توضیح میدهیم.
taxonomy : همان طور که از نام آن مشخص است نوع تکسانومی یا تکسانومی ها را مشخص میکند یعنی میتوان به آن نام یک تکسانومی را دارد و آرایه نمیگیرد.
field , terms : فیلد و ترم ها ارتباط مستقیم با هم دارند. فیلد ۳ مدل ورودی میتواند بگیرد term_id , name , slug
terms همجنین میتواند آرایه بگیرد، مثلا آرایه ای از id های ترم های مختلف.
'field' => 'term_id',
'terms' => '110',
//or
'field' => 'name',
'terms' => 'اپل',
//or
'field' => 'slug',
'terms' => 'nokia',
include_children : مقدار true یا false میگیرد، بیان میکند که آیا کوئری ما در برگیرنده فرزندان آن تکسانومی باشد یا خیر. به طور مثال اگر ما مقدار آن را false کنیم در صورتی که ما یک تکسانومی به نام گوشی موبایل داشته باشیم و این تکسانومی زیر مجموعه ای به نام سامسونگ داشته باشد، زمانی که ما تکسانومی سامسونگ را فقط انتخاب کنیم و موبایل را انتخاب نکنیم درست است که سامسونگ زیر مجموعه موبایل است ولی دیگر نمایش داده نمیشود و در همین شرایط اگر هم دسته موبایل و هم دسته سامسونگ را انتخاب کنیم نمایش داده میشود چون در دسته موبایل که دسته اصلی هست قرار دارد.
operator : پنج مدل ورودی مختلف میگیرد که توسط آن ها میتوان شرط های جذابی روی کوئری خود اعمال کرد. که به شرح ذیل است :
نکته اگر بخواهیم کوئری که زدیم را به شکل کد ببینیم تا از صحت آن اگاه شویم میتوانیم، ریکوست کوئری خود را اکو کنیم مثل زیر
$the_query = new WP_Query($args);
echo $the_query->request;
ساختار کوئری های چند گانه یا Multiple tax_query دقیقا شبیه به کوئری های تکی یا Single tax_query میباشد فقط با یک تفاوت آن هم در مقادیری است که میتوانیم به tax_query نسبت بدهیم. در کوئری های چند گانه در tax_query میتوانیم مقدار relation را مقدار دهی کنیم که مقدار and یا or میگیرد و سپس هر چند آرایه ای از شرط های مد نظر خود را زیر آن بیاوریم و relation با شرط and و یا or کوئری های ما را ایجاد میکند. به مثال زیر توجه کنید:
توجه : کوئری های چند گانه یا Multiple tax_query زیاد و تو در تو باعث فشار به سرور و کند شدن سایت ما میشود.
//تنظیمات کوئری
$args = array(
'post_type' => 'tin_pt_product',
'posts_per_page' => -1,
'tax_query' => array(
'relation' =>'AND', //AND,OR,
array(
'taxonomy' => 'tin_product_type',
'field' => 'slug', //term_id,name,slug
'terms' => 'apple',
),
array(
'taxonomy' => 'tin_product_color',
'field' => 'slug', //term_id,name,slug
'terms' => 'red',
),
),
);
//کوئری زدن
$the_query = new WP_Query($args);
//حلقه
if ($the_query->have_posts()) {
while ($the_query->have_posts()) {
$the_query->the_post();
the_title();
echo '/';
}
} else {
echo 'no posts fund';
}
//ریست کردن پست دیتا
wp_reset_postdata();
در مثال فوق بیان شده که برای ما محصولاتی از اپل را لیست کن که قرمز رنگ است. در هر کدام از آرایه های tax_query از یک تکسانومی متفاوت استفاده شده و این مورد داستان کوئری های چند گانه یا Multiple tax_query را جذاب میکند که یکی از تکسانومی های ما سلسله مراتبی و یکی هم غیر سلسله مراتبی است یا به زبان ساده استفاده همزمان از دسته و برچسب در شرط مورد نظر.
کوئری های تو در تو یا Nested tax_query مانند سایر کوئری های است که توضیح دادیم با این تفاوت که در یک آرایه ۲ یا چند آرایه دیگر به وسیله relation ایجاد کنیم به مثال زیر توجه کنید:
//تنظیمات کوئری
$args = array(
'post_type' => 'tin_pt_product',
'posts_per_page' => -1,
'tax_query' => array(
'relation' =>'AND', //AND,OR,
array(
'taxonomy' => 'tin_product_type',
'field' => 'slug', //term_id,name,slug
'terms' => 'apple',
),
array(
'relation' =>'OR',
array(
'taxonomy' => 'tin_product_color',
'field' => 'slug', //term_id,name,slug
'terms' => 'red',
),
array(
'taxonomy' => 'tin_product_color',
'field' => 'slug', //term_id,name,slug
'terms' => 'black',
),
),
),
);
//کوئری زدن
$the_query = new WP_Query($args);
در مثال فوق بیان کردیم که برای ما محصولاتی از برند اپل را نمایش بده (AND) که یا قرمز باشند یا (OR) مشکی.