Ho giocato con frammenti di codice che aggiungono metadati alle ricerche dell'amministratore.
Il miglior frammento che ho trovato è stato scritto da Stefano su questa domanda .
Tuttavia, sembra avere 1, fastidioso bug durante la ricerca di termini non meta.
Ecco alcuni suggerimenti dalla mia installazione di sviluppo locale. Ho stampato le 2 query MySQL sullo schermo.
Visualizzazione del singolo post CPT che sto usando per testare
Questo è il codice che funziona come previsto e mi consente di cercare metadati dall'amministratore
Sfortunatamente il codice crea duplicati su corrispondenze non meta, in questo caso sul titolo del post
Una presa che mostra lo stato della posta, il tipo di posta e gli antenati dei duplicati
! Una presa che mostra lo stato della posta, il tipo di posta e gli antenati dei duplicati
Ecco il codice che sto eseguendo, è sostanzialmente lo stesso di Stefano, ma con i miei rozzi tentativi di far funzionare la query.
/*
* 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' );