Query di Ricerca Personalizzata
Vorrei impostare una pagina di ricerca personalizzata che faccia quanto segue:
L'utente seleziona diversi elementi in un form che vorrebbe vedere nei risultati della ricerca (essenzialmente scegliendo da un elenco di tag).
Vengono restituiti i risultati che corrispondono a tutti i tag selezionati (usando AND non OR).
Un esempio specifico sarebbe:
Restituire tutti i post nella categoria "Area" dove i tag = "scuola elementare" AND "parco"
- Devo dare un nome particolare al mio form di ricerca?
- Nella pagina dei risultati di ricerca, come devo codificare la query personalizzata in modo che ottenga tutti i post all'interno della categoria Area e che abbiano tutti i tag che l'utente ha scelto nel form di ricerca?
// Esempio di query personalizzata
$args = array(
'category_name' => 'area',
'tag_slug__and' => array('scuola-elementare', 'parco'), // Usa AND per i tag
'post_type' => 'post',
'posts_per_page' => -1
);
$query = new WP_Query($args);
if ($query->have_posts()) :
while ($query->have_posts()) : $query->the_post();
// Mostra i risultati
the_title();
the_content();
endwhile;
wp_reset_postdata();
else :
echo 'Nessun risultato trovato';
endif;

1) Puoi utilizzare i template search.php
e searchform.php
come punto di partenza. Creare una Pagina di Ricerca Codex
2) Per quanto riguarda la query personalizzata, puoi usare l'hook pre_get_posts
per verificare se ti trovi in una pagina di ricerca, poi ottieni i tuoi valori da $_GET
e modifica la query di conseguenza. Riferimento Azione - pre_get_posts
Ci sono tantissimi tutorial online e domande su questo exchange che possono aiutarti. Alcuni sono Semplici e altri più Complessi. Dovrai fare delle ricerche approfondite per realizzare questo obiettivo. Spero sia d'aiuto!

Per creare una ricerca personalizzata, dovrai includere questi input nel tuo HTML. Puoi utilizzare gli attributi name e value per passarli all'URL.
<input type="hidden" class="category" name="category_name" value="recording">
<input type="hidden" class="type" name="post_type" value="post">
<input type="text" class="search-bar" id="global-search"><button class="search-submit" type="submit" id="search-submit">
Poi nel tuo file di script dovrai costruire l'URL.
// aggiorna il tipo di ricerca
let type = $('input.type').val();
if(type === 0 || type == undefined){
type = "";
}
// aggiorna la categoria di ricerca
let category = $('input.category').val();
if(category === 0 || category == undefined){
category = "";
}
// aggiorna la parola chiave di ricerca
keyword = '/?s=' + $(this).val() + '&post_type=' + type + '&category_name=' + category;
$('.search-keyword').attr('data-target','/cimuk' + keyword);
$('.search-keyword .label').text('Cerca ' + '"' + $(this).val() + '"');
//chiama questa funzione al submit o all'invio
function goKeyword(){
window.location.href = $('.search-keyword').data('target')
}
Poi puoi aggiungere questo filtro al tuo functions.php. Questo prenderà le variabili dall'URL e le passerà alla query di ricerca.
//Filtro di ricerca per tipo di post
function mySearchFilter($query) {
$post_type = $_GET['post_type'];
$category = $_GET['category_name'];
if (!$post_type) {
$post_type = 'any';
}
if (!$category){
$category = null;
}
if ($query->is_search) {
$query->set('post_type', $post_type);
$query->set('category_name', $category);
};
return $query;
};
add_filter('pre_get_posts','mySearchFilter');
I risultati dovrebbero caricarsi sul tuo search.php
