Saya sedang mengerjakan situs web dengan fitur pencarian yang memungkinkan pengguna untuk mencari melalui banyak posting meta. Ada pola pencarian khusus yang ingin saya kembalikan tanpa hasil. WP_Query secara teknis akan menemukan hasil dalam basis data, tetapi saya ingin menimpanya agar memaksanya mengembalikan tidak ada hasil yang memicu if( $example->have_posts() )
kegagalan.
Apakah ada semacam parameter yang dapat saya sampaikan ke WP_Query seperti 'force_no_results' => true
itu akan memaksanya untuk tidak memberikan hasil?
WP_Query()
tidak ada hasil mungkin atau mungkin bukan cara terbaik untuk menjawab pertanyaan itu. Mungkin juga bermanfaat jika Anda menggambarkan pola pencarian yang Anda inginkan tidak dapat ditanyakan. Mengetahui pola pencarian mungkin membantu menemukan solusi.Jawaban:
Mencoba
Sederhana dan to the point.
sumber
post__in
mengembalikan posting ketika melewati array kosong ...array(0)
berfungsi dengan baik! Ini aneh tetapi sebenarnya dapat ditelusuri ke masalah yang muncul di WP core sebagai bug tetapi kemudian dibiarkan apa adanya karena terlalu banyak pengembang tema / plugin membangun fungsionalitas di sekitarnya -_- core.trac.wordpress.org/ tiket / 28099Anehnya tidak ada cara bersih / eksplisit untuk hubungan pendek
WP_Query
.Jika itu adalah pertanyaan utama yang mungkin Anda selidiki
WP->parse_request()
, sepertinyado_parse_request
ada filter yang relatif baru (3.5) di sana.Tetapi untuk
WP_Query
itu sendiri hack kotor biasanya dalam urutan, seperti query SQL hubungan pendek dengan menambahkanAND 1=0
melaluiposts_where
filter, dll.sumber
"post_type" => "break_loop"
yang merupakan jenis posting tidak ada.Masalah pada menetapkan parameter kueri ke nilai tidak ada adalah 2:
'posts_*'
kait filter yang berbeda ('posts_where'
,,'post_join'
dll.) Yang berfungsi pada kueri, sehingga Anda tidak pernah dapat memastikan bahwa bahkan pengaturan param yang tidak ada, kueri tidak menghasilkan apa-apa,OR
klausa sederhana yang dikembalikan oleh filter membuat sesuatu kembali.Anda perlu sedikit rutin hardcore untuk memastikan kueri kembali tanpa hasil dan tidak ada (atau sangat minim) masalah kinerja.
Untuk memicu rutinitas itu, Anda bisa menggunakan setiap metode, secara teknis Anda bisa meneruskan argumen apa pun
WP_Query
, argumen peristiwa yang tidak ada.Jadi, jika Anda menyukai sesuatu seperti
'force_no_results' => true
, Anda dapat menggunakannya seperti ini:dan menambahkan callback yang berjalan pada
'pre_get_posts'
yang melakukan kerja keras:Apa yang dilakukan kode ini dijalankan
'pre_get_posts'
selambat mungkin. Jika argumen 'force_no_results' hadir dalam kueri, maka:SELECT ID FROM wp_posts WHERE 0 = 1
begitu semua filter dihapus, tidak ada kemungkinan permintaan ini diubah dan sangat cepat, dan tidak memiliki hasil pastisumber