Putaran / Kueri Kustom Berdasarkan Bidang Kustom - Trik CSS

Anonim
Terakhir diperbarui oleh Jason Witt.

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_Querykelas query_posts(),, atau get_posts(). Sejak query_posts()dan get_posts()pembungkus untuk WP_Querykelas. 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 $argsadalah 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_keyArgumen akan permintaan setiap posting yang memiliki bidang kustom meta ID disimpan ke database, apakah atau tidak ada nilai disimpan untuk lapangan. Ini meta_keyadalah 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_valueArgumen query posting yang memiliki nilai yang Anda tetapkan. The meta_valueargumen 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_valueargumennya adalah untuk nilai string yang meta_value_numdimaksudkan 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_compareArgumen 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_queryyang akan digunakan untuk menentukan kueri.

key, value, dan bandingkan

Argumen key, valuebekerja persis cara yang sama seperti meta-key, meta-valueseperti dijelaskan di atas. Kompleks compareini mirip dengan yang sederhana di compareatas, tetapi memerlukan daftar pembanding yang berbeda. Kompleksnya comparemenggunakan '=', '! =', '>', '> =', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN ',' NOT ANTWEEN ',' EXISTS ', atau' NOT EXISTS '. valuedapat 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 valueargumen.

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 relationdigunakan ketika Anda ingin meta data permintaan kustom menggunakan hubungan logis. Anda dapat menggunakan ANDatau OR. Misalnya, Anda akan menggunakan ANDuntuk membandingkan jika data1 dan data2 memenuhi kriteria, dan Anda menggunakan ORjika 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 relationmenjadi "ATAU". Maka itu akan menanyakan setiap posting jika "bidang1" memiliki nilai "data1", atau jika "bidang2" memiliki nilai "data2".

Tipe

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