Come cercare per categorie e/o tag?
Ho una funzione di ricerca nel mio blog. Se inserisco un valore, ad esempio 'frutta' nella casella di ricerca e non trova corrispondenze nei post, ma è il nome di una categoria del blog, vorrei che venissero visualizzati i post appartenenti a quella categoria.
È possibile modificare la funzionalità di ricerca in modo che includa anche la ricerca in tutte le categorie e possibilmente nei tag del blog?
Grazie mille.
Credo che il codice sopra riportato prenderà l'input dall'utente e lo cercherà all'interno della categoria apple. Quello che intendo è che voglio che la ricerca copra tutti i nomi di categorie e tag nel blog. Quindi, ad esempio, se digito nella casella di ricerca; frutta, allora anche se potrei non avere post contenenti il testo 'frutta' voglio comunque che i post che appartengono a quella categoria appaiano nella ricerca, allo stesso modo se digito verdura (un'altra categoria) nella casella di ricerca voglio che vengano visualizzati i post della categoria verdura. Scusate se non sono stato chiaro nella domanda, la modificherò ora.

Perché non crei semplicemente un menu a discesa per tutte le tue categorie e/o tag e li colleghi lì? O hai troppe categorie/tag? A proposito: hai già cercato nel repository dei plugin uno che sia in grado di fare questo? E: ho modificato il titolo della tua domanda per maggiore chiarezza.

Ecco una funzione che cercherà tutte le categorie (o altre tassonomie) che corrispondono alla stringa data e restituirà tutti i post inclusi in quella categoria.
function searchTermPosts(String $query) {
// Prima ottieni le categorie/tassonomie che hanno un 'nome simile' alla query
$terms = get_terms([ "name__like" => $query ]);
// Ora converti in una query tassonomica che possiamo usare in WP_Query
$tax_query = array_map(function ($term) {
return [
"taxonomy" => $term->taxonomy,
"terms" => $term->term_taxonomy_id
];
}, $terms);
// Aggiungi una clausola "OR" per trovare i post in tutte le categorie
$tax_query["relation"] = "OR";
// Ora esegui la query
$results = new \WP_Query([
"tax_query" => $tax_query
]);
// Restituisci sia i risultati che i termini, oltre ai nomi dei termini
return [
"results" => $results,
"terms" => $terms,
"term_names" => array_map(fn ($t) => $t->name, $terms)
];
}
E poi usala in questo modo:
$query = searchTermPosts("frutta");
$count = $query['results']->found_posts;
$cats = implode(",", $query['term_names']);
echo "Trovati $count risultati in queste categorie: $cats";
echo "<ul>";
while ($query['results']->have_posts()) {
$query['results']->the_post();
echo '<li><a href="' . get_the_permalink() . '">';
the_title();
echo '</a></li>';
}
echo "</ul>";
