Não é segredo nenhum que o motor de pesquisa do WordPress é muito fraco. O grande problema disso é que o motor de pesquisa do WordPress faz uma busca literal pelas palavras que você escreve, o que significa que se você 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. O grande problema disso é que normalmente os seus usuários nunca irão conseguir encontrar aquilo que procuram, pelo que teremos de melhorar o seu motor de pesquisa do WordPress.

Neste artigo, providenciamos 10 truques para usar no motor de pesquisa do WordPress, melhorando drasticamente uma série de aspectos relacionados com as pesquisas que seus usuários fazem internamente no seu blog. Experimente!

1. COMO EXCLUIR POSTS OU PÁGINAS DOS RESULTADOS DE PESQUISA

Se você gostaria de controlar quais os posts ou páginas que pretende excluir dos resultados de pesquisa do seu blog WordPress, a única coisa que necessita fazer é copiar e colar o seguinte código no ficheiro 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) {
    if ($query->is_search) {
        $query->set('cat','0,1');
    }
    return $query;
}

add_filter('pre_get_posts','SearchFilter');

2. PESQUISA POR CATEGORIA COM DROP-DOWN

Uma função muito útil que você poderá colocar no motor de pesquisa do seu blog WordPress seria 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 blog.

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

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

3. 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’); ?>/”>
<div id=”search”>
<input type=”text” value=”Search… ” onclick=”this.value=”;” name=”s” id=”s” />
<?php $categories = get_categories(‘child_of=1′);
$catlist = ”;
foreach ($categories as $cat) {
$catlist.= $cat->cat_ID.’,';
}
$catlist.’5′;
?>
<input type=”hidden” name=”cat” value=”<?php echo “$catlist”?>” />
<input name=”" type=”image” src=”<?php bloginfo(‘stylesheet_directory’); ?>/styles/<?php echo “$style_path”; ?>/search.gif” value=”Go” class=”btn” />
</div><!–/search –>
</form>

4. PESQUISAR UM TIPO DE ARTIGO ESPECÍFICO

O WordPress dá-lhe a possibilidade de pesquisar especificamente determinados tipos de artigos usando um pequeno truque de código.

A única coisa que necessita fazer é copiar e colar o seguinte código para dentro do ficheiro functions.php do seu template.

function SearchFilter($query) {
  if ($query->is_search) {
    // Insert the specific post type you want to search
    $query->set('post_type', 'feeds');
  }
  return $query;
}

// This filter will jump into the loop and arrange our results before they're returned
add_filter('pre_get_posts','SearchFilter');

5. 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 ficheiro search.php do seu template e procure por este código:

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

E substitua-o pelo novo código que temos para si:

<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>

6. 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 ficheiro functions.php do seu template:

function hls_set_query() {
  $query  = attribute_escape(get_search_query());

  if(strlen($query) > 0){
    echo '
      <script type="text/javascript">
        var hls_query  = "'.$query.'";
      </script>
    ';
  }
}

function hls_init_jquery() {
  wp_enqueue_script('jquery');
}

add_action('init', 'hls_init_jquery');
add_action('wp_print_scripts', 'hls_set_query');

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

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

7. DESLIGAR A PESQUISA DO WORDPRESS

Se está à procura de uma forma de desligar toda a funcionalidade de pesquisa do seu blog WordPress, então este truque é para si.

A única coisa que tem de fazer é copiar e colar o seguinte código no ficheiro functions.php do seu template.

function fb_filter_query( $query, $error = true ) {

	if ( is_search() ) {
		$query->is_search = false;
		$query->query_vars[s] = false;
		$query->query[s] = false;

		// to error
		if ( $error == true )
			$query->is_404 = true;
	}
}

add_action( 'parse_query', 'fb_filter_query' );
add_filter( 'get_search_form', create_function( '$a', "return null;" ) );

8. TORNE OS RESULTADOS DE PESQUISA ILIMITADOS

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

No ficheiro search.php você poderá adicionar o código seguinte e por cima do ciclo.

Antes de tudo, encontre o seguinte código no seu ficheiro search.php:

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

E depois adicione o seguinte código:

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

9. USE UMA BARRA DE PESQUISA PERSONALIZADA DO GOOGLE

Outra solução interessante é você substituir a barra de pesquisa do seu blog WordPress por uma pesquisa personalizada da Google, de preferência ligada ao Adsense para que você possa ganhar dinheiro sempre que um dos seus leitores clica num anúncio dos resultados. Se não sabe como criar uma barra de pesquisa deste tipo, leia o seguinte tutorial: Como criar uma barra de pesquisa Google personalizada.

10. ADICIONE UM CAMPO DE PESQUISA AO SEU MENU

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

Abra o seu ficheiro 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);
function add_search_box($items, $args) {

        ob_start();
        get_search_form();
        $searchform = ob_get_contents();
        ob_end_clean();

        $items .= '<li>' . $searchform . '</li>';

    return $items;
}

Até já e bons truques!

Fonte