Oggi vi farò vedere come si espande la ricerca di WordPress oltre il titolo del post e il contenuto. Possiamo far sì di cercare anche nei campi personalizzati per esempio.
Iniziamo per aprire il file searchform.php del template e inserire un altro campo di tipo “hidden” con il nome “ricerca generale” con il valore 1:
<input type="hidden" value="1" name="ricerca_generale">
Questo ci servirà perché in questo modo sapremo quando attivare la ricerca generale tramite una nuova query.
Sulla pagina search.php, inseriamo un condizionale “if” all’inizio per vedere se gli è stato passato il valore “ricerca_generale”
<?php $ricerca_generale=$_REQUEST['ricerca_generale']; if ($ricerca_generale=="1") {
E quindi se questo succede, creiamo una nuova query personalizzata:
<?php $query_ricerca_generale = " SELECT DISTINCT wp_posts.ID,wp_posts.post_status,wp_posts.post_title,wp_posts.post_content ,categorie.name AS categoria, costruttore.costruttore AS costruttore FROM wp_posts, categorie, costruttore, wp_terms, wp_term_relationships WHERE wp_posts.ID = costruttore.post_id AND wp_posts.ID = wp_term_relationships.object_id AND wp_term_relationships.term_taxonomy_id = wp_terms.term_id AND wp_posts.ID = costruttore.post_id AND wp_posts.ID = categorie.ID AND wp_posts.post_status='publish' AND ( wp_posts.post_content LIKE '%".$key."%' OR wp_posts.post_title LIKE '%".$key."%' OR costruttore.costruttore LIKE '%".$key."%' OR categorie.name LIKE '%".$key."%' ) GROUP BY categorie.ID; ";
Le tabelle “categorie” e “costruttore” sono 2 tabelle di tipo VIEW create tramite queste 2 query:
1) create view categorie as SELECT wp_posts.ID, wp_terms.name FROM wp_term_taxonomy, wp_posts, wp_term_relationships, wp_terms WHERE wp_terms.term_id = wp_term_taxonomy.term_id AND wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id AND wp_posts.ID = wp_term_relationships.object_id AND wp_term_taxonomy.taxonomy = "category" ORDER BY wp_posts.post_title; 2) create view costruttore as select post_id, meta_value AS costruttore from wp_postmeta where meta_key='costruttore';
dove ‘costruttore’ è un meta key (campo personalizzato) degli articoli presenti sul sito.
Quindi per ogni campo personalizzato che andremo ad usare nella ricerca, bisogna creare la tabella “view” rispettiva.
Poi, quello che segue e un semplice ciclo che elenca i post trovati con la query personalizzata.
<?php if ($pageposts): ?> <?php global $post; ?> <?php foreach ($pageposts as $post): ?> <?php setup_postdata($post); ?> <a href="<?php echo get_permalink($post->ID); ?>" title="<?php the_title(); ?>"> <?php the_title(); ?> </a> <?php endforeach; ?> <?php endif; ?>
Se ci sono domande non esitate a chiedere!
Grazie!