Dev (Back & Front)ARTIGO

Personalize o motor de pesquisa do WordPress

Não é segredo nenhum, sabemos que o motor de pesquisa do WordPress é muito fraco. O grande problema disso é que ele faz uma busca literal pelas palavras que você escreve, o que significa que se escrever duas ou três palavras-chave quando pesquisa, ele retorna todos os artigos que contenham essas palavras, mesmo que nenhum desses artigos tenha diretamente a ver com o assunto pesquisado. E por isso seus usuários terão dificuldades em encontrar aquilo que procuram.

Neste artigo, selecionamos 10 truques que melhoram drasticamente uma série de aspectos relacionados às pesquisas que seus usuários fazem internamente no seu site. Experimente!

01. Como excluir posts ou páginas dos resultados de pesquisa

Se você gostaria de controlar quais os posts ou as páginas que pretende excluir dos resultados de pesquisa, a única coisa que necessita fazer é copiar e colar o seguinte código no arquivo functions.php do seu template.

Neste truque de código, os artigos com os IDs 0 e 1 serão excluídos dos resultados de pesquisa. Se editar os IDs, poderá excluir aqueles que bem entender.   

function SearchFilter($query) {<br />    if ($query->is_search) {<br />        $query->set('cat','0,1');<br />    }<br />    return $query;<br />}<br /> <br />add_filter('pre_get_posts','SearchFilter');

02. Pesquisa por categoria com drop-down

Uma função muito útil que você pode usar é permitir aos seus leitores uma filtragem de resultados por categoria. Isso é bastante fácil de conseguir utilizando um drop-down que contenha os títulos de todas as categorias do seu site.

A única coisa que precisará fazer é substituir o seu motor de pesquisa do WordPress (que pode ser encontrado no arquivo search.php ou searchform.php) pelo seguinte código:   

<form role="search" method="get" id="searchform" action="<?php bloginfo('siteurl'); ?>"><br />  <div><br />    <label class="screen-reader-text" for="s">Pesquisar por:</label><br />    <input type="text" value="" name="s" id="s" /><br />    in <?php wp_dropdown_categories( 'show_option_all=All Categories' ); ?><br />    <input type="submit" id="searchsubmit" value="Search" /><br />  </div><br /></form>

03. Pesquisar dinamicamente categorias e sub-categorias apenas

Este truque de código pode ser extremamente interessante de incluir na sua página de arquivos para permitir aos seus leitores que realizem pesquisas diretamente nas sub-categorias de uma determinada categoria.

Neste truque de código, todas as sub-categorias da categoria com o ID 1 serão pesquisadas. Se editar o ID, poderá especificar outra categoria que deseje.

<form method="get" id="searchform" action="<?php bloginfo('home'); ?>/"><br /><div id="search"><br /><input type="text" value="Search? " onclick="this.value=";" name="s" id="s" /><br /><?php $categories = get_categories('child_of=1?);<br />$catlist = ";<br />foreach ($categories as $cat) {<br />$catlist.= $cat->cat_ID.',';<br />}<br />$catlist.'5?;<br />?><br /><input type="hidden" name="cat" value="<?php echo "$catlist"?>" /><br /><input<br /> name="" type="image" src="<?php bloginfo('stylesheet_directory'); <br />?>/styles/<?php echo "$style_path"; ?>/search.gif" value="Go" <br />class="btn" /><br /></div><!?/search ?><br /></form>

04. Pesquisar um tipo de artigo específico

