Come cercare per categorie e/o tag?

15 mag 2011, 14:18:32
Visualizzazioni: 18.1K
Voti: 4

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.

0
Tutte le risposte alla domanda 2
2
// Sopra il loop nel tuo template dei risultati di ricerca:
if ( is_search() ) // Siamo in una pagina di risultati di ricerca?
{
    global $wp_query, $query_string;
    // ora modifica/filtra la query (risultato)
    query_posts( $query_string . 'cat=1&tag=mele+mele' );
}
15 mag 2011 17:02:30
Commenti

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.

Mr B Mr B
15 mag 2011 23:54:01

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.

kaiser kaiser
16 mag 2011 04:17:29
0

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>";
23 lug 2020 17:39:12