Yönetici aramalarına meta veri ekleyen kod parçacıklarıyla oynuyorum.
Bulduğum en iyi snippet, Stefano tarafından bu soru üzerine yazıldı .
Ancak, meta olmayan terimler aranırken 1, can sıkıcı bir hata var gibi görünüyor.
İşte yerel geliştirici kurulumumdan bazı kapmalar. Ekrana 2 MySQL sorgusu yazdırdım.
Test etmek için kullandığım tek CPT gönderisinin görünümü
Bu, beklendiği gibi çalışan ve yöneticiden meta verileri aramama izin veren kod
Maalesef kod meta olmayan eşleşmelerde, bu durumda yazı başlığında kopyalar oluşturuyor
Duplerin post durumunu, post tipini ve post atalarını gösteren bir yakalama
! Duplerin post durumunu, post tipini ve post atalarını gösteren bir yakalama
İşte ben kod çalışıyorum, temelde Stefano'nın aynı, ama benim sorgu çalışması yapmak için benim kaba girişimleri ile.
/*
* 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' );