Panduan Utama Meta Query pada Postingan

Photo by Bram Naus on Unsplash

Dalam postingan ini Mangcoding akan sharing tentang Panduan Utama Meta Query pada Postingan berdasarkan Nilai Meta, dan kami berasumsi bahwa Anda sudah memiliki pengetahuan dasar tentang cara kerja WP_Query di WordPress. Sebelum kita mulai, ada beberapa contoh yang sangat sederhana. Contoh serupa dapat Anda temukan di WordPress Codex.

Seperti yang Anda ketahui, semua posting memiliki metadata yang dapat Anda isi di metabox “Bidang khusus” (metabox dapat disembunyikan). Jadi, misalnya Anda ingin mendapatkan postingan dengan meta key show_on_homepage dan meta value on, Anda bisa melakukannya dengan cara berikut :

$rd_args = array(
    'meta_key' => 'show_on_homepage',
    'meta_value' => 'on'
);


$rd_query = new WP_Query($rd_args);

Jika tidak, Anda perlu menanyakan semua posting kecuali yang memiliki pasangan kunci dan nilai meta ini, Anda dapat menggunakan parameter berikut :

$rd_args = array(
    'meta_key' => 'show_on_homepage',
    'meta_value' => 'on',
    'meta_compare' => '!='
);


$rd_query = new WP_Query($rd_args);

Jangan lupa bahwa semua contoh dalam posting ini disederhanakan, sehingga beberapa parameter WP_Query hilang, misalnya posts_per_page atau post_type.

Jika Anda tertarik dengan meta_compare nilai parameter lainnya, silakan lihat deskripsi parameter di bawah ini kemudian bandingkan, karena keduanya menerima nilai yang sama.

Ini adalah contoh yang sangat sederhana, hanya sebuah introdution. Tapi posting ini adalah tentang meta_query parameter. Parameter ini memungkinkan kita membuat filter posting dan skrip pencarian yang sangat bagus.

Link MangcodingPosting Kueri dengan Nilai Meta

Contoh sederhana, di bawah ini memungkinkan Anda untuk mendapatkan semua posting dengan nilai bidang khusus tertentu. Contoh dibawah ini kita ambil semua posting dengan nama bidang khusus “Color” dan nilai bidang khusus white, silahkan bisa gunakan kode dibawah :

$rd_args = array(
    'meta_query' => array(
        array(
            'key' => 'color',
            'value' => 'white'
        )
    )
);


$rd_query = new WP_Query($rd_args);

Jika Anda melihat halaman edit posting (di area admin) di setiap posting yang cocok dengan kueri, Anda akan melihat bagian berikut “Custom Fields” :

Custom Field Mangcoding

Dan jika Anda akan melakukan sebaliknya untuk mendapatkan semua posting kecuali yang memiliki kunci meta “color” dan nilai meta white, bisa menggunakan kode dibawah :

$rd_args = array(
    'meta_query' => array(
        array(
            'key' => 'color',
            'value' => 'white',
            'compare' => '!='
        )
    )
);


$rd_query = new WP_Query($rd_args);

Link MangcodingPostingan dengan beberapa Nilai Meta

Sekarang mari kita coba untuk mendapatkan semua postingan dengan nilai bidang khusus White OR Green “Color” :

$rd_args = array(
    'meta_query' => array(
        array(
            'key' => 'color',
            'value' => array('white', 'green'),
            'compare' => 'IN'
        )
    )
);


$rd_query = new WP_Query($rd_args);

Sekarang bagaimana cara mendapatkan semua postingan (produk di toko online misalnya) kecuali white products dan green products :

$rd_args = array(
    'meta_query' => array(
        array(
            'key' => 'color',
            'value' => array('white', 'green'),
            'compare' => 'NOT IN'
        )
    )
);


$rd_query = new WP_Query($rd_args);

Link MangcodingCara menggunakan “bandingkan” di meta_query

Seperti yang Anda lihat pada contoh di bawah ini dan pada contoh selanjutnya, ada compare parameter pada masing-masing parameternya. Sekarang kami ingin menunjukkan nilai mana yang dapat diterima dan apa artinya.

= (atau tidak disetel) Sama dengan,
!= – Tidak sama dengan,
< – Kurang dari,
<= – Kurang atau sama dengan, > – Lebih besar dari,
>= – Lebih besar dari atau sama dengan, contoh :

// the product price in this example is 2000 or more than 2000
$args = array(
    'meta_query' => array(
        array(
            'key' => 'price',
            'value' => 2000,
            'type' => 'numeric', // specify it for numeric values
            'compare' => '>='
        )
    )
);

LIKE – Memungkinkan mencari nilai meta untuk string tertentu, dalam contoh di bawah kueri mengembalikan semua posting di mana nama “nama_pertama” berisi John, bisa juga Johnny, Johnathan, somethingJohnsomething :

$args = array(
    'meta_query' => array(
        array(
            'key' => 'first_name',
            'value' => 'John',
            'compare' => 'LIKE'
        )
    )
);

Dua hal lagi : pertama – tidak peka huruf besar-kecil, kedua – simbol wildcard @ tidak diperlukan.

NOT LIKE – mirip dengan LIKE hanya bekerja dengan cara yang berlawanan – nilai meta tidak boleh berisi string yang diberikan.

IN – Nilai meta postingan harus berisi salah satu nilai dari array yang diberikan, Anda dapat melihat contoh di atas

NOT IN – nilai meta tidak boleh berisi nilai APAPUN dalam larik yang diberikan.

BETWEEN – nilai post meta harus berada di antara rentang nilai yang diberikan, contoh :

