- Home
- Categorie
- Coding e Sistemistica
- WordPress
- Risultati ricerca divisi per cadecoria. Hardcoding
-
Risultati ricerca divisi per cadecoria. Hardcoding
Ragazzi, spero che ci sia qualche volenteroso che sia capace e che abbia voglia di aiutarmi.
Vorrei migliorare la pagina di ricerca di wordpress in modo da mostrare i risultati divisi per categoria.
Esempio completo del risultato:
Ho i seguenti post:
- Post uno (categoria3)
- Post due (categoria4)
- Post tre (categoria3)
- Post quattro (categoria2)
Mettiamo che tutti questi post contengano la parola "pluto" nel titolo, andrò a cercare quindi pluto e mi verranno mostrati tutti e quattro i post. Vorrei che venissero mostrati in questo modo:
Categoria2
- Post quattro
Categoria3
- Post uno
- Post tre
Categoria4
- Post2
Inizialmente non pensavo fosse così complicato, ho creato dunque una pagina personalizzata search.php che esegue una query personalizzata.
Vi posto il codice
$chiave = $_GET['s']; // Questa è la parola chiave che viene passata dal form di ricerca $query_categorie = mysql_query("SELECT cat.cat_ID as cat_id, cat.cat_name as cat_name FROM 0wp_categories as cat ORDER BY cat.cat_ID ASC")or die(mysql_error()); // Questa query seleziona tutte le categorie del mio blog while($dati = mysql_fetch_array($query_categorie)) { $categoria_search_id = $dati['cat_id']; $categoria_search_name = $dati['cat_name']; // Per ogni categoria trovata esegue una query cercando la parola chiave nel titolo del post $pageposts = $wpdb->get_results("SELECT * FROM 0wp_posts as post JOIN 0wp_categories as cat JOIN 0wp_post2cat as post2cat ON cat.cat_ID = post2cat.category_id AND post.ID = post2cat.post_id WHERE cat.cat_ID = '$categoria_search_id' AND post.post_title LIKE '%$chiave%' AND post.post_status = 'publish' AND post.post_date < NOW() ORDER BY post.post_date DESC ", OBJECT); ?> <?php if ($pageposts): ?> <h6><?php echo $categoria_search_name;?></h6> <?php foreach ($pageposts as $post): ?> <?php setup_postdata($post); ?> // In questa parte (all'interno del ciclo foreach) vengono stampati i risultati secondo una determinata formattazione <?php endforeach; ?> <?php next_posts_link('« Precedenti') ?> <?php previous_posts_link('Successivi »') ?> <?php else : ?> <?php endif; ?> ```Per chi ha avuto la pazienza di seguirmi fin qui dico che lo script funziona, ottengo tutti i risultati il problema è che non riesco ad avere la paginazione. Compaiono infatti tutti i post che corrispondono a quella parola chiave ma vorrei far si che i risultati vengano paginati (rendendoli navigabili tramite next_posts_link e previous_posts_link). Purtroppo questo non accade... E' la prima volta che mi addentro nella modifica del loop e credo di star facendo non poca confusione. Se c'è qualcuno che potrebbe aiutarmi avrebbe tutta la mia stima ;)
-
Io proverei a scrivere in un plugin:
[php]add_filter('posts_where', 'penny_custom_search');function penny_custom_search($where){
if(is_search())
exit($where);
return $where;
}
[/php]E ad eseguire una ricerca standard di WordPress.
Questo codicillo dovrebbe stampare il valore di WHERE della query di wordpress.
Partendo da quello, con una espressione regolare, ne modifichi il valore.
Quando sei soddisfatto, anziché exit, fai ritornare il valore di where modificato. Così facendo hai appena modificato il loop di wordpress e tutte le funzioni integrate dovrebbero funzionare
-
@Fra_T said:
Io proverei a scrivere in un plugin:
[php]add_filter('posts_where', 'penny_custom_search');function penny_custom_search($where){
if(is_search())
exit($where);
return $where;
}
[/php]E ad eseguire una ricerca standard di WordPress.Questo codicillo dovrebbe stampare il valore di WHERE della query di wordpress.
Partendo da quello, con una espressione regolare, ne modifichi il valore.
Quando sei soddisfatto, anziché exit, fai ritornare il valore di where modificato. Così facendo hai appena modificato il loop di wordpress e tutte le funzioni integrate dovrebbero funzionare
Ti ringrazio, ma non riesco a capire bene quello che mi proponi... sarà che ho pochissime ore di sonno e ora sono scimunito :S
Potresti farmi un esempio concreto dell'utilizzo di questa funzione? Conosco abbastanza php ma al momento mi sfugge il significato della funzione
-
Utilizza le API di WordPress.
I dati utilizzati nel loop di WordPress sono generati da un query. Ogni parte della query può essere filtrata (Join, where, limit, ...).
Con add_filter('posts_where', 'penny_custom_search') faccio in modo che il valore di WHERE sia passato alla funzione penny_custom_search prima che la query sia eseguita.
Se è una ricerca, la funzione penny_custom_search blocca lo script e stampa il valore di where (così puoi vedere cosa modificare per fare una ricerca solo nel titolo dei post), altrimenti ritorna il valore originale di $where e lo script procede naturalmente.
-
@Fra_T said:
Utilizza le API di WordPress.
I dati utilizzati nel loop di WordPress sono generati da un query. Ogni parte della query può essere filtrata (Join, where, limit, ...).
Con add_filter('posts_where', 'penny_custom_search') faccio in modo che il valore di WHERE sia passato alla funzione penny_custom_search prima che la query sia eseguita.
Se è una ricerca, la funzione penny_custom_search blocca lo script e stampa il valore di where (così puoi vedere cosa modificare per fare una ricerca solo nel titolo dei post), altrimenti ritorna il valore originale di $where e lo script procede naturalmente.
Fra_T(ac?) ti ringrazio tanto per la disponibilità ma non riesco ancora a capire
Il fatto è che non ho ben compreso il sistema di funzionamento della ricerca di wordpress, la pagina search.php del template non contiene altro che la formattazione dei risultati...
Sato pensando a questo punto di creare un motore di ricerca da 0, estraendo i dati dal database wordpress e stampando a video i risultati tramite un comun mysql_fetch_array...
Tuttavia avrei bisogno di una funzione di ricerca anche all'interno di altre pagine (ad esempio, correlazioni tra post tramite i custom_meta_tag), in questo modo dovrei riuscire però a quel punto di wordpress rimarrebbe poco e niente...