WP Query – posts duplicados uma vez incluindo tags nos resultados de pesquisa

Executo o WordPress no IIS & SQL server . Como alguns dos plugins não funcionam corretamente com DB ABSTRACTION , estou usando muitos filtros functions.php como assim.

Para que meus resultados de pesquisa incluam tags , adicionei o seguinte código às minhas funções.php – http://pastebin.com/BZG20McY

Meus resultados de pesquisa agora incluem tags , mas recebo muitas postagens duplicadas .

Existe alguma maneira de filtrar WP QUERY e remover todas as postagens duplicadas antes de entrar no WHILE LOOP ?

Aqui está o meu ciclo básico:

  $string) { $query_split = explode("=", $string); $search_query[$query_split[0]] = urldecode($query_split[1]); } $search = new WP_Query($search_query); ?> have_posts()) : ?> have_posts()) : $search->the_post(); ?> // SOME POSTS   // NO POSTS  

Qualquer sugestão muito apreciada.

Solutions Collecting From Web of "WP Query – posts duplicados uma vez incluindo tags nos resultados de pesquisa"

Adicionando isso dentro de WHILE LOOP irá resolver o problema. Ele ignorará a publicação no loop se esta ID da publicação estiver presente na nossa matriz (ou seja, a mesma publicação passou pelo loop antes).

 < ?php // MAKE SURE YOU DECLARE $postsIDsArray= array(); outside of the loop, on top of it $postID = $search->post->ID; // if this ID is present in the array, skip this post if (in_array($postID, $postsIDsArray)) continue; // if the ID is not present, add this ID to the array array_push($postsIDsArray, $postID); ?> 

Primeiro, simplesmente verifique se obtemos uma consulta de pesquisa. Faça isso dentro do filtro pre_get_posts para usar tags condicionais. Se obtivéssemos uma pesquisa, anexe o filtro.

 function wpse83602_search_query( $query ) { if ( ! $query->is_search() OR $query->is_admin ) return $query; add_filter( 'posts_distinct', 'wpse83602_posts_distinct' ); return $query; } 

Então, use o posts_distinct ou o filtro posts_clauses . Remova o filtro, im. para não entrar em conflito com outras consultas.

 function wpse83602_posts_distinct( $clause ) { remove_filter( current_filter(), __FUNCTION__ ); $clause[0] = "DISTINCT"; return $clause; }