He estado jugando con fragmentos de código que agregan metadatos a las búsquedas de administradores.
El mejor fragmento de código que encontré fue escrito por Stefano en esta pregunta .
Sin embargo, parece tener un error molesto al buscar términos no meta.
Aquí hay algunos detalles de mi instalación de desarrollo local. He impreso las 2 consultas de MySQL en la pantalla.
Vista de la única publicación de CPT que estoy usando para probar
Esteeselcódigoquefuncionacomoseesperabaymepermitebuscarmetadatosdesdeadmin
Lamentablemente, el código crea duplicados en coincidencias no meta, en este caso, en el título de la publicación
Unacapturaquemuestraelestadodelapublicación,eltipodepublicaciónylapublicacióndelosantepasadosdelosfalsos
!
Aquí está el código que estoy ejecutando, es básicamente el mismo que el de Stefano, pero con mis intentos crudos de hacer que la consulta funcione.
/*
* 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' );