WordPress: archivio mesi precedenti come lista a discesa

Un altro noioso articolo tecnico, a beneficio di chi come me usa WordPress per il proprio blog… :wink:

Era da un po’ di tempo che volevo modificare i link all’archivio dei mesi precedenti del blog, nella colonna laterale. Visto che il blog invecchia, i mesi aumentano e l’elenco comincia a diventare un po’ troppo ingombrante, pensavo infatti di sostituirlo con una lista a discesa dalla quale selezionare il mese desiderato.

La porzione di codice del file sidebar.php che visualizza l’archivio in modo “standard” (nel template di default, per capirci) come elenco puntato di link è questo:

<li>
<h2>Archivio</h2>
<ul>
<?php wp_get_archives('type=monthly'); ?>
</ul>
</li>

Cercando un po’ in giro ho scoperto che per implementare una lista a discesa avrei dovuto usare invece questo codice (utilizzato anche in molti dei template che si trovano in rete):

<form name="archiveform" action="">
<select name="archive_chrono" onchange="window.location
=(document.forms.archiveform.archive_chrono
[document.forms.archiveform.archive_chrono.selectedIndex].value);">
<option value=''>Scegli un mese</option>
<?php get_archives('monthly','','option'); ?>
</select>
</form>

Il codice in effetti funziona, ma ha un problema, che per molti può essere insignificante, ma per me è invece molto importante: non è valido come XHTML Strict!

Allora ci ho studiato un po’ sopra e alla fine sono riuscito a renderlo valido apportando alcune modifiche: prima di tutto occorre sostituire nel tag “form” l’opzione “name” con l’equivalente “id” e poi bisogna includere il tag “select” in un paragrafo. Già che c’ero, ho anche sostituito la funzione get_archives (che si usava nelle prime versioni di WP) con la più corretta wp_get_archives, adattando la sintassi dei parametri. Il codice risultante è il seguente:

<form id="archiveform" action="">
<p>
<select name="archive_chrono" onchange="window.location=(document.forms.archiveform.archive_chrono
[document.forms.archiveform.archive_chrono.selectedIndex].value);">
<option value=''>Scegli un mese</option>
<?php wp_get_archives('type=monthly&format=option'); ?>
</select>
</p>
</form>

Il risultato lo potete vedere in funzione nella colonna laterale del mio blog, qui a sinistra.
Per dovere di cronaca, preciso che il tutto è stato realizzato e testato su WordPress 1.5.2.

Informatica, Permalink

