Saya perlu melakukan WP_Query
dengan LIKE
pada post_title
.
Saya mulai dengan ini WP_Query
:
$wp_query = new WP_Query(
array (
'post_type' => 'wp_exposants',
'posts_per_page' => '1',
'post_status' => 'publish',
'orderby' => 'title',
'order' => 'ASC',
'paged' => $paged
)
);
Tapi apa yang sebenarnya ingin saya lakukan terlihat seperti ini di SQL:
$query = "
SELECT *
FROM $wpdb->posts
WHERE $wpdb->posts.post_title LIKE '$param2%'
AND $wpdb->posts.post_type = 'wp_exposants'
ORDER BY $wpdb->posts.post_title
";
$wpdb->get_results($query);
Outputnya mencetak hasil yang saya perkirakan, tetapi saya menggunakan regular <?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
untuk menampilkan hasilnya.
Dan itu tidak berhasil $wpdb->get_results()
.
Bagaimana saya bisa mencapai apa yang saya jelaskan di sini?
$wpdb->prepare()
.prepare()
.$wpdb->prepare('LIKE "%s%%"', 'banana')
akan kembali"LIKE ''banana'%'"
, jadi kami harus membuat sendiri kueri, dan melakukan pelarian juga.prepare()
. Ya, itu rumit dan saya harus mencobanya beberapa kali, sebelum saya menyiasatinya. Dari sesuatu yang saya hanya membuat:$wpdb->prepare( ' AND {$wpdb->posts}.post_title LIKE %s ', esc_sql( '%'.like_escape( trim( $term ) ).'%' ) )
. Dan saya cukup yakinesc_sql()
itu tidak perlu dan hanya paranoid.'
(tanda kutip) di dalamnya. Saya kira itu karena melarikan diri? Saya belum menemukan solusinyaSederhana:
sumber
Ingin memperbarui kode ini yang Anda kerjakan untuk wordpress 4.0 dan di atasnya karena esc_sql () tidak digunakan lagi di 4.0 lebih tinggi.
Sisa barangnya sama.
Saya juga ingin menunjukkan bahwa Anda dapat menggunakan variabel s dalam argumen WP_Query untuk lulus istilah pencarian, yang juga akan mencari judul posting yang saya percayai.
Seperti ini:
sumber
search_prod_title
itu? Haruskah saya mengubahnya ke yang lain?esc_sql
depricated? Ini bukan.$wpdb->escape
adalah ... developer.wordpress.org/reference/functions/esc_sqlDengan beberapa solusi rentan diposting di sini, saya datang dengan versi yang disederhanakan dan disanitasi.
Pertama, kami membuat fungsi untuk
posts_where
filter yang memungkinkan Anda hanya menampilkan posting yang cocok dengan kondisi tertentu:Sekarang kita tambahkan
cc_search_post_title
ke argumen kueri kami:Dan akhirnya bungkus filter di sekitar kueri:
Menggunakan get_posts ()
Fungsi tertentu yang mengambil posting tidak menjalankan filter, jadi fungsi filter posts_where yang Anda lampirkan tidak akan mengubah kueri. Jika Anda berencana untuk menggunakan
get_posts()
kueri posting Anda, Anda perlu disetelsuppress_filters
ke false dalam array argumen Anda:Sekarang Anda dapat menggunakan
get_posts()
:Bagaimana dengan
s
parameternya?The
s
Parameter tersedia:Saat menambahkan istilah pencarian Anda ke dalam
s
kerja parameter dan itu akan mencari judul posting, itu juga akan mencari konten posting.Bagaimana dengan
title
parameter yang ditambahkan dengan WP 4.4?Melewati istilah pencarian ke dalam
title
parameter:Peka huruf besar-kecil dan
LIKE
, tidak%LIKE%
. Ini berarti pencarianhello
tidak akan menghasilkan posting dengan judulHello World
atauHello
.sumber
Membangun jawaban lain sebelum saya, untuk memberikan fleksibilitas dalam situasi di mana Anda ingin mencari posting yang berisi kata dalam bidang meta ATAU dalam judul posting, saya memberikan opsi itu melalui argumen "title_filter_relation." Dalam implementasi ini, saya hanya mengizinkan input "ATAU" atau "DAN" dengan default "DAN."
Berikut adalah contoh kode yang sedang bekerja untuk jenis tulisan "faq" yang sangat sederhana di mana pertanyaannya adalah judul tulisan itu sendiri:
sumber
WP_Query
agar dapat mengaksesnya di dalamposts_where
filter.