Saya telah bermain-main dengan cuplikan kode yang menambahkan data meta ke pencarian admin.
Cuplikan terbaik yang saya temukan ditulis oleh Stefano pada pertanyaan ini .
Namun, tampaknya ada 1, bug yang mengganggu ketika mencari istilah non-meta.
Berikut ini beberapa hasil dari instalasi dev lokal saya. Saya telah mencetak 2 query MySQL ke layar.
Lihat posting CPT tunggal yang saya gunakan untuk menguji
Ini adalah kode yang berfungsi seperti yang diharapkan dan memungkinkan saya untuk mencari data meta dari admin
Sayangnya, kode ini membuat duplikat pada kecocokan non-meta, dalam hal ini pada judul posting
Perebutan yang menunjukkan status kiriman, jenis kiriman, dan kiriman leluhur dupes
! Perebutan yang menunjukkan status kiriman, jenis kiriman, dan kiriman leluhur dupes
Berikut adalah kode yang saya jalankan, pada dasarnya sama dengan kode Stefano, tetapi dengan upaya kasar saya untuk membuat kueri berfungsi.
/*
* Search custom fields from admin keyword searches
*/
function rel_search_join( $join ) {
global $pagenow, $wpdb;
if ( is_admin() && $pagenow == 'edit.php' && $_GET['post_type'] == 'listings' && $_GET['s'] != '') {
$join .= 'LEFT JOIN ' . $wpdb->postmeta . ' ON '. $wpdb->posts . '.ID = ' . $wpdb->postmeta . '.post_id ';
}
echo '<br><strong>JOIN</strong>: ';
print_r ( $join );
echo '<br>';
return $join;
}
add_filter('posts_join', 'rel_search_join' );
function rel_search_where( $where ) {
global $pagenow, $wpdb;
if ( is_admin() && $pagenow == 'edit.php' && $_GET['post_type']=='listings' && $_GET['s'] != '' ) {
$where = preg_replace( "/\(\s*".$wpdb->posts.".post_title\s+LIKE\s*(\'[^\']+\')\s*\)/", "(".$wpdb->posts.".post_title LIKE $1) OR (".$wpdb->postmeta.".meta_value LIKE $1)", $where );
$where = str_replace( "OR wp_posts.post_status = 'pending'", "", $where );
$where = str_replace( "OR wp_posts.post_status = 'private'", "", $where );
$where = str_replace( "OR wp_posts.post_status = 'draft'", "", $where );
$where = str_replace( "OR wp_posts.post_status = 'future'", "", $where );
}
echo '<br><strong>WHERE</strong>: ';
print_r ( $where );
echo '<br>';
return $where;
}
add_filter( 'posts_where', 'rel_search_where' );
plugin-development
custom-field
wp-admin
search
jnthnclrk
sumber
sumber
Jawaban:
Sebuah
GROUP BY
pernyataan dapat mengelompokkan pos Anda setelahJOIN
. Untuk Wordpress Anda dapat menggunakanposts_groupby
filter.sumber
Terima kasih atas pekerjaan Anda dalam hal ini, teman-teman. Kode ini membuat saya sebagian besar jalan di sana, tetapi menggunakan WP 3.8 saya mendapatkan kesalahan tabel / alias SQL non-unik, jadi saya membuat beberapa perubahan. Agar bisa berfungsi pada setup saya, saya harus menetapkan $ postpeta $ wpdb-> yang digunakan dalam pernyataan GABUNG. Saya juga memeriksa hanya memeriksa sekali untuk melihat apakah kait harus digunakan sehingga mereka tidak menyala setiap waktu. Semoga ini bisa membantu seseorang!
sumber