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?
Zach Shallbetter
I valori di input in array non funzioneranno con il metodo GET, sarei sorpreso se quel codice stesse facendo realmente ciò che pensi..
t31os
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');