Ricerca per parola, categoria, tag, autore

19 lug 2012, 15:48:43
Visualizzazioni: 20K
Voti: 2

Per implementare una pagina di ricerca con queste funzionalità in WordPress, ecco un esempio pratico di come puoi procedere:


// Nel file search-form.php o nel template della pagina di ricerca
<form role="search" method="get" class="search-form" action="<?php echo home_url('/'); ?>">
    <!-- Ricerca per parola chiave -->
    <input type="text" name="s" placeholder="Cerca per parola chiave">
    
    <!-- Ricerca per categoria -->
    <select name="category_name">
        <option value="">Tutte le categorie</option>
        <?php
        $categories = get_categories();
        foreach($categories as $category) {
            echo '<option value="' . $category->slug . '">' . $category->name . '</option>';
        }
        ?>
    </select>
    
    <!-- Ricerca per tag -->
    <select name="tag">
        <option value="">Tutti i tag</option>
        <?php
        $tags = get_tags();
        foreach($tags as $tag) {
            echo '<option value="' . $tag->slug . '">' . $tag->name . '</option>';
        }
        ?>
    </select>
    
    <!-- Ricerca per autore -->
    <select name="author">
        <option value="">Tutti gli autori</option>
        <?php
        $authors = get_users(['who' => 'authors']);
        foreach($authors as $author) {
            echo '<option value="' . $author->ID . '">' . $author->display_name . '</option>';
        }
        ?>
    </select>
    
    <button type="submit">Cerca</button>
</form>

<?php
// Nel file functions.php per modificare la query di ricerca
function custom_search_query($query) {
    if ($query->is_search && !is_admin()) {
        // Gestione dei parametri di ricerca
        if (!empty($_GET['category_name'])) {
            $query->set('category_name', $_GET['category_name']);
        }
        if (!empty($_GET['tag'])) {
            $query->set('tag', $_GET['tag']);
        }
        if (!empty($_GET['author'])) {
            $query->set('author', $_GET['author']);
        }
    }
    return $query;
}
add_action('pre_get_posts', 'custom_search_query');

Questo codice crea:

  • Un form di ricerca con campi per parola chiave, categoria, tag e autore
  • Dropdown menu popolati automaticamente con le categorie, i tag e gli autori esistenti
  • Una funzione personalizzata che modifica la query di ricerca di WordPress per includere i parametri selezionati

Per implementare questa soluzione:

  1. Crea un nuovo file template per la pagina di ricerca o modifica il file search.php esistente
  2. Aggiungi il codice del form nel template
  3. Inserisci la funzione custom_search_query nel file functions.php del tuo tema
  4. Personalizza lo stile CSS secondo le tue esigenze

Puoi anche estendere questa funzionalità aggiungendo:

  • AJAX per ricerche dinamiche
  • Filtri aggiuntivi (come data, tipo di post, ecc.)
  • Ordinamento dei risultati
  • Paginazione personalizzata
0
Tutte le risposte alla domanda 2
1

Dovrai aggiungere alcuni pulsanti radio all'interno del tuo modulo di ricerca. Poi aggiungi un filtro alla tua ricerca:

function filter_search( $query ) {
if( $query->is_search ) {
            if ( isset($_GET['tag']) )
            // modifica qui la tua query di ricerca
}
return $query;
}
add_filter( 'pre_get_posts' , 'filter_search' );

Ispirato da http://wordpress.org/support/topic/how-to-add-search-filter-by-custom-values#post-1463329

19 lug 2012 16:26:38
Commenti

Lo terrò a mente nel caso in cui dovessi costruire la stringa di query manualmente tramite radio-box e text-box. Grazie!

p.a. p.a.
20 lug 2012 09:21:52
2

Se preferisci lasciare che sia un plugin WordPress a fare il lavoro per te, dai un'occhiata a Search Everything, nel repository dei plugin WordPress.

Migliora la funzionalità di ricerca predefinita di WordPress in tre semplici passaggi utilizzando Search Everything.

Una ricerca WordPress migliore in tre passaggi

Attiva Configura le opzioni Cerca (forse sono solo due passaggi)

Le opzioni includono evidenziazione dei risultati, ricerca nelle pagine, negli estratti, negli allegati, nelle bozze, nei commenti e nei campi personalizzati (metadati).

Cosa fa:

Search Everything potenzia la ricerca predefinita di WordPress, con le seguenti opzioni:

  • Evidenziazione dei risultati di ricerca
  • Ricerca in tutte le pagine
  • Ricerca in tutti i tag
  • Ricerca nelle tassonomie personalizzate (nuovo)
  • Ricerca in tutte le categorie
  • Ricerca solo nelle pagine non protette da password
  • Ricerca in tutti i commenti
  • Ricerca solo nei commenti approvati
  • Ricerca in tutte le bozze
  • Ricerca in tutti gli estratti
  • Ricerca in tutti gli allegati (post type)
  • Ricerca in tutti i campi personalizzati (metadati)
  • Esclusione di articoli dalla ricerca
  • Esclusione di categorie dalla ricerca

[Plugin WordPress]: Search Everything

19 lug 2012 16:44:21
Commenti

ottima idea, l'ho provato per la ricerca di custom post types e funziona, grazie!

p.a. p.a.
20 lug 2012 09:20:52

Questo plugin è utile ma fa l'opposto di ciò di cui ho bisogno: prende in input una parola e cerca nei tag, nelle categorie, nei titoli ecc. questa parola. Ciò di cui ho bisogno sono criteri come: categoriaZ & tag "XYY" & titolo contiene "Casa". Quindi immagino che questo plugin non sia utilizzabile in questo caso. Corretto?

p.a. p.a.
20 lug 2012 10:29:18