Personalizzare la ricerca di WordPress con i Custom Post Types

ATTENZIONE: questo articolo è stato scritto oltre un anno fa, ed i contenuti potrebbero non essere più validi o compatibili. Sei pregato di tenerne conto, e se hai informazioni in merito di segnalarmele, grazie.

Il problema della ricerca su più tipi di post si pone spesso con i Custom Post Types in genere, ma spesso anche con WooCommerce ed i post personalizzati di temi e plugin, come i classici Portfolio, Gallery etc.

Mettiamo di avere un WordPress dove abbiamo creato due Custom Post Types “Biblioteca” e “Progetti”, e magari abbiamo installato pure WooCommerce.

Ci troveremo quindi a dover lavorare con questi tipi di post:

  • post (gli articoli di WordPress)
  • page (le pagine di WordPress)
  • product (i prodotti di WooCommerce)
  • biblioteca (custom post type creato da noi)
  • progetto (custom post type creato da noi)

Come fare per estendere la ricerca di WordPress ad uno o più Custom Post Types, e dato che ci siamo far sì che cerchi anche nei prodotti?
Facile, con il solito snippet.

Gli esempi che seguono devono essere inseriti nel file funcions.php del tema in uso, e come al solito è consigliabile l’utilizzo di un tema child.

Limitare la ricerca di WordPress ad un singolo tipo di post, esempio ai prodotti di WooCommerce

Con lo snippet qui sotto si limita la ricerca di WordPress ai soli prodotti di WooCommerce, ma sostituendo il tipo di post nella riga 4, esempio “product” con “progetto”, si limita la ricerca ai soli progetti.

if ( !is_admin() ) {
function searchfilter($query) {
if ($query->is_search && !is_admin() ) {
$query->set('post_type',array('product'));
}

return $query;

}
add_filter('pre_get_posts','searchfilter');
}

Estendere la ricerca di WordPress a più tipi di post

Con questa versione dello snippet la ricerca di WordPress viene estesa a tutti i tipi di post.
Per modificare i tipi di post coinvolti, basta modificare la lista della riga quattro:

if ( !is_admin() ) {
function searchfilter($query) {
if ($query->is_search && !is_admin() ) {
$query->set('post_type',array('post','page','product','biblioteca','progetto'));
}

return $query;

}
add_filter('pre_get_posts','searchfilter');
}

Si possono aggiungere altri tipi di post personalizzati utilizzati dai temi, come ad esempio il classico Portfolio o le FAQ, basta solo individuare la stringa usata per definire i post personalizzati.

Snippet ricavati dalla documentazione di WooCommerce.

Tags: , , , , , , ,

4 Risposte a “Personalizzare la ricerca di WordPress con i Custom Post Types”

  1. Mauro Farina 2 Set 2014 at 10:03 #

    È proprio l’argomento che dobbiamo affrontare…

  2. Pier 26 Nov 2016 at 10:43 #

    La mia salvezza! Cercavo da mesi una soluzione! Posso chiederti un piccolo aiuto? Io ho inserito il secondo codice da te mostrato in functions.php. Ha funzionato, ma siccome sto usando un compositore per creare le pagine adesso nelle ricerche mi viene un bruttissimo estratto di testo.

    Tramite CSS se oscuro l’estratto mi toglie anche il titolo e così non si capisce niente.

    Come posso fare?

    Ecco un esempio di ricerca fatta sul sito: http://www.clubaffari.it/?s=ristorante+trapani&post_type=post.

    Ti ringrazio. Cordiali saluti

    • Roberto Rota 26 Nov 2016 at 12:11 #

      Probabilmente il tema gestisce in modo limitato le funzioni di ricerca e la pagina di risposta.
      Io credo che dovresti interpellare lo sviluppatore del tema, sicuramente saprà fornirti le indicazioni per le modifiche necessarie al loop della ricerca.

      rob

Dubbi o suggerimenti? Lascia un commento!

I love Instagram