4 Semplici Step per Creare un Archivio Più Efficace

Non di soli nuovi articoli vive il blogger...

scritto da Francesco Gavello [+] il 15 gennaio 2010 | 34 Commenti in: WordPress

archivio-efficace

Credo che ciò che renda efficace un archivio sia la capacità di quest’ultimo di trasmettere informazioni al visitatore senza richiedere decine di click per indagarne ogni singola sottosezione.

Tutto dev’essere in bella vista, chiaro e autoesplicativo.

Spesso invece gli archivi finiscono per essere nude liste di categorie, pagine o tag. Talvolta ci si imbatte in qualche paragrafo introduttivo, qualche selezione di “best post” tesa a stimolare qualche click in più. Ma si sa, il tempo è sempre poco e anche il blogger più motivato prima o poi getta la spugna e trascura questa parte del proprio blog.

Per questo oggi ti voglio presentare una soluzione che:

  • Mostra tutte le tue categorie insieme alla loro descrizione
  • Presenta gli ultimi n-post recenti per ciascuna categoria
  • Non richiede alcuna manutenzione
  • Non richiede alcun plugin!

E si sviluppa in poco meno di un’ora se hai già dimestichezza con i file del tuo tema. In quattro semplici passi. :)

1. Completa le descrizioni di categoria

Per prima cosa dovrai inserire una descrizione coerente per ciascuna delle categorie presenti sul tuo blog. È un lavoraccio, lo so. :D

Anche se il codice che ti vado a presentare oggi potrebbe funzionare (con qualche ritocco) senza di esse, le descrizioni di categoria sono ciò che dona la classica marcia in più al tuo archivio e tornano oltremodo utili quando si tratta di mettere mano alla SEO.

Prenditi quindi una mezz’oretta piena e recati nella sezione “Articoli”, poi sotto “Categorie” e per ciascuna di esse inserisci un paragrafo di buon testo descrittivo.

Nota: Molti plugin come HeadSpace2 ti permettono inoltre di riportare queste descrizioni all’interno dei diversi meta-tag description per ciascuna pagina di archivio categoria in maniera totalmente automatica e trasparente, migliorando leggibilità e scansione delle tue pagine nelle SERP dei motori di ricerca.

Se stai utilizzando il sopracitato plugin, per beneficiare di tale opzione è sufficiente (tra le opzioni di HeadSpace) attivare il modulo di pagina “Descrizione pagina” e inserire sotto il segmento “Categorie” in “Descrizione” la variabile “%%category_description%%“. È più semplice farlo che scriverlo, sul serio! ;)

2. Crea un template di pagina per il tuo archivio

Il modo migliore di presentare il tuo archivio è quello di utilizzare un template di pagina personalizzato. La buona notizia è che probabilmente il tuo tema già dispone di un file dedicato e tu sei già a metà dell’opera. :)

In caso contrario, la soluzione più rapida è partire dal file “archive.php”, duplicarlo, rinominarlo per ottenere “archivio.php” e lavorare su di esso. Devi sapere che i template di pagina sono uguali in tutto e per tutto agli altri file PHP del tuo tema, salvo l’essere definiti da un piccolo snippet di codice iniziale che ne definisce il nome per l’utilizzo interno.

Definisci quindi il nome del tuo template inserendo questo codice prima di qualunque altra riga in “archivio.php”.

<?php
/*
Template Name: Archivio
*/
?>

Rimuovi tutto ciò che trovi all’interno del LOOP e modifica questo layout quanto necessario: vorrai forse inserire qualche paragrafo introduttivo, un’immagine o l’archivio mensile dei post pubblicati.

Quando sarai soddisfatto, non dovrai fare altro che recarti nella dashboard del tuo blog, creare una nuova pagina (“Archivio Articoli” ad esempio) e assegnarle nella sidebar destra il template di pagina che hai poc’anzi creato.

3. Copia e incolla questo codice all’interno del LOOP

Ora arriva la parte divertente. :)

Questo codice ti permette di presentare tutte le categorie presenti sul tuo blog insieme ad una loro descrizione e gli ultimi tre articoli pubblicati per ciascuna di esse.

È una soluzione come dicevo totalmente automatica che ti permette, una volta configurato tutto a puntino, di dimenticarti di essa in maniera totale. Copia e incolla questo codice all’interno del LOOP nel punto in cui vuoi venga generato l’output.

<div class="archivio_categorie">
				