// the product price is more than 2000 and less than 4000
$args = array(
    'meta_query' => array(
        array(
            'key' => 'price',
            'value' => array(2000, 4000),
            'type' => 'numeric',
            'compare' => 'BETWEEN'
        )
    )
);

 

Itu juga bisa berfungsi untuk tanggal, Anda bisa melihat contoh di bawah ini .
NOT BETWEEN – tidak dalam kisaran tertentu.
EXISTS (WordPress >= 3.5) – Jika nilai meta dari kunci meta tertentu ada atau kosong / nol.

$args = array(
    'meta_query' => array(
        array(
            'key' => 'misha_key',
            'compare' => 'EXISTS'
        )
    )
);

 

Jadi, sebenarnya ini memeriksa apakah ada kunci meta, Anda bahkan tidak perlu memberikan nilai apa pun dengan parameter ini.
NOT EXISTS (WordPress >= 3.5) – jika kunci meta yang diberikan tidak ada sama sekali
REGEXP (WordPress >= 3.7) – memungkinkan Anda membandingkan nilai meta dengan ekspresi reguler, contoh :

$args = array(
    'meta_query' => array(
        array(
            'key' => 'misha_key',
            'value' => '^[0-9]*$', // "misha_key" must be only numbers
            'compare' => 'REGEXP'
        )
    )
);

 

NOT REGEXP (WordPress >= 3.7) – Mirip dengan REGEXP tetapi nilai meta tidak boleh sama dengan ekspresi reguler yang Anda berikan
RLIKE (WordPress >= 3.7) – sinonimnya dengan REGEXP

Link MangcodingCara Menggunakan “bandingkan => antara” untuk Tanggal di meta_query

Anda juga dapat menggunakan meta_query untuk memeriksa apakah bidang khusus berada di antara dua tanggal.

Hal terpenting yang harus Anda ingat adalah bahwa format tanggal Anda harus seperti YYYY-MM-DD atau YYYY/MM/DD atau seperti itu (tahun, bulan, hari, waktu ). Coba Anda periksa bagaimana itu disimpan dalam database – jika disimpan dalam format lain, misalnya hari, maka filter tidak akan berfungsi, kecuali Anda merubahnya pada tab tanggal di database.

array( 'key' => 'sale_day', 'value' => array( '2018-01-01', '2018-01-09' ), 'compare' => 'BETWEEN' )

 

Jika tanggal disimpan dalam waktu UNIX, contoh: 1543391233, semuanya menjadi sangat sederhana :

$args = array(
    'meta_query' => array(
        array(
            'key' => 'sale_day',
            'value' => array(strtotime('2018-01-01'), strtotime('2018-01-09')),
            'type' => 'numeric',
            'compare' => 'BETWEEN'
        )
    )
);

 

Link MangcodingBeberapa kueri meta – postingan dengan beberapa pasang kunci dan nilai

Sekarang saya akan menunjukkan kepada Anda bagaimana menggabungkan posting dengan beberapa nilai bidang khusus. Tapi sebelumnya Anda harus mengetahui tentang relation parameter yang dapat menerima dua nilai – OR atau AND (default).

// the 'color' is 'white' AND the 'price' is more than 2000 and less than 4000
$rd_query = new WP_Query(
    array(
        'meta_query' => array(
            'relation' => 'AND', // both of below conditions must match
            array(
                'key' => 'show_on_homepage',
                'value' => 'on'
            ),
            array(
                'relation' => 'OR', // only 'color' OR 'price' must match
                array(
                    'key' => 'color',
                    'value' => 'white'
                ),
                array(
                    'key' => 'price',
                    'value' => array(2000, 4000),
                    'type' => 'numeric',
                    'compare' => 'BETWEEN'
                )
            )
        )
    )
);

Seperti yang Anda lihat meta_query di atas, kami menggunakan multiple relation.

Link MangcodingCara Menyortir Posting berdasarkan Nilai Meta (“orderby” dan “order” parameter)

Saya akan menunjukkan kepada Anda berbagai contoh bagaimana Anda dapat mengurutkan posting Anda berdasarkan nilai meta. Pertama-tama, lihat contoh kode sederhana ini, di mana kami bahkan tidak menggunakan kueri meta :

$args = array(
     'meta_key' => 'misha_key',
     'orderby' => 'meta_value'
);

Sekarang, katakanlah itu misha_key hanya berisi nilai numerik, kita dapat mengubah kode kita untuk kasus itu sedikit saja.

$args = array( 
      'meta_key' => 'misha_key', 
      'orderby' => 'meta_value_num' 
);

 

Tapi bagaimana cara menggunakannya bersama dengan meta query? Sederhana, cukup ubah kode dengan cara berikut :

$args = array(
    'meta_query' => array(
        'misha_clause' => array(
            'key' => 'misha_key',
            'compare' => 'EXIST'
        )
    ),
    'orderby' => 'misha_clause'
);

Link MangcodingCara Reques dengan Dua atau Lebih Meta Key

Ya, cara Reques ini digunakan sejak versi WordPress 4.2

$args = array(
    'meta_query' => array(
        'relation' => 'AND',
        'price_clause' => array(
            'key' => 'price',
            'value' => array(2000, 4000),
            'type' => 'numeric',
            'compare' => 'BETWEEN'
        ),
        'misha_clause' => array(
            'key' => 'misha_key',
            'compare' => 'EXISTS'
        ),
    ),
    'orderby' => array(
        'price_clause' => 'ASC',
        'misha_clause' => 'DESC'
    ),
);

 

Jadi, pertama-tama kita mengurutkan postingan dengan price_clause menaik dan kemudian kita mengurutkan postingan dengan misha_clause menurun (descending)

Referensi : Rudrastyh