- Home
- Categorie
- Coding e Sistemistica
- WordPress
- [WordPress]ricerca per filtri incrociati
-
[WordPress]ricerca per filtri incrociati
Vorrei creare una pagina dedicata in cui tramite dei menu a tendina per quanti sono i custom fields (campi personalizzati) che inserisco per ogni post mi permetta di farmi visualizzare stile pagina archive.php i risultati incrociati.
Esempio:
ho 2 campi personalizzati per ogni post
verdura
coloreSul primo post ho
verdura: pomodoro
colore: rossoSul secondo post ho
verdura: insalata
colore: verdeSul terzo post ho
verdura: ravanello
colore: rossoSe dai menu a tendina per il colore scelgo rosso vorrei che mi compaia il primo e il terzo post
mentre se dal menu a tendina verdura scelgo pomodoro e nel menu tendina del colore rosso vorrei far comparire solo il primo postChiaramente questo è solo un esempio semplicissimo con 3 post e 2 metadata giusto per farvi capire meglio l' esigenza partorita dalla mia mente contorta
Avrei in mente concettualmente come organizzare la cosa ma volevo sapere se qualcuno aveva dei consigli pratici da darmi per poter imbarcarmi in questa customizzazione
Grazie per ogni eventuale risposta.
-
qua serve Fra_T o qualche volenteroso del codice estremo. la mia idea è che devi scriverti direttamente la query e la pagina con l'html per richiamarla...
-
Io per creare i menu a tendina ho creato questo codice:
$paese = mysql_query("SELECT * FROM wp_postmeta WHERE meta_key = 'Paese' ORDER BY meta_key ASC"); echo "<table><tr><td><h3>Localizzazione</h3><select>"; while ($records = mysql_fetch_array($result)) { echo "<option value=\"\">". $records['meta_value'] . "</option>"; } echo "</select></td>"; $secolo = mysql_query("SELECT * FROM wp_postmeta WHERE meta_key = 'Secolo' ORDER BY meta_key ASC"); echo "<td><h3>Secolo</h3><select>"; while ($records = mysql_fetch_array($secolo)) { echo "<option value=\"\">". $records['meta_value'] . "</option>"; } echo "</select></td>"; $tipologia = mysql_query("SELECT * FROM wp_postmeta WHERE meta_key = 'Tipologia' ORDER BY meta_key ASC"); echo "<td><h3>Tipologia</h3><select>"; while ($records = mysql_fetch_array($tipologia)) { echo "<option value=\"\">". $records['meta_value'] . "</option>"; } echo "</select></td></tr></table>";
NOTE:
Paese, secolo, tipologia fanno parte del campo meta_key della tabella wp_postmeta: con le query sopra riportate mi creo i menu a tendina con il loro valore del campo meta_valueOra mi mancherebbe capire come impostare la query di ricerca per estrapolare i dati che mi servono.
Praticamente:
scelgo dai 3 menu a tendina il valore di paese, secolo, tipologia e vorrei che mi comparisse stile teplate archive.php la lista dei risultati con quei valori.Grazie Tambu.
PS: spero che Fra_T intervenga allora
Magari alla fine si fa un bel plugin
-
Ciao, un idea potrebbe essere usare le categorie, che più o meno servono a questo
Comunque le query per estrapolare/incrociare le ricerche dovrebbe essere qualcosa del genere:
- controlli se si sta cercando su 1 , 2 o 3 combinazioni di meta_key (Paese, secolo, tipologia).
Supponiamo che la ricerca sia fatta incrociando paese e secolo, questa la query:
SELECT post_id FROM $wpdb->postmeta WHERE (meta_key = 'paese' AND meta_value = 'Parma') OR (meta_key = 'secolo' AND meta_value='XXI') GROUP BY post_id HAVING COUNT(post_id) = 2;
Nota HAVING COUNT(post_id) = 2, il due è tale perché stai usando due parametri nella ricerca (paese e secolo), sarebbe 3 se ci fosse anche 'tipologia'.
La query restituisce gli ID dei post, con quelli o fai una query o fai direttamente un JOIN con la tabella dei post.
-
Grazie Fra_T per la risposta.
L' idea delle categorie non era male, ma se per le tipologie che alla fine ho optato per suddividere e gestire i paesi me ne trovo già una lista di 40 per esempio, aggiungendo secoli e/o tipologie nel mmento in cui andrò a postare mi perderei per cercare e spuntare paese, tipologia e secolo dalla lista categorie.
Per questo mi era venuto a mente di coinvolgere i campi personalizzati e tagwarrior come plugin per i tag che mi gestiscono la "categoria" tipologia.
PS: ho trovato oggi un sito basato su WordPress che utilizza proprio la soluzione che sto cercando utilizzando mi sembra uno scriprino in javascript ed i permalink a quanto pare. Avete qualche idea in merito a questo funzionamento? Il sito in questione è http://www.regaloregali.it/ col form nella colonna a destra "Trova regali e idee regalo"
-
Ecco magari quel sito usa un plugin, ma sinceramente non lo conosco.
A volerlo fare ed a tenerlo separato dalle categorie - secondo me - o usi solo i postmeta, o ti crei una tabella apposita. Se usi solo i meta la query è + o - quella che ti ho postato più join con wp_posts (ed eventuale verifica che non sia pagina, draft, future, allegato). Però...
O ti va bene di passare i parametri dei filtri con un metodo tradizionale, stile ?paese=parma&secolo=xxi&tipo=nonso, o devi usare la classe wp_rewrite (mi sembra si chiami) per riscrivere l'URL e registrare la regola.
E poi la visualizzazione integrata? Dovresti usare la classe $wp_query http://codex.wordpress.org/Function_Reference/WP_Query
Insomma c'è da perdere un po' di tempo a leggersi la documentazione ed a fare delle prove.
Forse, per WP_query, basta qualcosa tipo:
if($_GET['paese'] /* or anno or tipo */){ // Inizializza/resetta la classe $wp_query->init(); $wp_query->parse_query(/*Qui la query per selezionare i post*/); }
Il codice lo dovresti mettere in un plugin. Funzionerà così? O bisogna metterlo in una funzione da "agganciare" con le API? C'è da fare delle prove
-
Imho avrei voluto la soluzione passo passo e query su query ma anche cosi devo dire che mi hai dato speranza
Avrei sperato di trovare una soluzione, cmq provo, provo, provo e poi vi faccio sapere
Grazie Fra_T
-
Grazie a te se ci riesci e se pubblichi come hai fatto.
E' una parte interessante ed avanzata di Wordpress