<?php
$trova_Cat = $wpdb->get_results("SELECT * FROM $wpdb->terms AS wterms INNER JOIN $wpdb->term_taxonomy AS wtaxonomy ON ( wterms.term_id = wtaxonomy.term_id ) WHERE wtaxonomy.taxonomy = 'category' AND wtaxonomy.parent = 0 AND wtaxonomy.count > 0");
				
$contatore = 0;
				
foreach ($trova_Cat as $category) {
				
	$contatore++;
			
	$stile_categoria = '';
	if (is_int($contatore / 2)) $stile_categoria = ' class="categoria_alternativa"';
				
	$link_categoria = get_category_link($category->term_id);
						
	echo '<div'.$stile_categoria.'>
		<h3><a href="'.$link_categoria.'" title="'.$category->name.'">'.$category->name.'</a></h3>';
						
		echo category_description($category->term_id);
							
		echo '<ul>';
				
		query_posts('cat='.$category->term_id.'&showposts=3');?>
		
		<?php while (have_posts()) : the_post(); ?>
			<li><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a></li>
		<?php endwhile; ?>

		</ul>
	</div>
			
<?php }	?>
</div>

4. Applica uno stile tramite CSS

Per concludere, nel file style.css del tuo tema non dovrai fare altro che applicare un paio di basilari regole CSS per definire la presentazione grafica. Con molta probabilità dovrai ritoccare la larghezza (width) riportata qui sotto per adattarla a quella del tuo contenitore principale. Puoi anche rimuoverla del tutto, insieme al parametro “float:left” per allineare gli elementi uno sotto l’altro.

.archivio_categorie div {
	width: 284px;
	float: left;
	margin-right: 15px;
	margin-bottom: 15px;
}

.categoria_alternativa {
	margin-right: 0 !important;
}

E…voilà! Puoi osservare il risultato in azione sulla pagina archivio di questo stesso blog! :D

Trovato questo articolo interessante?

Condividilo sulla tua rete di contatti Twitter, sulla tua bacheca su Facebook o semplicemente premi "+1" per suggerire questo risultato nelle ricerche in Google. Diffondere contenuti che trovi rilevanti aiuta questo blog a crescere. Grazie!

34 Commenti

