ricerca-personalizzataÈ risaputo che la ricerca interna in WordPress lascia un po a desiderare restituendo risultati a volte non esattamente consoni alle aspettative dell’utente. Negli esempi a seguire cercheremo di migliorare (per quanto sia possibile) le funzionalità di ricerca nel nostro blog.

Un menu a discesa per filtrare in base alle categorie

Con questa funzione sarà possibile filtrare i nostri risultati per categorie specifiche mediante un semplice menu a tendina contenente tutte le nostre categorie. Per giungere a tale scopo dovrete sostituire all’interno del file searchform.php il modulo di ricerca con quello proposto nel codice sottostante:

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

Ricerca nelle sottocategorie

Con questo script avrete la possibilità di effettuare ricerche nelle sottocategorie. Nell’esempio verranno ricercati tutti i risultati in base alla sottocategoria con ID 1, naturalmente anche qui modificate secondo le vostre esigenze:

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

 

Evidenzia i termini di ricerca

Ottenuti i risultati dopo una ricerca sarebbe interessante evidenziare il termine che l’utente ha cercato magari sottolineandolo o evidenziandolo con un altro colore. Per ottenere questo risultato andremo a modificare i files functions.php e header.php come da esempio. Modifica di functions.php:

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');

quindi andrai ad aggiungere il codice seguente prima del tag di chiusura in header.php

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

 

Disabilita la funzione di ricerca

Se la ricerca interna al tuo sito non ti interessa per niente puoi disabilitarla inserendo in functions.php questo  codice:

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;" ) );

 

Visualizza il numero di risultati della tua ricerca

Per visualizzare il numero di risultati trovati in una determinata ricerca basterà una piccola modifica al file search.php: Cerca questa stringa (può differire leggermente da tema a tema) :

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

e sostituiscila con questa:

<h2>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>'); echo $key; _e('</span>'); _e(' — '); echo $count . ' '; _e('articles'); wp_reset_query(); ?></h2>

Restate in ascolto…nei prossimi articoli vedremo altre tecniche utili e graficamente gradevoli per personalizzare la nostra casella di ricerca.
Alla prossima!!!