He estado jugando con fragmentos de código que agregan metadatos a las búsquedas administrativas.
El mejor fragmento que encontré fue escrito por Stefano sobre esta pregunta .
Sin embargo, parece tener 1 error molesto al buscar términos no meta.
Aquí hay algunas capturas de mi instalación de desarrollo local. Imprimí las 2 consultas MySQL en la pantalla.
Vista de la única publicación de CPT que estoy usando para probar
Este es el código que funciona como se esperaba y me permite buscar metadatos del administrador
Desafortunadamente, el código crea duplicados en coincidencias no meta, en este caso en el título de la publicación
Una captura que muestra el estado de la publicación, el tipo de publicación y los antepasados de los engañados
Aquí está el código que estoy ejecutando, es básicamente el mismo que el de Stefano, pero con mis crudos intentos 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' );