تعداد بازدید: 2782

کوئری بر اساس postmeta در وردپرس (meta_query)

در این مقاله ما می خواهیم یاد بگیریم تا چطور بر اساس custom_fields یا post meta در وردپرس کوئری بگیریم. هر کوئری می تونه بر اساس شروط مختلفی پست های مختلفی رو بگیره. یکی از اون شروط فیلد های اضافی است که برای هر پست در جدول postmeta وجود داره.

نحوه استفاده از meta_query

♣ برای استفاده از meta_query ها ما می تونیم از کلاس WP_Query یا تابع get_posts استفاده کنیم.

♣ هر آرایه درون آرایه پارامتر meta_query یک شرط به حساب میاد که اگر تنهای یک آرایه داشته باشیم حالت simple و اگر چند آرایه داشته باشیم حالت multiple و اگر آرایه های تو در تو داشته باشیم حالت nested بوجود می آید که در حالت multiple , nested می توانیم از relation استفاده کنیم. مثل tax_query ها .

در ابتدا ما حالت single را بررسی می کنیم.

<?php
$args = array(
    'meta_query' =>array(
        array(
            'key' => 'key1',
            'value' => 'value1',
            'type' => 'CHAR',
            'compare' => '='
        )
    )
);
$query = new WP_Query( $args );

پارامتر های meta_query به قرار زیر هستند:

  • key : زمینه دلخواه یا کلید متای شما .
  • value : مقدار اون متا. که بسته به پارامتر نوع می تونه رشته یا عدد باشه و بسته به پرامتر compare می تونه آرایه یا single باشه.
  • type : نوع ورودی که به meta_value میدید رو تعیین می کنه که پارامتر های NUMERIC , BINARY , CHAR , DATE , DATETIME , DECIMAL , SIGNED , TIME , UNSIGNED رو میگیره و مقدار پیش فرض اون CHAR هست برای رشته ها.
  • compare : عملگر مقایسه رو برای value تعیین می کنه که پارامتر های زیر رو میگیره:
    = , !=>>=<<=LIKENOT LIKE  که برای meta_vlaue ها به صورت single استفاده میشه .

    IN , NOT IN , BETWEEN , NOT BETWEEN , EXISTS (only in WP >= 3.5), NOT EXISTS که در صورت استفاده باید meta_value به صورت آرایه باشه.

    REGEXP , NOT REGEXP , RLIKE که برای استفاده از عبارات منظم استفاده می شه.
    تشریح پارامتر EXISTS : یعنی صرفا key برای اون پست set شده باشه . می تونید در این مورد meta_value رو خالی بزارید.
    تشریح پارامتر NOT EXISTS : یعنی key برای اون پست set نشده باشه . در این مورد هم نیاز به meta_value نیست.
  • relation : رابطه ای که قرار است بین شروط که هر کدام در یک آرایه هست برقرار باشه برای گرفتن پست ها. بدین شکل که هر آرایه که حاوی key , value ,  type , compare هست یک شرط محسوب میشه و این شرط ها می تونن به صورت AND یا OR باشند.

استفاده از چند شرط یا حالت multiple در meta_query

در این حالت بیش از دو شرط (دو آرایه) داریم:

<?php
$args = array(
    'meta_query' =>array(
        'relation' => 'OR',
        array(
            'key' => 'key1',
            'value' => 'value1',
            'type' => 'CHAR',
            'compare' => '='
        ),
        array(
            'key' => 'key2',
            'value' => 'value2',
            'type' => 'CHAR',
            'compare' => '='
        )
    )
);
$query = new WP_Query( $args );

♣ می بینید که این بار استفاده از relation معنی پیدا می کنه.

استفاده از شرط های تودرتو یا nested در meta_query

در این حالت هر شرط می تونه از چند شرط دیگه تشگیل شده باشه که میشه آرایه های تودرتو:

<?php
$args = array(
    'meta_query' =>array(
        'relation' => 'OR',
        array(
            'key' => 'meta_key0',
            'value' => 'value0',
            'type' => 'CHAR',
            'compare' => '='
        ),
        array(
            'relation' => AND,
            array(
                'key' => 'key1',
                'value' => 'value1',
                'type' => 'CHAR',
                'compare' => '='
            ),
            array(
                'key' => 'key2',
                'value' => 'value2',
                'type' => 'CHAR',
                'compare' => '='
            )
        )
    )
);
$query = new WP_Query( $args );

نکته : آرایه ها در پایگاه داده به صورت serialize ذخیره میشن . اگر بخوایم یه کوئری بزنیم که یه مقدار خاص داخل آرایه ای از متا دیتا باشه باید از LIKE استفاده کنیم.

<?php
$args = array(
    'post_type' => 'news',
    'meta_query' => array(
        array(
            'key' => 'topics',
            'value' => 'sports',
            'compare' => 'LIKE'
        )
    )
);

در مثال بالا مثلا آرایه ای داریم در قالب متا دیتا در جدول postmeta که میخوایم پست هایی رو نمایش بده که عضور sport در اون آرایه باشه.

کوئری گرفتن بر مبنای postmeta بدون استفاده از meta_query

در این حالت ما بدون استفاده از meta_query و با استفاده از پارامتر های زیر یک کوئری بر اساس postmeta می زنیم. دقت داشته باشید تنها برای مورد single می توانید از این روش استفاده کنید.

<?php
$args = array(
    'meta_query' =>'',
    'meta_value' => '',
    'meta_type' => '',
    'meta_compare' => ''
);
  • meta_key : کلیدی که قراره بر اساس اون meta_value عملگر مقایسه روش انجام بشه.
  • meta_value : مقدار مد نظر برای meta_key .
  • meta_compare : نوع عملگر مقایسه.
  • meta_type : نوع meta_value که مقادیرش رو در چند خط قبل بررسی کردیم.

نکته مهم : برای مقایسه دو مقدار حتما باید نوع اون رو در نظر داشته باشید. به طور مثال عدد ۲۰ از عدد ۱۰۰ کوچکتره در صورتی که مبنا عددی باشه . برای مقایسه در مبنای عددی خود اعداد مقایسه می شن اما اگر شما مبنا رو رشته در نظر بگیرید کد ascii کاراکتر اول اون ها مقایسه میشه که ممکنه برای اعداد اشتباه اتفاق بیفته .

 

مطالب مشابه

آموزش نکات و تکنیک های برنامه نویسی وردپرس

cron job در وردپرس

مفهوم cron job در وردپرس یعنی انجام یه کار (job) به صورت سیکل زمانی (intreval) با زمان شروع مشخص(start time). به طور...

آموزش نکات و تکنیک های برنامه نویسی وردپرس

تکسونومی ها (taxonomy) در وردپرس

در این مقاله قصد داریم تا دسته بندی ها و تگ ها یا به صورت کلی تر taxonomy ها رو در وردپرس بررسی کنیم و پارامتر های تابع...

Product Type در ووکامرس

در ووکامرس مفهومی با هویت Taxonomy با نام product_type داریم که term های متفاوتی را دارا می باشد به طور مثال simple ,...

اشتراک گذاری :

مدیر وب سایت گنوتک . برنامه نویسی رو با زبان C در هفده سالگی شروع کردم . در حال حاضر به برنامه نویسی php برپایه معماری MVC , HMVC و همچنین سیستم مدیریت محتوای WordPress و فریم ورک محبوب لاراول علاقه مند هستم و دوست دارم اطلاعاتم رو با شما به اشتراک بگذارم.

۰ دیدگاه برای کوئری بر اساس postmeta در وردپرس (meta_query)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *