Área de administración Tipo personalizado Búsqueda por campos de metadatos sin título ni contenido

4

Tengo un tipo de publicación personalizada que usa varios campos de metadatos. En el área de administración, me gustaría poder buscar por esos campos de metadatos. He implementado esto actualmente en mi functions.php con este código:

function custom_search_query( $query ) {
  if ( is_admin() && is_main_query() && $query->is_search ) {
    $query->set('meta_query', array(
      "relation" => "OR",
      array(
        'key' => 'first_name',
        'value' => $query->query_vars['s'],
        'compare' => 'LIKE'
      ),
      array(
        'key' => 'last_name',
        'value' => $query->query_vars['s'],
        'compare' => 'LIKE'
      ),
      array(
        'key' => 'email',
        'value' => $query->query_vars['s'],
        'compare' => 'LIKE'
      )
    ));
    $query->set('post_type', 'application'); // optional
  };
}
add_filter( 'pre_get_posts', 'custom_search_query');

El problema es que con esos códigos, si busco el nombre "walker" y tengo registros de mi tipo de publicación personalizada que coinciden con los criterios en el campo de metadatos, no obtengo resultados. La razón por la que parece estar ocurriendo esto es que el SQL que está generando la consulta que se ejecuta es la siguiente:

SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts 
INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id)
INNER JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id)
INNER JOIN wp_postmeta AS mt2 ON (wp_posts.ID = mt2.post_id) WHERE 1=1
AND (((wp_posts.post_title LIKE '%walker%') OR (wp_posts.post_content LIKE  '%walker%'))) 
AND wp_posts.post_type = 'application' AND (wp_posts.post_status =  'publish' 
OR wp_posts.post_status = 'future' OR wp_posts.post_status = 'draft' 
OR wp_posts.post_status = 'pending' OR wp_posts.post_status = 'private')
AND ((wp_postmeta.meta_key = 'first_name' AND CAST(wp_postmeta.meta_value AS CHAR) LIKE  '%walker%')
OR (mt1.meta_key = 'last_name' AND CAST(mt1.meta_value AS CHAR) LIKE '%walker%')
OR (mt2.meta_key = 'email' AND CAST(mt2.meta_value AS CHAR) LIKE '%walker%') )   
GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 20

La consulta está intentando buscar tanto el título de la publicación como el contenido Y mis campos personalizados. No quiero que esté buscando coincidencias en el título o contenido. ¿Cómo puedo conseguir que la consulta deje de hacer eso y, por lo tanto, devuelva los problemas que quiero?

    
pregunta user1117841 10.05.2013 - 17:49

1 respuesta

0

Hay un complemento llamado Buscar en todo , donde puede desglosar lo que desea buscar. Realiza campos personalizados, publicaciones y, por supuesto, títulos.

    
respondido por el Jaz 19.09.2013 - 02:16

Lea otras preguntas en las etiquetas