Gelung Khusus / Pertanyaan Berdasarkan Bidang Khusus - Trik CSS

Anonim
Terakhir dikemas kini oleh Jason Witt.

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_Querykelas query_posts(), atau get_posts(). Sejak query_posts()dan get_posts()merupakan pembungkus untuk WP_Querykelas. 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 $argsadalah 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_keyhujah 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_keyadalah 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_valuepertanyaan argumen yang mempunyai nilai yang anda tentukan. The meta_valuehujah 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_valueargumen adalah ment untuk nilai string yang meta_value_numdimaksudkan 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_comparehujah 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_queryyang akan digunakan untuk menentukan pertanyaan.

kunci, nilai, dan bandingkan

Argumen key, valueberfungsi dengan cara yang sama seperti meta-key, meta-valueseperti yang dijelaskan di atas. Kompleks compareini serupa dengan yang sederhana di compareatas, tetapi memerlukan senarai pembanding yang berbeza. Kompleks ini comparemenggunakan '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'ANTARA ',' TIDAK DI ANTARA ',' ADA ', atau' TIDAK ADA '. valueboleh 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 valuehujah.

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 relationdigunakan apabila anda mahu meta data pertanyaan adat menggunakan hubungan yang logik. Anda boleh menggunakan ANDatau OR. Contohnya, anda akan menggunakan ANDuntuk membandingkan jika data1 dan data2 memenuhi kriteria, dan anda menggunakan ORjika 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 relationmenjadi "ATAU". Maka itu akan menanyakan entri apa pun jika "bidang1" memiliki nilai "data1", atau jika "bidang2" memiliki nilai "data2".

menaip

The typehujah 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_queryargumen kerana kami ingin menggunakan typeargumen 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 valueadalah 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_Querykelas 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_Queryhalaman codex.