قسمت ۲ – کوئری در تکسانومی / Taxonomy

در کوئری در تکسانومی به سه صورت میتوان کوئری زد که در ذیل آمده است و به توضیح آنها میپردازم.

  • کوئری های تکی یا Single tax_query
  • کوئری های چند گانه یا Multiple tax_query
  • کوئری های تو در تو یا Nested tax_query

کوئری های تکی یا Single tax_query

در این مدل به یک تکسانومی خاص کار داریم و روی آن شروط خود را اعمل میکنیم به مثال زیر توجه کنید.

//تنظیمات کوئری
$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

  • گر به field مقدار term_id را نسبت بدهیم در terms باید id آن term ای که مد نظر ماست را مشخص کنیم.
  • گر به field مقدار name را نسبت بدهیم در terms باید نام آن term ای که مد نظر ماست مشخص کنیم.
  • گر به field مقدار slug را نسبت بدهیم در terms باید نامک آن term ای که مد نظر ماست مشخص کنیم.

terms همجنین میتواند آرایه بگیرد، مثلا آرایه ای از id های ترم های مختلف.

'field' => 'term_id',
'terms' => '110',
//or
'field' => 'name',
'terms' => 'اپل',
//or
'field' => 'slug',
'terms' => 'nokia',

include_children

مقدار true یا false میگیرد، بیان میکند که آیا کوئری ما در برگیرنده فرزندان آن تکسانومی باشد یا خیر. به طور مثال اگر ما مقدار آن را  false کنیم. در صورتی که ما یک تکسانومی  به نام گوشی موبایل داشته باشیم. و این تکسانومی  زیر مجموعه ای به نام سامسونگ داشته باشد. زمانی که ما تکسانومی سامسونگ را فقط انتخاب کنیم و موبایل را انتخاب نکنیم درست است که سامسونگ زیر مجموعه موبایل است ولی دیگر نمایش داده نمیشود و در همین شرایط اگر هم دسته موبایل و هم دسته سامسونگ را انتخاب کنیم نمایش داده میشود چون در دسته موبایل که دسته اصلی هست قرار دارد.

operator

پنج مدل ورودی مختلف میگیرد که توسط آن ها میتوان شرط های جذابی روی کوئری خود اعمال کرد. که به شرح ذیل است :

IN

  • مواردی را نمایش بده که در terms مشخص شده. مثلا موبایل هایی که در دسته سامسونک وجود دارد + موبایل هایی که در دسته نوکیا وجود دارد.

NOT IN

  • همه موارد موجود در تکسانومی  مشخص شده را نمایش بده. غیر از مواردی که در terms مشخص شده است.

AND

  • مواردی را نمایش بده که در هر چند تا term ای که مشخص میکنیم موجود باشد. مثلا میگوییم محصولاتی را نمایش بده که هم موبایل باشد هم سامسونگ. نکته : چون موبایل مادر سامسونگ است ممکن است خروجی ما خالی شود در این موقع میبایست include_children را برابر false قرار دهیم.

نکته اگر بخواهیم کوئری که زدیم را به شکل کد ببینیم تا از صحت آن اگاه شویم میتوانیم، ریکوست کوئری خود را اکو کنیم مثل زیر

$the_query = new WP_Query($args);
echo $the_query->request;

مقدار EXISTS

  • زمانی که از EXISTS استفاده شود دیگر field و terms معنا و مفهوم ندارد به زبان ساده میگوید مثلا محصولاتی را نمایش بده که حداقل یک terms از تکسانومی ای که مشخص کرده ایم را داشته باشد.

مقدار NOT EXISTS

  • برعکس مورد فوق است و میگوید مثلا محصولاتی را نمایش بده که هیچ terms ای از تکسانومی ای که مشخص کرده ایم در آن موجود نباشد.

کوئری های چند گانه یا Multiple tax_query

ساختار کوئری های چند گانه یا 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

کوئری های تو در تو یا 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) مشکی.

اشتراک‌گذاری با یک کلیک

با یک کلیک، محتوای این صفحه را در شبکه‌های اجتماعی، ایمیل یا پیام‌رسان‌های مورد علاقه‌تان به‌سرعت به اشتراک بگذارید.

اشتراک‌گذاری صفحه قسمت ۲ – کوئری در تکسانومی / Taxonomy در شبکه‌های اجتماعی

نظرات شما برای ما ارزشمند است

متاسفانه تاکنون پیامی برای این مطلب ثبت نشده است. شما اولین شخصی باشید که پیام می‌گذارد.

نظرات کاربران

فرم افزودن دیدگاه

با ارسال نظرات خود ما را در ایجاد محتوای بهتر کمک کنید.

با خدمات تهران آی تی آشنا شوید

تهران آی تی با افتخار خدمات زیر را ارائه می‌دهد.