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' );