Fw

Wordpress Creative Developer

Guida WordPress – Ricerca Basata sulla Categoria Corrente

  • Guide Wordpress
  • -

Oggi voglio condividere con te una breve guida WordPress su come modificare il comportamento naturale della ricerca con WordPress.

Guida WordPress - Ricerca Basata sulla Categoria Corrente

La Richiesta

In un sito che ho sviluppato di recente ci sono state due richieste che riguardavano il funzionamento della ricerca in WordPress:

  1. la ricerca deve essere effettuata solo tra gli articoli della categoria corrente in cui l’utente si trova;
  2. 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.

Plugin WordPress-  Search Everything

Ti consiglio inoltre di leggere l’articolo di Hongkiat, dove sono stati raccolti plugin per migliorare la ricerca con WordPress.

1 commento

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

Scrivi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *