Guida WordPress – Ricerca Basata sulla Categoria Corrente
Oggi voglio condividere con te una breve guida WordPress su come modificare il comportamento naturale della ricerca con WordPress.
La Richiesta
In un sito che ho sviluppato di recente ci sono state due richieste che riguardavano il funzionamento della ricerca in WordPress:
- la ricerca deve essere effettuata solo tra gli articoli della categoria corrente in cui l’utente si trova;
- la ricerca deve essere estesa non solo alle parole trovate nei testi, ma anche alle categorie e tag.
La soluzione
Vediamo come poter soddisfare le esigenze del cliente, grazie a una funzione che permette di prendere la categoria corrente nel primo caso, e l’utilizzo di un plugin nel secondo.
1. Ricerca solo nella categoria corrente
Dobbiamo scrivere una funzione che permetta di catturare la categoria in cui ci troviamo, nel file function.php.
Se hai visto come sviluppo con WordPress e anche tu utilizzi il tema Starkers come base per i tuoi progetti, questa funzione è già presente, altrimenti la dovrai aggiungere:
<?php function getCurrentCatID() { global $wp_query; if(is_category() || is_single()) { $cat_ID = get_query_var('cat'); } return $cat_ID; }?>
Ora apri il file searchform.php, il file che genera il form di ricerca e aggiungi questa riga di codice:
<input id="cat" type="hidden" name="cat" value="<?php getCurrentCatID(); ?>" />
In questo modo viene aggiunto un campo di input nascosto, che “filtra” la ricerca in base alla categoria corrente.
2. Estendere la ricerca a categorie e tag
In questo caso ho utilizzato il plugin Search Everything, che consente di estendere la ricerca a categorie, tag, riassunti, campi personalizzati ecc.
Ti consiglio inoltre di leggere l’articolo di Hongkiat, dove sono stati raccolti plugin per migliorare la ricerca con WordPress.
1 commento
buongiorno
Ottima guida che mi servirebbe per le mie necessità.
Non sono un programmatore ma “qualcosa ci capisco!”.
Ho installato il tema ONETONE e provato ad utilizzare questa guida ma funziona solo in parte.
In sostanza la mia necessità è che la ricerca venga fatta sul post title e sulla categoria (e relativa sottocategoria) corrente.
Ho trovato il seguente codice per filtrare la ricerca su post title
————————————————————————————
/**
Search by Post Title **/
function search_by_title_only( $search, &$wp_query )
{
global $wpdb;
if ( empty( $search ) )
return $search; // skip processing – no search term in query
$q = $wp_query->query_vars;
$n = ! empty( $q[‘exact’] ) ? ” : ‘%’;
$search = ”;
$searchand = ”;
foreach ( (array) $q[‘search_terms’] as $term ) {
$term = esc_sql( like_escape( $term ) );
$search .= “{$searchand}($wpdb->posts.post_title LIKE ‘{$n}{$term}{$n}’)”;
$searchand = ‘ AND ‘;
}
if ( ! empty( $search ) ) {
$search = ” AND ({$search}) “;
if ( ! is_user_logged_in() )
$search .= ” AND ($wpdb->posts.post_password = ”) “;
}
return $search;
}
add_filter( ‘posts_search’, ‘search_by_title_only’, 500, 2 );
———————————————————————————————
e il seguente per restringere la ricerca ad una certa categoria (cat_ID- in questo esempio la categoria 1)
———————————————————————————————–
function SearchFilter($query) {
if ($query->is_search) {
// Insert the specific categories you want to search
$query->set(‘cat’, ‘1’);
}
return $query;
}
add_filter(‘pre_get_posts’,’SearchFilter’);
———————————————————————————
Ho notato che le due funzioni lavorano correttamente sul mio tema ma
ora avrei bisogno di implementarle per estendere la ricerca anche alla categoria (non solo al post title) e contemporaneamente filtrare il tutto sulla categoria corrente (e relative sottocategorie).
Grazie mille