Ricerca in più tipi di post personalizzati e pagine
Sto utilizzando il metodo di bainternet per cercare nei custom post_types e funziona benissimo. Recentemente però mi è stato chiesto di restituire più di un tipo di post "specifico" e possibilmente anche pagine individuali per una sezione di supporto del nostro sito.
Pensavo che aggiungere campi hidden aggiuntivi potesse funzionare, ma non è stato così. E non ho idea di come far funzionare il tutto con le pagine.
Qualsiasi aiuto sarebbe apprezzato!
Nel template:
<form action="http://apollo.website.net/" id="searchform" method="get" role="search">
<div><label for="s" class="screen-reader-text">Cerca:</label>
<input type="text" id="s" name="s" value="">
<input type="submit" value="Cerca" id="searchsubmit">
<input type="hidden" name="post_type" value="software" />
</div>
</form>
In functions.php:
/* Query di ricerca personalizzate */
function SearchFilter($query) {
$post_type = $_GET['post_type'];
if (!$post_type) {
$post_type = 'any';
}
if ($query->is_search) {
$query->set('post_type', $post_type);
};
return $query;
}

modifica
<input type="hidden" name="post_type" value="software" />
con
<input type="hidden" name="post_type[]" value="software" />
<input type="hidden" name="post_type[]" value="books" />
devo scappare ma dovrebbe funzionare, basta aggiungere tutti i campi nascosti che ti servono per ogni tipo di post

Funziona benissimo, grazie! C'è un modo per fargli restituire anche le pagine correlate?

I valori di input in array non funzioneranno con il metodo GET
, sarei sorpreso se quel codice stesse facendo realmente ciò che pensi..

Puoi farlo in questo modo per alternare tra un tipo di post specifico e qualsiasi tipo..
<input type="hidden" name="post_type" value="software" />
<label for="post_type">Cerca in tutti</label>
<input type="checkbox" name="post_type" value="any" />
Quando non è selezionato cerca nel tipo specifico, quando è selezionato imposta il tipo di post su "qualsiasi"..

Per me funziona questa soluzione (la stessa di Bainternet, ma senza "[]" dopo "post_type"):
<input type="hidden" name="post_type" value="photo">
<input type="hidden" name="post_type" value="video">
E per ottenere un template specifico per i risultati di ricerca basato sul tipo di post (su functions.php):
function search_template_chooser($template) {
global $wp_query;
$post_type = get_query_var('post_type');
if( $wp_query->is_search && $post_type == 'photo' || $wp_query->is_search && $post_type == 'video' ) {
return locate_template('search-media.php');
}
return $template;
}
add_filter('template_include', 'search_template_chooser');
