Área Administrativa Procura por Tipo Customizado por Meta Campos Sem Título e Conteúdo

4

Eu tenho um tipo de postagem personalizado que usa vários metades campos. Na área de administração, gostaria de poder pesquisar por esses meta-campos. Eu implementei isso atualmente no meu functions.php com 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');

O problema é que, com esses códigos, se eu pesquisar o nome "walker" e eu tiver registros do tipo de postagem personalizado que correspondam a esse critério no campo meta, não obtenho resultados. A razão pela qual isso parece estar acontecendo é que o SQL que está sendo gerado pela consulta executada é o seguinte:

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

A consulta está tentando pesquisar o título e o conteúdo da postagem E meus campos personalizados. Não quero que ele esteja procurando correspondências no título ou no conteúdo. Como posso fazer com que a consulta pare de fazer isso e, assim, retornar os restos que eu quero?

    
por user1117841 10.05.2013 / 17:49

1 resposta

0

Existe um plugin chamado Pesquisar tudo , onde você pode detalhar o que deseja pesquisar. Faz campos personalizados, posts e, claro, títulos.

    
por Jaz 19.09.2013 / 02:16