Abbiamo 30 commenti a questo articolo

  1. Situation dice:

    ciao zelig…..ho una curiosità: è possibile fare lo stesso lavoro con le categorie del sito, però escludendone alcune??? io ho già una lista a discesa per le categorie, però non volevo visualizzarle tutte….

    ti ringrazio :cheesygrin:

  2. Zelig dice:

    @Situation: dai un occhiata a questa FAQ per il codice che consente di escludere alcune categorie, dovrebbe fare al caso tuo: http://www.wordpress-it.it/wiki/Main/FaqGenerali#toc29

  3. Situation dice:

    sì, conosco i comandi sort e exclude (d’altronde avendo passato settimane a scervellarmi alla fine qualcosa ho assimilato :cheesygrin: )……però sembra che con il menù a tendina (lista a discesa, come la chiami tu) non funzionino….

    io ho usato un codice che ha creato un ragazzo e che mi ha mandato, te lo mostro subito….

    ” method=”get”>

    nella parentesi che segue la stringa “dropdown_cats” ho provato a inserire i comandi sort e exclude, però senza risultati.
    tu conosci altri parametri che possano essere validi per “dropdown_cats”, oppure sai dirmi se devo completamente cambiare codice per potere utilizzare sort e exclude? (e in tal caso, puoi aiutarmi in questo?)

    grazie mille :wink:

  4. Situation dice:

    oddio, il codice che avevo incollato è sparito……se hai bisogno te lo mando via email…

  5. Zelig dice:

    Putroppo, come hai potuto notare, scrivere del codice HTML nei commenti porta a risultati poco piacevoli, perchè in fase di visualizzazione viene interpretato come il resto del codice della pagina… :evil: Sto cercando una soluzione anche per questo, ma la vedo dura!
    Nel frattempo è meglio se mi mandi un’email, si. :smile:

  6. Zelig dice:

    Ok, ho la soluzione al quesito di Situation.
    Anzi, ancora meglio, ho un plugin! :winky:

  7. Paolo dice:

    Caro Zelig, solo tu mi puoi salvare: ho fatto quanto hai indicato qua sopra e sicuramente ha funzionato alla grande, e ti ringrazio, ora però, non so come, il codice del file sidebar.php ha automaticamente cancellato la porzione circa le pagine. Sai dirmi, in linguaggio php, l’istruzione che devo scrivere perchè ritornino le pagine che comunque ho ancora in memoria per favore???

    Attendo con ansia, davvero,
    Paolo

  8. Minosse dice:

    Ciao Zelig, ho inserito il codice del menu a tendina per l’archivio dei commenti ed è perfetto. Com’è il codice per fare la stessa cosa con le categorie?

  9. silvana dice:

    grazie mille mi è stato molto utile..però
    con IE mi si adatta perfettamente al box del mio tema, (Borderlinechaos)
    invece con firefox il form mi esce dal box
    come posso rimediare?

  10. Zelig dice:

    Silvana, puoi aggiungere un codice di stile per impostare una larghezza fissa in pixel per la lista. Il risultato è questo:

    <form id="archiveform" action="">
    <p><select name="archive_chrono" onchange="window.location=(document.forms.archiveform.archive_chrono[document.forms.archiveform.archive_chrono.selectedIndex].value);" style="width:120px">
    <option value=''>Scegli un mese</option>
    <?php wp_get_archives('type=monthly&format=option'); ?>
    </select></p>
    </form>
    

    Nota che ho aggiunto il codice style=”width:120px”, dove appunto viene impostata la larghezza, in questo caso a 120 pixel.
    Ovviamente le righe contenenti un testo più lungo verranno troncate, però almeno il template è salvo!

  11. Silvana dice:

    grazie mille per la celere risposta

    in effetti si tronca me-se ma non fa nulla
    ottimo

    :D

  12. LUCA dice:

    Ciao a tutti, ragazzi.
    Volevo sapere se esiste un plugin che mostra tutti gli articoli di una categoria con un menù a tendina.
    Vorrei che si visualizzasse solo quando si entra nella categoria con un menù a tendina discendente che mostra tutti gli articoli inseriti.
    Chiedo Troppo?????????:wink:
    Grazie

  13. Zelig dice:

    Non che io sappia, Luca.

  14. LUCA dice:

    E il random delle immagini nella sidebar con la possibilità di scegliere le immagini nelle pagine da randomizzare??

    Grazie Zelig.

  15. Luca quaranta dice:

    Salve a tutti, ho un piccolissimo problema, vi spiego.
    io vorrei che dopo l’onchange la pagina si riposizionasse nel punto in cui era, dove c’è la select e nn all’inizio, pome potrei fare?
    Grazie

  16. Luca quaranta dice:

    vorrei spiegarmi meglio,
    io con l’onchange non apro un altra pagina ma rimango nella setssa e popolo un altra select con i valori della precedente, la mia è una multi combobox che si trova a fondo pagina ed il mio problema sarebbe che ad ogni onchange la pagina si posiziona all’inizio.
    Come potrei fare??
    Grazie.

  17. Zelig dice:

    Inserire un “segnalibro” nella pagina in corrispondenza dei box e aggiungerlo ai link?
    (premetto che è solo un’ipotesi, io non ho mai provato)

  18. Luca quaranta dice:

    Ciao,
    grazie del consiglio ma purtroppo non funziona inquanto il mio nn è un a href ma un “onChange=”window.location=”,
    Come posso fare???
    Sto cercando ma nn tovo nulla di utile…chi mi puo aiutare??
    ciao

  19. Sergio dice:

    Ciao!
    Ho un paio di dubbi.
    Il codice che suggerisci deve sostituire interamente quello del theme in uso oppure si deve salvare qualcosa? Lo chiedo perchè altrimenti non capisco come venga fuori il titolo “archivio”.

    Poi, vorrei sapere se è possibile inserire un limite alla visualizzazione dei mesi, raggruppandoli per anno.

  20. Zelig dice:

    Sergio, il titolo “archivio” lo devi inserire manualmente, eventualmente usando la funzione apposita di WP: _e(‘Archivio’)
    Per cambiare il numero di mesi visualizzati è possibile utilizzare i parametri della funzione wp_get_archives, ad esempio mettendo ‘type=monthly&limit=12′ verranno mostrati solo gli ultimi 12 mesi.

  21. pppunta dice:

    Ciao Zelig,
    mi interesserebbe molto applicare la tua soluzione al mio archivio. Mi chiedo solo se secondo te è compatibile con wp 2.3.1? Il codice come tu lo hai scritto posso copiarlo e incollarlo o devo cancellare qualcosa?
    grazie

  22. groucho dice:

    Buone 2008 (primaditutto).

    Sto curando un sito di una rivista e mi domandavo se era presentare la lista degli autori dei post come menu a discesa (dropdown).

    Come potrai immaginare sarebbe molto utile per razionalizzare lo spazio delle popolate sidebar. Naturalmente mi accontenterei anche di plugins esistemti di tua conoscenza. Il WP sotto il quale ho pubblicato il dito è 2.3.1.

    Grazie per il tuo prezioso lavoro!!


    ps.: la causa maggiore dei divorzi? Sicuramente il matrimonio!!!:P

  23. Zelig dice:

    Non saprei Groucho, mi dispiace. Al momento non ho tempo per studiarci sopra o per fare ricerche. Buon anno anche a te!

  24. D4rkDev dice:

    Zelig, ho visto che hai wp 2.0.7 ma volevo chiederti cosa hai usato per fare la pagina http://zeligplanet.altervista.org/archivio

  25. Zelig dice:

    @D4rkDev: niente di particolare, nella pagina “archives.php” ho messo le funzioni standard di WordPress “wp_get_archives” e “wp_list_cats”, con indicati i parametri per far comparire anche il numero di articoli presenti e un pizzico di CSS per impaginarli a 2 colonne! :wink:

  26. raffaele dice:

    Ciao, perfetto! grazie per il tuo lavoro, stavo cercano proprio questa soluzione per il mio sito!

  27. Paolo dice:

    Ciao,
    ho trovato utilissimo ia tua modifica; anche se io ho inserito il 1° codice e funziona benissimo!! Ora volevo fare la stessa cosa per le categorie ma non ci riesco mi dici quali sono i parametri da cambiare rispetto all’archivio mesi! :doh: :pray::ciao:
    Grazie Paolo

  28. Cristiano dice:

    Premetto che ho installato un plugin che si chiama Yoast WordPress SEO.
    Utilizzando il codice, quando seleziono il mese, mi esce il seguente errore:

    Fatal error: Call to undefined function is_post_type_archive() in /web/htdocs/www.joyfreepress.com/home/wp-content/plugins/wordpress-seo/frontend/class-opengraph.php on line 104

    Rimuovendo il plugin riprende a funzionare.
    Qualche idea ?

Lascia un Commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

:smile: :grin: :mrgreen: :wink: :neutral: :sad: :cry: :eek: :confused: :cool: :lol: :razz: :oops: :mad: :evil: :twisted: :roll: :surprised: :!: :?: :idea: :arrow: :clap: :dance: :doh: :drool: :eh: :hand: :liar: :naughty: :pray: :shhh: :shifty: :sick: :silenced: :snooty: :think: :wall: :whistle: :love: :censored: :crazy: :food: :thumbup: :ciao: :cheers: :winky: :kiss: :rotfl: :ninja: