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_postdataper 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_fieldper 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.