O WordPress oferece a possibilidade de pesquisar especificamente determinados tipos de artigos usando um pequeno truque de código. A única coisa que precisa fazer é copiar e colar o seguinte código para dentro do arquivo functions.php do seu template.

 function SearchFilter($query) {<br />  if ($query->is_search) {<br />    // Insert the specific post type you want to search<br />    $query->set('post_type', 'feeds');<br />  }<br />  return $query;<br />}<br /> <br />// This filter will jump into the loop and arrange our results before they're returned<br />add_filter('pre_get_posts','SearchFilter'); 

05. Mostrar o número de resultados de pesquisa encontrados

Se gostava de mostrar aos seus leitores quantos resultados foram encontrados por cada termo pesquisado, já poderá fazê-lo usando o seguinte truque.

Abra o arquivo search.php do seu template e procure por este código:

 <h2 class="pagetitle">Search Results</h2>

E substitua-o pelo novo código abaixo:

<h2 class="pagetitle">Search Result for <?php /* Search Count */ $allsearch = &new WP_Query("s=$s&showposts=-1"); $key = wp_specialchars($s, 1); $count = $allsearch->post_count; _e(''); _e('<span class="search-terms">'); echo $key; _e('</span>'); _e(' ? '); echo $count . ' '; _e('articles'); wp_reset_query(); ?></h2>

06. Destacar os termos de pesquisa com JQuery

Para tornar os resultados de pesquisa um pouco mais claros para os seus leitores, você poderá usar o seguinte truque, o qual destaca visualmente os termos pesquisados nos resultados gerados pela pesquisa.

Copie e cole o seguinte código diretamente no arquivo functions.php do seu template:

function hls_set_query() {<br />  $query  = attribute_escape(get_search_query());<br /> <br />  if(strlen($query) > 0){<br />    echo '<br />      <script type="text/javascript"><br />        var hls_query  = "'.$query.'";<br />      </script><br />    ';<br />  }<br />}<br /> <br />function hls_init_jquery() {<br />  wp_enqueue_script('jquery');<br />}<br /> <br />add_action('init', 'hls_init_jquery');<br />add_action('wp_print_scripts', 'hls_set_query');

   
E depois copie e cole o seguinte código no arquivo header.php antes da tag /head:

<style type="text/css" media="screen"><br />    .hls { background: #D3E18A; }<br />  </style><br />  <script type="text/javascript"><br />  jQuery.fn.extend({<br />    highlight: function(search, insensitive, hls_class){<br />     <br /> var regex = new RegExp("(<[^>]*>)|(\\b"+ <br />search.replace(/([-.*+?^${}()|[\]\/\\])/g,"\\$1") +")", insensitive ? <br />"ig" : "g");<br />      return this.html(this.html().replace(regex, function(a, b, c){<br />        return (a.charAt(0) == "<") ? a : "<strong class=\""+ hls_class +"\">" + c + "</strong>";<br />      }));<br />    }<br />  });<br />  jQuery(document).ready(function($){<br />    if(typeof(hls_query) != 'undefined'){<br />      $("#post-area").highlight(hls_query, 1, "hls");<br />    }<br />  });<br />  </script>

07. Desativar a pesquisa

Se está à procura de uma forma de desativar toda a funcionalidade de pesquisa do seu site, então este truque é para você. A única coisa que tem de fazer é copiar e colar o seguinte código no arquivo functions.php do seu template.

function fb_filter_query( $query, $error = true ) {<br /> <br />    if ( is_search() ) {<br />        $query->is_search = false;<br />        $query->query_vars[s] = false;<br />        $query->query[s] = false;<br /> <br />        // to error<br />        if ( $error == true )<br />            $query->is_404 = true;<br />    }<br />}<br /> <br />add_action( 'parse_query', 'fb_filter_query' );<br />add_filter( 'get_search_form', create_function( '$a', "return null;" ) );

08. Torne os resultados de pesquisa ilimitados

Por vezes você poderá querer que os resultados de pesquisa não estejam limitados pelo ciclo do próprio WordPress. Este truque permite tornar os resultados de pesquisa do seu site completamente ilimitados.

No arquivo search.php, você poderá adicionar o código seguinte e por cima do ciclo. Antes de tudo, encontre o seguinte código no seu arquivo search.php:
 

<?php if (have_posts()) : ?><br /><?php while (have_posts()) : the_post(); ?>

E depois adicione o seguinte código:

<?php $posts=query_posts($query_string . '&posts_per_page=-1'); ?><br /><?php if (have_posts()) : ?><br /><?php while (have_posts()) : the_post(); ?>

09. Use uma barra de pesquisa personalizada do Google

Outra solução interessante é substituir a barra de pesquisa padrão por uma pesquisa personalizada da Google, de preferência ligada ao Adsense para que você possa ganhar algum dinheiro sempre que um dos seus leitores clicar num anúncio dos resultados. Para criar a barra deste tipo, leia aqui um breve tutorial.

10. Adicione um campo de pesquisa ao seu menu

Alguma vez desejou adicionar um campo de pesquisa automaticamente ao menu do seu site WordPress 3.0+?

Abra o seu arquivo functions.php e cole lá dentro o seguinte código. O seu campo de pesquisa irá aparecer quando guardar as alterações.
   

add_filter('wp_nav_menu_items','add_search_box', 10, 2);<br />function add_search_box($items, $args) {<br /> <br />        ob_start();<br />        get_search_form();<br />        $searchform = ob_get_contents();<br />        ob_end_clean();<br /> <br />        $items .= '<li>' . $searchform . '</li>';<br /> <br />    return $items;<br />}

Não deixe de enviar seus comentários. Até a próxima!

é o fundador da Escola Dinheiro. Empreendedor e blogueiro, trabalha em tempo integral na internet e dedica a sua vida à produção e compartilhamento de conteúdos numa rede de projetos que conta já com alguns dos maiores e mais reconhecidos blogs do Brasil e de Portugal, nomeadamente o Escola Dinheiro, Escola WordPress e também a Galeria de Blogs. É estudante de Engenharia Informática em Sistemas de Informação e totalmente viciado em Web2.0. Paulo Faustino é também palestrante e consultor em gestão de campanhas de afiliação, otimização de blogs WordPress e ainda monetização/rentabilização de websites e blogs. No Twitter, siga @escoladinheiro.

Ver perfil