Traduzione




La ricerca di WordPress nelle pagine è impostato per una semplice ricerca di un campo di testo. Ma grazie alla sua flessibilità, possiamo cambiare il metodo di ricerca.

Non solo il campo di testo

In Worpdress, un articolo, così come una pagina, può contenere molte altre informazioni oltre alla categoria o le tag. Ad esempio, possiamo aggiungere diversi campi personalizzati, che possono arricchire la pagina dell’articolo, aggiungere informazioni di contorno, e molto altro.

Il modulo di ricerca che solitamente troviamo sia come widget che come parte del template utilizzato, è composto da un solo campo di ricerca: un campo di testo generico. Inserendo le parole chiave in questo spazio, WordPress eseguirà la ricerca di tali parole nel titolo e nel corpo dell’articolo o pagina. Ma se volessimo cercare anche nei campi personalizzati?

Nulla di più semplice: basterà modificare il modulo di ricerca del template (o crearne uno nuovo) e modificare la query di WordPress.

 

In questo modo, abbiamo un campo in più per la ricerca, ovvero il campo personalizzato Città che abbiamo creato appositamente.

Nella pagina “searchform.php” del nostro template, invece, dobbiamo eseguire una modifica alla nostra query dei post:

 

Infine, nella parte in cui viene eseguita l’iterazione per il controllo che la ricerca abbia dato degli elementi da mostrare:

ovvero: le funzioni have_posts() e the_post() verranno eseguite in relazione all’oggetto $the_query.

In questo modo, avremo un modulo di ricerca che, non solo eseguirà un filtro sul titolo o sul corpo dell’articolo, ma anche su eventuali campi personalizzati.

Unico handicap: se il campo di testo è vuoto, la ricerca non avrà luogo! E se volessi cercare esclusivamente sugli articoli in cui il campo personalizzato “city” sia “Roma”?

Esclusione del campo di testo dalla ricerca

Grazie alla flessibilità del nostro CMS/Blog WordPress, possiamo modificare una delle azioni che avvengono prima di mostrarci una pagina, “parse_query”.

Come spiega già il nome, l’azione “parse_query” esegue un controllo su eventuali contenuti inviati dalle pagine. Di default, quando viene analizzata la query, se il campo “s” risultasse vuoto di contenuto, la ricerca non avrebbe luogo. Per evitare tale limitazione, è necessario modificare leggermente l’azione di parsing della query.

Innanzitutto, al nostro form, dobbiamo aggiungere alcune modifiche. Dobbiamo aggiungere un campo di tipo hidden, con un nome specifico (e non troppo banale, per non andare in conflitto con altri componenti e/o plugin installati) in cui definiamo che questi dati fanno parte del nostro modulo di ricerca, e con un valore ben definito. Inoltre, dobbiamo cambiare il nome del campo di testo “s” in qualcosa di diverso, ad esempio “myText”, e dobbiamo infine inserire un campo di testo di tipo hidden con il nome di “s” ed un valore qualsiasi.

Poi, nel file functions.php del nostro template (al 99% riporta questo nome), aggiungiamo un azione:

In questo modo, WordPress riceverà comunque le informazioni per le sue query, sia per le pagine di archivio, che per i singoli post. Nel caso venisse utilizzato il modulo di ricerca, non saremo più vincolati a scrivere un testo da cercare, ma potremo arricchire il modulo di ricerca con informazioni più utili, sempre se abbiamo campi personalizzati nei nostri articoli.


Categories: PHP, Wordpress

Leave a Reply