Sekiranya anda merancang atau mengembangkan tema atau pemalam WordPress, ada kemungkinan bahawa suatu hari nanti anda perlu membuat pertanyaan untuk bidang meta tersuai. Ini adalah pasangan kunci / nilai yang betul-betul disesuaikan yang boleh anda lampirkan ke sebarang pos, halaman, atau jenis catatan tersuai. WordPress mempunyai UI asas untuk mereka secara lalai, atau anda boleh menggunakan sesuatu seperti Advanced Custom Fields untuk menyukai mereka. Tetapi di bawah tudung ACF menggunakan ladang biasa.
Halaman yang sangat anda lihat sekarang ditulis pada tahun 1999. Pada masa itu, untuk membuat pertanyaan untuk catatan dengan bidang khusus tertentu, anda perlu menggunakan pembolehubah global `$ wpdb`. Itu boleh digunakan untuk membuat pertanyaan MySQL yang tidak disokong oleh kelas WordPress WP_Query (). Nasib baik hari ini, WordPress memang mempunyai argumen yang menyokong pertanyaan untuk medan meta tersuai.
Di sini, kami akan membahas pelbagai cara yang boleh anda minta dan lalui catatan dengan bidang tersuai tertentu (dan nilainya). Anda akan dapat menggunakan maklumat ini sama ada anda menggunakan WP_Query
kelas query_posts()
, atau get_posts()
. Sejak query_posts()
dan get_posts()
merupakan pembungkus untuk WP_Query
kelas. Mereka semua menerima hujah yang sama.
Hujah Pertanyaan
Berikut adalah contoh asas pertanyaan WordPress yang diambil dari WordPress Codex.
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 perkara penting di sana. Kami akan menyampaikan hujah yang berbeza untuk menjadikan ini berfungsi seperti yang kami mahukan.
Semasa membuat pertanyaan untuk meta tersuai, ada dua "kelompok" argumen yang dapat Anda gunakan. Satu kumpulan adalah untuk pertanyaan medan meta khusus khusus dan kumpulan lain untuk pertanyaan medan meta khusus yang lebih kompleks. Mari mulakan dengan kumpulan sederhana.
meta_key
The meta_key
hujah akan bertanyakan apa-apa jawatan yang mempunyai bidang adat meta ID disimpan ke pangkalan data, sama ada atau tidak terdapat nilai disimpan untuk padang. Ini meta_key
adalah ID yang anda berikan pada medan meta anda. Seperti ini:


