due chiacchiere

Ordinare gli articoli in WordPress

Sto realizzando per un cliente un sito di notizie, basato sulla robusta piattaforma di WordPress, uno dei migliori programmi per gestione di contenuti, particolarmente indicato per tenere un blog. Fin qui nulla di strano: ricevuto il tema grafico in HTML, l’ho trasformato in un template di WordPress, ho aggiunto il mio editor visuale potenziato, ho configurato le solite cose. Poi è arrivata la richiesta difficile: i redattori devono poter decidere l’ordine degli articoli nella pagina iniziale. Come forse saprai, WordPress consente di mostrare gli articoli dal più recente in poi: fargli cambiare idea non è stato un giochetto da poco, ma alla fine ci sono riuscito. Ecco i passi che ho seguito.

Etichettare gli articoli

Non entrerò nei dettagli di come si scrive un tema per WordPress, esistono già delle ottime guide in merito, scritte proprio dagli sviluppatori del programma. Suppongo che tu sappia cosa sia il Loop: quella parte in cui si ottiene l’elenco degli articoli da mostrare all’utente. Prima di tutto va stabilito come assegnare l’ordine: io ho scelto un campo “custom” di quelli che puoi definire in fondo alla schermata di scrittura, e l’ho chiamato posizione. Se quindi ho 6 articoli in homepage, le mie posizioni andranno dalla 1 alla 6. Nella posizione 1 voglio far apparire l’articolo più recente che ha nel campo il valore 1, e così via.

Tutta questione di vettori

Dopo una lunga ricerca, ho trovato il pezzo che mi mancava, la funzione interna setup_postdata, con cui posso dire al sistema quale articolo usare per tutte le chiamate the_permalink, the_title, the_content che mi servono per disegnare graficamente l’articolo stesso all’interno della pagina. I passi a questo punto diventano quattro: ottenere l’elenco dei post, infilarli in un nuovo vettore avendo come chiave la posizione, ordinare il vettore, visualizzare il risultato. Trovi qui il codice sorgente da includere nel tuo tema.

Commenti

  1. Monte ha scritto:

    Bravo, bell’idea, ma per la maggior parte dei casi ovviamente conviene la normale disposizione temporale!

  2. camu ha scritto:

    Si, ma questo era per dimostrare la grande flessibilità di WordPress come sistema di gestione dei contenuti: ottimo per mantenere da un semplice blog amatoriale fino al sito di notizie medio grande, e per di più personalizzato. Senza toccare il “core” del programma.

  3. Lionel Chollet ha scritto:

    Hello, and thanks for your source code,

    I’d like to order posts (ASC order) in my category archive pages according to the value (integer) of a custom field key (reference number).

    Using the code presented here, I managed to do this, sort of (pun intended)… but i’d have to create a template page for each category (i.e., think of creating a new archive template every time a new category would be added), and some data were not displayed on the archive page (e.g., the tag data appeared blank…)

    What could I do?

  4. Jeff ha scritto:

    Fantastic!! This is exactly what I was looking for! Thanks from Buenos Aires!

  5. camu ha scritto:

    Nicola, in genere nell’index.php, ovvero dove si trova il ciclo che preleva tutti gli articoli dalla base di dati (qualcosa tipo foreach $post...). In effetti non l’avevo specificato chiaramente, grazie per la precisazione.

  6. nicola ha scritto:

    non ho capito una cosa. In quale pagina php del tema va inserito questo codice?

  7. viziodiforma ha scritto:

    Ottimo, era proprio quello che mi serviva. Ma.. ho posizionato il codice nell’index del tema, ma non è accaduto nulla. Forse mi sono persa qualche passaggio :/
    Mi aspettavo di avere la possibilità nel pannello di amministrazione di wp di scegliere la posizione degli articoli inserendo 1, 2,3.. Ho capito male?

  8. camu ha scritto:

    @viziodiforma: beh ci sei quasi. La cosa funziona così: per ogni articolo dovrai definire il custom field (campo personalizzato) con etichetta “posizione” e poi assegnargli un valore da 1 a 6, ed il gioco è fatto.

  9. viziodiforma ha scritto:

    Ora ho capito 🙂 tks

  10. ant ha scritto:

    ciao, questa funzione sarebbe utilissima… purtroppo non capisco dove inserirla nel mio index.php
    Uso come template Vina ( http://wordpress.org/extend/themes/vina )
    Non trovo nessun ” foreach $post” ….
    Grazie!
    A.

  11. camu ha scritto:

    @ant: ho dato un’occhiata al codice sorgente del tuo tema, ed in effetti chi l’ha sviluppato ha usato un modo di programmarlo abbastanza contorto e di certo non elegante, per questo non l’hai trovato. Nel tuo caso andrebbe proprio riscritto il ciclo mescolando il loro codice al mio… se vuoi ti faccio vedere come, mandami una mail.

  12. andrea ha scritto:

    Ho provato a iserire il tuo codice nell’index.php al posto del mio loop, uso wordpress 3 ma non visualizzo neanche il title degli articoli, con il tuo loop bisognerebbe vedere sole gli articoli giusto?

    grazie buon lavoro!

    Risposte al commento di andrea

    1. camu ha scritto:

      @andrea: hai assegnato le posizioni con i custom field?

  13. Michele ha scritto:

    Ciao, ottima guida, vorrei chiederti una info se posso. E’ possibile ordinare gli articoli in maniera casuale?

    Risposte al commento di Michele

    1. camu ha scritto:

      @Michele: si, per quello ti basta usare una normale get_posts con il parametro ‘rand’.

  14. Michele ha scritto:

    In che modo dovrei usarla?

    Risposte al commento di Michele

    1. camu ha scritto:

      @Michele: la gente che non si mette a leggere la documentazione mi sa molto di pigro 🙂 Volete tutti il piatto pronto e servito! Eppure il tuo è un “portale” sul mondo della tecnologia e dell’informatica 8)

  15. Michele ha scritto:

    Forse mi sono espresso male nella domanda, la funzione ke mi hai mostrato crea un elenco random degli articoli del mio sito, io invece vorrei ke gli articoli venissero visualizzati in maniera random, è possibile?

  16. Giovanni ha scritto:

    ciao, grazie per la funzione che è veramente utile.
    Io ho la necessità di avere dei custom fields (su cui fare la query l’ordinamento, ovvero il tuo “posizione”) con valore uguale. La funzione adesso ne pubblica solo uno mentre io vorrei pubblicarli tutti. Nle mio caso specifico il custom field è la data di un evento e spesso ho più eventi (posts) che si svolgono la stessa data (posizione). Come posso risolvere? grazie mille

    Risposte al commento di Giovanni

    1. camu ha scritto:

      Mi spiace Giovanni, ma al momento non ho tempo per analizzare il tuo codice. Fatti sentire fra almeno un paio di settimane. Grazie 😉

Rispondi a nicola

Torna in cima alla pagina