Jika Anda merancang atau mengembangkan tema atau plugin WordPress, ada kemungkinan besar suatu saat Anda perlu membuat kueri untuk bidang meta khusus. Ini adalah pasangan kunci / nilai kustom yang dapat Anda lampirkan ke postingan, halaman, atau jenis postingan kustom apa pun. WordPress memiliki UI dasar untuk mereka secara default, atau Anda dapat menggunakan sesuatu seperti Bidang Kustom Lanjutan untuk membuatnya menyukainya. Namun di balik kap mesin, ACF menggunakan bidang kustom biasa.
Halaman potongan yang Anda lihat sekarang ini ditulis pada tahun 1999. Pada saat itu, untuk menanyakan posting dengan bidang khusus tertentu, Anda perlu menggunakan variabel global `$ wpdb`. Itu bisa digunakan untuk membuat kueri MySQL yang tidak didukung oleh kelas WP_Query () WordPress. Untungnya hari ini, WordPress memang memiliki argumen yang mendukung kueri untuk bidang meta khusus.
Di sini, kami akan membahas berbagai cara Anda dapat meminta dan mengulang posting dengan bidang khusus tertentu (dan nilainya). Anda akan dapat menggunakan informasi ini baik Anda menggunakan WP_Query
kelas query_posts()
,, atau get_posts()
. Sejak query_posts()
dan get_posts()
pembungkus untuk WP_Query
kelas. Mereka semua menerima argumen yang sama.
Argumen Kueri
Berikut adalah contoh dasar kueri WordPress yang diambil dari Codex WordPress.
have_posts() ) ( echo '
'; while ( $the_query->have_posts() ) ( $the_query->the_post(); echo '
- ' . get_the_title() . '
'; ) echo '
'; ) else ( // no posts found ) /* Restore original Post Data */ wp_reset_postdata();
Ini $args
adalah bagian penting di sana. Kami akan memberikan argumen yang berbeda untuk membuat ini berfungsi seperti yang kami inginkan.
Saat membuat kueri untuk meta kustom, ada dua "grup" argumen yang dapat Anda gunakan. Satu grup untuk kueri bidang meta ubahsuaian sederhana dan grup lainnya untuk kueri bidang meta ubahsuaian yang lebih kompleks. Mari kita mulai dengan grup sederhana.
meta_key
The meta_key
Argumen akan permintaan setiap posting yang memiliki bidang kustom meta ID disimpan ke database, apakah atau tidak ada nilai disimpan untuk lapangan. Ini meta_key
adalah ID yang Anda berikan ke bidang meta Anda. Seperti ini:
Contoh ini akan menanyakan setiap posting yang memiliki bidang meta kustom dengan ID "bidang1".
$args = array( 'meta_key' => 'field1' );
meta_value
The meta_value
Argumen query posting yang memiliki nilai yang Anda tetapkan. The meta_value
argumen yang digunakan untuk nilai-nilai string. Contoh ini akan menanyakan setiap posting dengan bidang meta kustom yang memiliki nilai "data1".
$args = array( 'meta_value' => 'data1' );
Anda juga bisa menggabungkan keduanya. Contoh ini hanya akan meminta posting yang memiliki bidang meta kustom dengan ID "bidang1" yang memiliki nilai "data1".
$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1' );
meta_value_num
Argumen meta_value_num mirip dengan argumen `meta_value`. Dimana meta_value
argumennya adalah untuk nilai string yang meta_value_num
dimaksudkan untuk nilai numerik.
Contoh ini menunjukkan cara menanyakan bidang meta khusus "bidang1" jika memiliki nilai "10".
$args = array( 'meta_key' => 'field1', 'meta_value_num' => '10', );
meta_compare
The meta_compare
Argumen tidak persis apa yang terdengar seperti. Ini akan memungkinkan Anda untuk menggunakan komparator dengan argumen `meta_value` dan` meta_value_num`. Komparator yang dapat Anda gunakan adalah '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN' , 'BETWEEN', 'NOT BETWEEN', 'NOT EXISTS', 'REGEXP', 'NOT REGEXP' or 'RLIKE'. Berikut adalah contoh yang menunjukkan cara meng-query setiap posting yang tidak memiliki nilai "data1".
$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1', 'meta_compare' => '!=', );
Kueri yang Lebih Kompleks
meta_query
Argumen utama yang akan Anda gunakan untuk kueri kompleks adalah meta_query
. Argumen ini sendiri tidak melakukan apa-apa. Itu hanya memberi tahu WordPress bahwa Anda ingin membuat kueri untuk bidang meta khusus. Anda akan menambahkan argumen tambahan di dalamnya meta_query
yang akan digunakan untuk menentukan kueri.
key, value, dan bandingkan
Argumen key
, value
bekerja persis cara yang sama seperti meta-key
, meta-value
seperti dijelaskan di atas. Kompleks compare
ini mirip dengan yang sederhana di compare
atas, tetapi memerlukan daftar pembanding yang berbeda. Kompleksnya compare
menggunakan '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN ',' NOT ANTWEEN ',' EXISTS ', atau' NOT EXISTS '. value
dapat berupa sebuah array, tetapi hanya jika dibandingkan menggunakan 'IN', 'NOT IN', 'BETWEEN', atau 'NOT BETWEEN'.
Jika Anda menggunakan 'EXISTS', atau 'NOT EXISTS' dengan compare
, Anda tidak perlu menentukan value
argumen.
Berikut adalah contoh yang akan membuat kueri postingan jika memiliki "bidang1" dengan nilai "data1", dan "bidang2" dengan nilai yang bukan "data2".
$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1' ), array( 'key' => 'field2', 'value' => 'data2', 'compare' => '!=', ) ) );
hubungan
The relation
digunakan ketika Anda ingin meta data permintaan kustom menggunakan hubungan logis. Anda dapat menggunakan AND
atau OR
. Misalnya, Anda akan menggunakan AND
untuk membandingkan jika data1 dan data2 memenuhi kriteria, dan Anda menggunakan OR
jika data1 atau data2 memenuhi kriteria.
Argumen ini berdiri sendiri. Artinya itu tidak muncul dalam parameter bidang meta khusus individu. Mari kita lihat contohnya. Contoh ini hanya akan membuat kueri postingan yang memiliki "bidang1" dengan nilai "data1", dan "bidang2" dengan nilai "data2".
$args = array( 'meta_query' => array( 'relation' => 'AND' array( 'key' => 'field1', 'value' => 'data1', ), array( 'key' => 'field2', 'value' => 'data2', ), ) );
Jika Anda berubah relation
menjadi "ATAU". Maka itu akan menanyakan setiap posting jika "bidang1" memiliki nilai "data1", atau jika "bidang2" memiliki nilai "data2".
Tipe
The type
argumen memungkinkan Anda untuk memilih jenis data untuk query. Anda dapat menggunakan 'NUMERIC', 'BINARY', 'CHAR', 'DATE', 'DATETIME', 'DECIMAL', 'SIGNED', 'TIME', atau 'UNSIGNED'.
Jenis "DATE" dapat digunakan dengan compare
"BETWEEN" hanya jika format tanggal adalah "YYYYMMDD".
Contoh ini akan menanyakan postingan mana pun yang nilai "field1" adalah numerik.
$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1', 'type' => 'NUMERIC' ) ) );
Contoh Dunia Nyata
Sejauh ini, saya hanya memberikan contoh dengan data dan kolom yang berubah-ubah. Sekarang, saya ingin menunjukkan kepada Anda contoh dunia nyata menanyakan bidang meta kustom.
Skenario
Anda telah membuat jenis posting khusus acara. Jenis posting acara memiliki bidang khusus tanggal dengan ID event_date
. Anda ingin membuat kueri yang akan menampilkan acara apa pun yang akan dimulai pada tanggal saat ini hingga 30 hari ke depan.
Kami akan menggunakan meta_query
argumen karena kami ingin menggunakan type
argumen untuk mendefinisikan bidang "event_date" sebagai tipe data "DATE".
Ini adalah pertanyaannya:
$args = array( 'post_type' => 'post', 'posts_per_page' => -1, 'post_status' => 'publish', 'meta_query' => array( array( 'key' => 'event_date', 'value' => array( date( 'Ymd', strtotime( '-1 day' ) ), date( 'Ymd', strtotime( '+31 days' ) ) ), 'compare' => 'BETWEEN', 'type' => 'DATE' ) ) ); $event_query = new WP_Query( $args );
Ini value
adalah array dari tanggal saat ini - 1 hari dan 31 hari dari tanggal saat ini. Karena kita menggunakan pembanding "BETWEEN" hanya tulisan antara larik nilai yang akan ditanyakan, jadi kita ingin mengimbanginya satu hari.
Dengan kueri ini, Anda akan menampilkan acara apa pun yang terjadi dalam 30 hari ke depan.
Kesimpulan
The WP_Query
kelas adalah kelas yang sangat fleksibel yang akan memungkinkan Anda untuk membuat banyak pertanyaan kustom. Jika Anda ingin mempelajari lebih lanjut tentang berbagai argumen yang dapat Anda gunakan untuk pertanyaan, saya sarankan untuk melihat-lihat WP_Query
halaman codex.