Contoh ini akan menyoal setiap pos yang mempunyai medan meta tersuai dengan ID "field1".
$args = array( 'meta_key' => 'field1' );
nilai meta_
Arahan meta_value
pertanyaan argumen yang mempunyai nilai yang anda tentukan. The meta_value
hujah digunakan untuk nilai rentetan. Contoh ini akan menanyakan sebarang catatan dengan medan meta tersuai yang mempunyai nilai "data1".
$args = array( 'meta_value' => 'data1' );
Anda juga boleh menggabungkan keduanya. Contoh ini hanya akan meminta siaran yang mempunyai medan meta khusus dengan ID "field1" yang memiliki nilai "data1".
$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1' );
meta_value_num
Argumen meta_value_num serupa dengan argumen `meta_value`. Dimana meta_value
argumen adalah ment untuk nilai string yang meta_value_num
dimaksudkan untuk nilai numerik.
Contoh ini menunjukkan cara bertanya bidang meta kustom “field1” jika memiliki nilai “10”.
$args = array( 'meta_key' => 'field1', 'meta_value_num' => '10', );
meta_compare
The meta_compare
hujah tidak betul-betul apa yang ia kedengaran seperti. Ini akan membolehkan anda menggunakan pembanding dengan argumen `meta_value` dan` meta_value_num`. Pembanding yang boleh anda gunakan ialah '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN' , 'ANTARA', 'TIDAK DI ANTARA', 'TIDAK ADA', 'REGEXP', 'BUKAN REGEXP' atau 'RLIKE'. Berikut adalah contoh yang menunjukkan cara membuat pertanyaan pada sebarang catatan yang tidak mempunyai nilai "data1".
$args = array( 'meta_key' => 'field1', 'meta_value' => 'data1', 'meta_compare' => '!=', );
Pertanyaan Lebih Kompleks
pertanyaan meta_
Hujah utama yang akan anda gunakan untuk pertanyaan kompleks adalah meta_query
. Hujah ini sendiri tidak membuat apa-apa. Ini hanya memberitahu WordPress bahawa anda ingin membuat pertanyaan untuk medan meta tersuai. Anda akan menambahkan argumen tambahan meta_query
yang akan digunakan untuk menentukan pertanyaan.
kunci, nilai, dan bandingkan
Argumen key
, value
berfungsi dengan cara yang sama seperti meta-key
, meta-value
seperti yang dijelaskan di atas. Kompleks compare
ini serupa dengan yang sederhana di compare
atas, tetapi memerlukan senarai pembanding yang berbeza. Kompleks ini compare
menggunakan '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'ANTARA ',' TIDAK DI ANTARA ',' ADA ', atau' TIDAK ADA '. value
boleh menjadi tatasusunan, tetapi hanya jika dibandingkan menggunakan 'IN', 'NOT IN', 'ANTARA', atau 'TIDAK DI ANTARA'.
Sekiranya anda menggunakan 'EXISTS', atau 'NOT EXISTS' dengan compare
, anda tidak perlu menentukan value
hujah.
Berikut adalah contoh yang akan meminta posting jika memiliki "field1" dengan nilai "data1", dan "field2" dengan nilai yang bukan "data2".
$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1' ), array( 'key' => 'field2', 'value' => 'data2', 'compare' => '!=', ) ) );
hubungan
Yang relation
digunakan apabila anda mahu meta data pertanyaan adat menggunakan hubungan yang logik. Anda boleh menggunakan AND
atau OR
. Contohnya, anda akan menggunakan AND
untuk membandingkan jika data1 dan data2 memenuhi kriteria, dan anda menggunakan OR
jika data1 atau data2 memenuhi kriteria.
Hujah ini berdiri sendiri. Bermakna ia tidak muncul dalam parameter medan meta tersuai individu. Mari lihat contohnya. Contoh ini hanya akan meminta posting yang memiliki "field1" dengan nilai "data1", dan "field2" dengan nilai "data2".
$args = array( 'meta_query' => array( 'relation' => 'AND' array( 'key' => 'field1', 'value' => 'data1', ), array( 'key' => 'field2', 'value' => 'data2', ), ) );
Sekiranya anda berubah relation
menjadi "ATAU". Maka itu akan menanyakan entri apa pun jika "bidang1" memiliki nilai "data1", atau jika "bidang2" memiliki nilai "data2".
menaip
The type
hujah membenarkan anda untuk memilih jenis data untuk pertanyaan. Anda boleh menggunakan 'NUMERIC', 'BINARY', 'CHAR', 'DATE', 'DATETIME', 'DECIMAL', 'SIGNED', 'TIME', atau 'UNSIGNED'.
Jenis "DATE" dapat digunakan dengan compare
"ANTARA" hanya jika format tanggal adalah "YYYYMMDD".
Contoh ini akan membuat pertanyaan pada mana-mana catatan di mana nilai "field1" adalah angka.
$args = array( 'meta_query' => array( array( 'key' => 'field1', 'value' => 'data1', 'type' => 'NUMERIC' ) ) );
Contoh Dunia Sebenar
Setakat ini, saya hanya memberikan contoh dengan data dan bidang sewenang-wenangnya. Sekarang, saya ingin menunjukkan kepada anda contoh dunia nyata untuk meminta medan meta tersuai.
Senario
Anda telah membuat jenis catatan khusus acara. Jenis siaran acara mempunyai bidang khusus tarikh dengan ID event_date
. Anda ingin membuat pertanyaan yang akan menunjukkan sebarang peristiwa yang akan bermula pada tarikh semasa hingga 30 hari akan datang.
Kami akan menggunakan meta_query
argumen kerana kami ingin menggunakan type
argumen untuk menentukan bidang "event_date" sebagai jenis data "DATE".
Ini adalah pertanyaan:
$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 susunan tarikh semasa - 1 hari dan 31 hari dari tarikh semasa. Oleh kerana kami menggunakan pembanding "ANTARA" hanya catatan antara array nilai yang akan ditanyakan, jadi kami ingin mengimbangi mereka satu hari.
Dengan pertanyaan ini, anda akan memaparkan sebarang peristiwa yang berlaku dalam 30 hari akan datang.
Kesimpulannya
The WP_Query
kelas adalah kelas yang sangat fleksibel yang akan membolehkan anda untuk membuat pelbagai pertanyaan adat. Sekiranya anda ingin mengetahui lebih lanjut mengenai pelbagai argumen yang boleh anda gunakan untuk pertanyaan, saya cadangkan untuk melihat WP_Query
halaman codex.