Per creare una funzionalità di ricerca personalizzata in WordPress che consenta di cercare nei meta post e nelle categorie, puoi utilizzare la classe WP_Query
. Ecco un esempio pratico per implementare questa funzionalità.
Form di Ricerca Personalizzato
Puoi aggiungere un form di ricerca personalizzato nel tuo tema per utilizzare questa funzionalità. Ad esempio:
<?php // Funzione per eseguire la ricerca personalizzata function custom_search_query( $search_query ) { if ( isset( $_GET['s'] ) && ! empty( $_GET['s'] ) ) { $search_term = sanitize_text_field( $_GET['s'] ); $meta_key = isset( $_GET['meta_key'] ) ? sanitize_text_field( $_GET['meta_key'] ) : ''; $args = array( 'post_type' => 'post', // Tipo di post da cercare (modifica se necessario) 'post_status' => 'publish', 's' => $search_term, // Cerca nel titolo e nel contenuto 'meta_query' => array(), // Query per i meta post 'tax_query' => array(), // Query per le categorie ); // Aggiunge una condizione per cercare nei metadati, se specificata if ( $meta_key ) { $args['meta_query'][] = array( 'key' => $meta_key, 'value' => $search_term, 'compare' => 'LIKE', ); } // Aggiunge una condizione per cercare nelle categorie $args['tax_query'][] = array( 'taxonomy' => 'category', // Tassonomia (categorie in questo caso) 'field' => 'name', // Cerca per nome 'terms' => $search_term, // Termine di ricerca 'operator' => 'LIKE', ); // Esegue la query $query = new WP_Query( $args ); if ( $query->have_posts() ) { while ( $query->have_posts() ) { $query->the_post(); ?> <div class="search-result"> <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2> <p><?php the_excerpt(); ?></p> </div> <?php } wp_reset_postdata(); } else { echo '<p>Nessun risultato trovato.</p>'; } } }
Funzionamento
- Cerca nei Metadati:
- Se il parametro
meta_key
è specificato, la funzione cerca nei meta post corrispondenti utilizzandometa_query
.
- Se il parametro
- Cerca nelle Categorie:
- Se il termine corrisponde a una categoria, la ricerca lo includerà utilizzando
tax_query
.
- Se il termine corrisponde a una categoria, la ricerca lo includerà utilizzando
- Reset della Query:
- Alla fine, la query viene resettata con
wp_reset_postdata
per evitare conflitti con altre query.
- Alla fine, la query viene resettata con
<form method="get" action="<?php echo home_url( '/' ); ?>"> <input type="text" name="s" placeholder="Cerca..." value="<?php echo get_search_query(); ?>" /> <select name="meta_key"> <option value="">-- Cerca in --</option> <option value="custom_meta_key">Metadato personalizzato</option> <!-- Aggiungi altre opzioni se necessario --> </select> <button type="submit">Cerca</button> </form>
Note Importanti
- Sanitizzazione dei Dati: Usa sempre funzioni come
sanitize_text_field
per prevenire attacchi XSS. - Compatibilità: Questo codice è compatibile con WordPress e funziona su tutti i temi standard.
- Estendibilità: Puoi aggiungere tassonomie o altri metadati alla ricerca semplicemente espandendo le query.