Update 12/02/2012: Il Regolamento Commenti è cambiato! Leggi ciò che serve sapere!

  1. Francesco Ciabatta ha detto:

    Davvero, davvero interessante questa tecnica! Grazie Francesco!

    Una domanda sul plugin che hai segnalato (HeadSpace2): mi pare di aver capito che permette di inserire automaticamente anche i custom fields, è esatto?

    Rispondi
  2. gianluca ha detto:

    bel modo per implementare l’archivio, anche se sono solo all’inizio con il mio blog, mi stavo proprio chiedendo se fare una pagina del genere e credo che appena avrò un po di tempo questa sarà la soluzione giusta…magari prima aspetto di avere abbastanza contenuti per farla un po consistente.

    Andando a vedere il tuo archivio tra l’altro ho anche scoperto la categoria Top 25, molto interessante, questo si che assolve a quello che dicevi ad inizio articolo di attirare l’attenzione e stimolare qualche click in più…

    o almeno i miei click li ha sicuramente stimolati :-)

    Rispondi
  3. maldestro ha detto:

    eccezionale, semplice e geniale. è quello che stavo cercando per il mio blog bookstrore una spece di store appunto di ebook, video e software.
    adesso è tardi, ma domani mi ci metto subito.

    grazie

    Maldestro

    Rispondi
  4. maldestro ha detto:

    ah…dimenticavo…
    bella storia i link nofollowfree, “rubberò” anche questo suggerimento

    grazie

    Maldestro

    Rispondi
  5. Marco ha detto:

    Pienamente implementato nel mio sito :D
    Solo una cosa: mi sono accorto quasi per caso che questo sistema non visualizza le categorie che hanno delle sottocategorie. Non le fa proprio vedere…ora mi sto studiando il codice per cercare di capirci qualcosa.
    Hai idea su come si possa rimediare?

    Rispondi
  6. Francesco Gavello ha detto:

    Rimuovi ” AND wtaxonomy.parent = 0″ dalla query iniziale.

    Avrai bisogno di ritoccare anche il CSS se vorrai distinguere visivamente le sottocategorie rispetto alle altre ;)

    Rispondi
    • Marco ha detto:

      Praticamente ho una macrocategoria “accoglienza” e delle sottocategorie divise per anno: 2008-2009-2010…
      Gli articoli erano assegnati solo alle categorie figlie, per questo motivo non venivano visualizzati. Per adesso ho risolto assegnando gli articoli anche alla categoria madre; in questo modo vengono visualizzati. Comunque in questi giorni provo anche a lavorare sul codice come dici tu, e vedrò cosa viene fuori :D

      Grazie ;) !!!

      Rispondi
  7. Scrid ha detto:

    Ciao Francesco, premetto che ne capisco davvero ’0′ di Php. Ma ho provato a seguire le tue istruzioni, copiando è incollando il codice nel mio template di pagina e rinominando il file, però il mio archivio mostra tutti gli articoli, invece, di 3 soltanto e non riesco a capire perchè.

    Guarda: http://www.storiacontinua.com/notizie/

    Mi potreste aiutare a migliorarlo? Magari c’è qualcuno che una il mio stesso tema, CarringtonBlog.

    Grazie

    Rispondi
    • Francesco Gavello ha detto:

      Ciao Scrid,
      non conosco il tema CarringtonBlog ma quello che dovresti cercare di ottenere è un file “archivio.php”, con all’interno il codice necessario a renderlo un template di pagina. E poi assegnare questo template a una pagina creata ex-novo per il tuo nuovo archivio.

      Forse il tuo tema sfrutta “archive.php” (file predefinito da WP) per generare la lista di post e tu ti stai riferendo a quest’ultimo?

      Assicurati che il nome del template di pagina in archivio.php sia corretto e che questo template sia correttamente assegnato alla pagina che hai scelto per contenere il nuovo archivio.

      Rispondi
  8. Tiz ha detto:

    Ciao, è da tanto che sto cercando un archivio e il tuo finora è quello che s’avvicina di più a quello che vorrei.
    Ho già provveduto a togliere ” AND wtaxonomy.parent = 0 ″ per visualizzare le sottocategorie.
    Mi piacerebbe però sapere se sono possibili altre due modifiche:
    1) Visualizzare TUTTI gli articoli (aldilà di mettere un n° superiore degli articoli che si hanno al posto di “3″…)
    2) Non visualizzare gli articoli della categoria madre quando questa ha sottocategorie, vedendosi infatti già le sottocategorie non voglio ripetizioni di titoli.
    Naturalmente per quella categoria madre senza figlie (ne ho una) vorrei invece si visualizzasse l’elenco articoli.
    Non so se è chiaro, e se è possibile.
    Ti ringrazio già da adesso.

    Rispondi
    • Francesco Gavello ha detto:

      Ciao Tiz,
      rimuovendo il parametro “&showposts=3″ fai in modo che query_post ricada sul predefinito, ma prenderà sempre in ingresso il numero di “Articoli per pagina” indicato dalle impostazioni di WordPress. Dato che si usano n-articoli per pagina per andare a braccetto con le paginazioni, mi sembra piuttosto difficile unire le due cose in un archivio a colonne di questo tipo.

      Per il secondo punto: andrebbe riscritta buona parte del codice, separando i due casi a livello di output generato. La gestione dei parent e child in wordpress non è esattamente intuitiva, purtroppo.

      Rispondi
  9. Tiz ha detto:

    Grazie della risposta.
    Per il primo problema: ho provato a togliere il parametro e in effetti come dici mostra 7 articoli, perché 7 è il n° da me indicato nelle impostazioni. Qui allora potrei risolvere bene mettendo un numero molto alto, dato che non pubblico post molto frequentemente, potrebbero passare anni prima d’avere l’esigenza di cambiarlo.

    Per la seconda cosa, capisco quello che dici, ma da totalmente ignorante di PHP provo allora a girare la questione in altri termini, e scusa se dico una cavolata:
    è possibile nel comando della categoria genitore o parent, o altrove non so, specificare l’ID delle categorie che si desiderano vedere, o quello della categoria che si desidera escludere?

    Ciao e grazie di nuovo.

    Rispondi
    • Francesco Gavello ha detto:

      In questo caso puoi agire sulla query usata per reperire le categorie da mostrare, appendendo (dopo, per esempio “AND wtaxonomy.count > 0″) un altro operatore AND del tipo “AND wterms.term_id NOT IN (1,2,3,4)” dove 1,2,3,4 sono gli ID di categoria da escludere. ;)

      Rispondi
  10. Tiz ha detto:

    Scusa, intendevo “genitore o figlio”, ma credo tu abbia capito lo stesso.

    Rispondi
  11. Tiz ha detto:

    Ho provato ad aggiungere ” AND wterms.term_id NOT IN (61) “, 61 è la categoria da escludere, ma non funziona, dà ” Parse error: syntax error, unexpected T_STRING … on line 11 “.

    Copio l’intero pezzo di codice modificato, perché magari ho sbagliato qualcosa:

    $trova_Cat = $wpdb->get_results(“SELECT * FROM $wpdb->terms AS wterms INNER JOIN $wpdb->term_taxonomy AS wtaxonomy ON ( wterms.term_id = wtaxonomy.term_id ) WHERE wtaxonomy.taxonomy = ‘category’ AND wtaxonomy.count > 0″ AND wterms.term_id NOT IN (61));

    Rispondi
    • Francesco Gavello ha detto:

      Ciao Tiz,
      per comodità ti riporto qui sotto l’esatto codice usato per il mio archivio. Assicurati di aver chiuso tutte le parentesi e di non aver lasciato punti e virgola in sospeso.


      $trova_Cat = $wpdb->get_results(“SELECT * FROM $wpdb->terms AS wterms INNER JOIN $wpdb->term_taxonomy AS wtaxonomy ON ( wterms.term_id = wtaxonomy.term_id ) WHERE wtaxonomy.taxonomy = ‘category’ AND wtaxonomy.parent = 0 AND wtaxonomy.count > 0 AND wterms.term_id NOT IN (3,432, 359)”);

      Nel mio caso escludo le categorie 3,432 e 359.

      Fammi sapere ;)

      Rispondi
  12. Tiz ha detto:

    Ciao,
    Purtroppo non va, mi dà “Parse error: syntax error, unexpected T_VARIABLE”

    Non voglio farti perdere troppo tempo (soprattutto ora che è Natale :) ), ma per completezza e chiarezza copio qui l’intero codice che dà questo errore.
    Ho dovuto cambiar nome in “mappa” perché ho già un template, quello che uso attualmente, che si chiama “archivio”, e quindi non volevo che si sovrascrivesse, le opzioni invece sono quelle del mio tema per la corretta visualizzazione richiamata dal CSS:

    get_results(“SELECT * FROM $wpdb->terms AS wterms INNER JOIN $wpdb->term_taxonomy AS wtaxonomy ON ( wterms.term_id = wtaxonomy.term_id ) WHERE wtaxonomy.taxonomy = ‘category’ AND wtaxonomy.parent = 0 AND wtaxonomy.count > 0 AND wterms.term_id NOT IN (61)”);

    $contatore = 0;

    foreach ($trova_Cat as $category) {

    $contatore++;

    $stile_categoria = ”;
    if (is_int($contatore / 2)) $stile_categoria = ‘ class=”categoria_alternativa”‘;

    $link_categoria = get_category_link($category->term_id);

    echo ‘
    name.’”>’.$category->name.’‘;
    echo category_description($category->term_id);
    echo ”;
    query_posts(‘cat=’.$category->term_id.’&showposts=100′);?>

    <a href="” rel=”bookmark” title=”">

    Se invece, al posto dell’ultimo codice che hai inviato, metto il tuo codice originale (tranne il famoso “AND…” per le sottocategorie):

    $trova_Cat = $wpdb->get_results(“SELECT * FROM $wpdb->terms AS wterms INNER JOIN $wpdb->term_taxonomy AS wtaxonomy ON ( wterms.term_id = wtaxonomy.term_id ) WHERE wtaxonomy.taxonomy = ‘category’ AND wtaxonomy.count > 0″ );

    vedo tutto correttamente, cioè senza errori… (aldilà del fatto di vedersi anche la categoria madre)
    E’ sottinteso che non pretendo l’impossibile, sei anche troppo gentile, e possiamo continuare a “giocare” dopo Natale… ;)
    Grazie

    Rispondi
  13. Tiz ha detto:

    Ciao Francesco,
    ho scoperto adesso che andava benissimo la prima stringa che hai detto:
    AND wterms.term_id NOT IN (1,2,3,4)
    ma ho notato che non avevo spostato le doppie virgolette dopo lo ” 0 “!!!
    Mi dispiace averti fatto perdere tempo, sei stato davvero molto gentile.
    Così vedo gli elenchi di articoli che voglio, fantastico :)

    Ora proverò a fare qualche piccola aggiustatina (tipo titoli o aggiungere articoli esterni come PDF, manualmente s’intende…), ma se non ci salto fuori mi sa che mi rivolgerò di nuovo a te (dopo Natale)!
    Grazie ancora e tanti auguri.

    Rispondi
  14. gauntletptc ha detto:

    Davvero interessante come proposta, anche se non sono ancora in grado di mettere mano al codice in php senza rischiare di creare danni… chissà, magari in un futuro :)
    Al momento ho risolto la questione archivio con un semplice plugin (Grid Archives), che per ora mi soddisfa visto che il numero di articoli è ancora esiguo. Se volete dare un’ occhiata: http://gauntletptc.altervista.org/blog/archivio/

    Rispondi
  15. Tiz ha detto:

    Ciao Francesco, sono ancora io e ho bisogno del tuo aiuto.
    Ricapitolando, il mio archivio è suddiviso per sottocategorie (e categoria madre senza figlie) per evitare ripetizioni di link. Come sai, i link appaiono in ordine d’inserimento.
    Ora io vorrei che, all’interno di ogni gruppo di categoria, apparissero in ordine alfabetico, perché mi pare più utile ai fini di una ricerca.
    Inoltre chiedo se è possibile che i titoli delle sottocategorie, che sono in minuscolo data la loro natura, si potessero visualizzare invece in maiuscolo… se non chiedo troppo!
    Un grazie preventivo.

    Rispondi
  16. Tiz ha detto:

    http://www.bluesreviews.it/Arch.jpg

    Questo è un pezzo del mio archivio, i titoli sono quelli delle sottocategorie che vorrei in maiuscolo (e spostati un po’ a dx in linea con il testo)
    Ho provato a cercare nel foglio stile del mio tema, ma non essendoci niente riguardo all’archivio non so dove mettere le mani.
    Il CSS che hai dato tu ho provato a inserirlo già dall’inizio in coda al mio foglio stile, per poterlo eventualmente modificare, ma sembra ininfluente perché probabilmente il CSS del mio tema già contempla gli aspetti delle liste e cose del genere e, avendo io all’inizio del tuo codice richiamato le opzioni del mio tema (altrimenti il testo si vedeva non allineato), probabilmente sono valide quelle…
    Non so se si capisce ciò che intendo

    Rispondi
  17. Elle ha detto:

    Bell’idea! Io ho tolto l’archivio dal blog proprio perchè era standard. Devo provare!
    Grazie Mille per le idee

    Rispondi
  18. Enrico ha detto:

    Ciao Francesco,
    sono solito navigare sui siti in lingua inglese quando cerco questo tipo di informazioni ma questa volta, dopo aver cercato per un bel po’ senza trovare niente di interessante, guarda un po’ do ve capito! Su un blog che conosco da una vita! E’ proprio vero che certe volte basta cercare di fronte ai propri occhi…
    Ma a parte questo,
    ho fatto tutto come hai detto ma mi manca un piccolo dettaglio: se volessi fare in modo che all’inizio della pagina, come presentazione, uscisse qualche riga di testo?
    Ho provato ad inserire del testo sulla pagina che ho creato ed ho inserito questa porzione sul php ma non cambia niente.
    Dove sbaglio?

    Grazie mille

    Rispondi
  19. Luciano ha detto:

    Innanzitutto bellissimo modo di implementare un archivio, mi serviva proprio.
    Ho solo un problema…nonostante aggiunga i campi delle nuove classi nel mio css l’archivio mi risulta senza stile, infatti mi lascia un link grezzo spostato sulla sinistra…sai come posso fare?

    Rispondi
  20. Luciano ha detto:

    ho risolto ^_^ c’era un conflitto di nomi tra le classi del foglio di stile :D grazie di tutto

    Rispondi
  21. Daniele ha detto:

    A me invece va in loop tutto :D Dopo l’elenco delle categorie coi 3 post, pubblica l’ultimo post per intero e poi di nuovo l’elenco delle cat… c’è qualche riga di codice da togliere nel loop?

    Rispondi

Lascia un commento

Anteprima commentatore

Personalizza il tuo avatar!
Vai su gravatar.com e carica quello che preferisci!

I commenti sono modificabili entro 5 minuti dal loro inserimento.
Puoi usare questi tag: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Solo i commenti firmati con un nome saranno accettati. Leggi il Regolamento Commenti!