Creare una pagina archivio senza plugin in WordPress
Bisognerebbe sempre avere una pagina archivio in un blog, così da dare la possibilità al lettore di spulciare tutti gli articoli, anche quelli del passato, direttamente da un’unica pagina, senza fargli perdere troppo tempo.
Ho già mostrato come creare una pagina archivio, ma avevo utilizzato due plugin. Visto che la velocità è molto importante e che i plugin rallentano (chi più, chi meno) il caricamento di WordPress, perchè non creare una pagina Archivio senza installare nessun plugin?
Creare un template personalizzato
In WordPress è possibile assegnare un template diverso per ogni pagina. Per template, intendo una struttura della pagina stessa, ad esempio eliminando la sidebar, aggiungendo un testo iniziale e poi mostrare articoli, dividendo la pagina in colonne, ecc ecc.
Si può fare davvero di tutto.
Per creare una pagina Archivio, dovrai creare un template apposito.
Fai una copia del file page.php (scaricalo sul tuo computer via FTP) del tema e chiamalo page_archivio.php . Inserisci il seguente codice prima di ogni altro codice della pagina:
[php]
<?php
/**
* The template for displaying archive pages.
Template Name: Archivio
*/
?>
[/php]
Questo serve per indicare le informazioni principali della pagina stessa e soprattutto per indicare il nome del template: Archivio.
Il codice
Il codice che ti mostrerò l’ho preso inizialmente da Aowa.com, e poi l’ho modificato a mio piacimento, mostrando tutti gli articoli che sono stati pubblicati suddividendoli per Mese e Anno.
[php]
<?php
/*
/ mostra l’archivio di un blog WordPress senza usare nessun plugin
*/
$ultimo_articolo = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_date <‘" . current_time(‘mysql’) . "’ AND post_status=’publish’ AND post_type=’post’ AND post_password=” ORDER BY post_date DESC LIMIT 1");
//$output = get_option(‘hfy_archives_’.$ultimo_articolo);
if(empty($output)){
$output = ”;
$wpdb->query("DELETE FROM $wpdb->options WHERE option_name LIKE ‘hfy_archives_%’");
// Legge tutti i mesi che hanno almeno un post
$query_mese = "SELECT DISTINCT YEAR(post_date) AS year, MONTH(post_date) AS month, count(ID) as posts FROM " . $wpdb->posts . " WHERE post_date <‘" . current_time(‘mysql’) . "’ AND post_status=’publish’ AND post_type=’post’ AND post_password=” GROUP BY YEAR(post_date), MONTH(post_date) ORDER BY post_date DESC";
$risultati_mese = $wpdb->get_results($query_mese);
if ($risultati_mese) {
// Estrae i risultati per ogni mese
foreach ($risultati_mese as $risultato_mese) {
$questo_mese = zeroise($risultato_mese->month, 2);
$questo_anno = $risultato_mese->year;
// Estrae tutti i post per il mese corrente
$query_post = "SELECT ID, post_date, post_title, comment_count FROM " . $wpdb->posts . " WHERE post_date LIKE ‘$questo_anno-$questo_mese-%’ AND post_date AND post_status=’publish’ AND post_type=’post’ AND post_password=” ORDER BY post_date DESC";
$risultati_post = $wpdb->get_results($query_post);
if ($risultati_post) {
// Mostra il nome del mese e anno
$text = sprintf(‘%s %d’, $month[zeroise($risultato_mese->month,2)], $risultato_mese->year);
$postcount = count($risultati_post);
$output .= ‘<p><h2>’ . $text . ‘</h2></p>’;
$output .= "<ul class=’archiveslist’>\n";
foreach ($risultati_post as $risultato_post) {
if ($risultato_post->post_date != ‘0000-00-00 00:00:00’) {
$url = get_permalink($risultato_post->ID);
$arc_title = $risultato_post->post_title;
if ($arc_title)
$text = wptexturize(strip_tags($arc_title));
else
$text = $risultato_post->ID;
$title_text = ‘read more "’ . wp_specialchars($text, 1) . ‘"’;
$output .= ‘ <li>’ . "<a href=’$url’ title=’$title_text’>$text</a>";
$output .= "</li>\n";
}
}
$output .= "</ul>\n\n";
}
}
update_option(‘hfy_archives_’.$ultimo_articolo,$output);
}
else{
$output = ‘<strong>’. __(‘ERROR:’) .'</strong> ‘. __(‘No items were found to be displayed.’) .”;
}
}
echo $output;
?>
[/php]
Il risultato è semplice ma funzionale… Ovviamente sei libero di personalizzarlo come meglio credi 🙂
Quando hai terminato le modifiche, elimina i // che trovi alla riga 6. In questo modo mantiene la pagina salvata in memoria fino a che non viene creato un nuovo articolo (funziona da cache), per evitare di continuare a fare delle richieste inutili al database.
Dove inserire il codice
Questo è il problema più grande che dovrai affrontare 🙂
Io ti consiglio di inserirlo dopo <?php the_content(); ?> . In questo modo, verrà visualizzato anche il contenuto che scriverai nella pagina tramite editor, utile se vuoi introdurre l’archivio con del testo.
Ecco come risulta la mia pagina page_archivio.php:
[php]
<?php
/**
* The template for displaying archive pages.
*
Template Name: Archivio
*/
?>
<?php get_header(); ?>
<!– begin colLeft –>
<div id="colLeft">
<!– Begin .postBox –>
<div class="postBox">
<div class="postBoxTop"></div>
<div class="postBoxMid">
<div class="postBoxMidInner first clearfix">
<h1><?php the_title(); ?></h1>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<?php the_content(); ?>
CODICE CHE HO MOSTRATO PRIMA
<?php endwhile; else: ?>
<p><?php _e(‘Sorry, no posts matched your criteria.’,’ritheme’); ?></p>
<?php endif; ?>
</div>
</div>
<div class="postBoxBottom"></div>
</div>
<!– End .postBox –>
</div>
<!– end colleft –>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
[/php]
Assegnare il template alla pagina
Salva il file che hai creato e caricalo nella cartella del tema.
Nella pagina di modifica della pagina (scusa il gioco di parole :)) è presente il box Attributi pagina sulla destra, qui seleziona nella tendina Modello il template Archivio, ed aggiorna la pagina (o pubblicala).
Vai a vedere il risultato 🙂
Se non ti compare il box Attributi pagina, clicca su Impostazioni schermo in alto a destra e seleziona la casella Attributi pagina.
Buon archiviazione 🙂
PS: se non ti compare in automatico la pagina archivio nel blog e la vuoi mostrare, utilizza i menù personalizzati, comodi e molto utili!
09/02/2013 alle 22:03
Ottimo articolo, finalmente una soluzione per visualizzare tutti i post senza l’utilizzo di plugin. Sto notando come le pagine siano un ottimo strumento di personalizzazione.
11/02/2013 alle 15:42
Ti ringrazio manuenghel, le pagine non sempre sono la soluzione migliore, ma spesso permettono ampie personalizzazioni con il minimo sforzo.
02/06/2013 alle 08:30
Ciao ho letto e fatto tutto, che dire ottima soluzione!!!
ho solo modificato una query per avere la visualizazzione dei mesi in ordine ASC anzichè DESC
in modo che parta ad elencare da Gennaio.
http://condomini.verbasoft.net/?page_id=99
ora sistemo il css per questa pagina.
Ti ringrazio mi hai risparmiato del gran tempo (nel sito è presente un test con un plugin che ho usato e modificato, ma con il tuo codice mi sento molto più a mio agio anche per eventuali modifiche)
04/06/2013 alle 15:22
Grazie a te 🙂
11/06/2013 alle 13:11
Onestamente sono al quanto demoralizzata: credo di essere l’unico caso la mondo che trova difficile lavorare su WP
Tutti dicono che è facile da usare ma ogni volta che cerco di fare qualcosa, mi perdo e non riesco ad ottenere alcun risultato che sia minimamente soddisfacente
non riesco a modificare font, colori e interlinee, non riesco a modificare i caratteri dei titoli delle pagine, a fatica ho inserito un’immagine a fianco del testo (e comunque lavorando nella pagina che traduce l’effetto visuale in html) e in ogni caso non riesco a dargli l’allineamento che vorrei (spazio tra immagine e testo, dimensione del carattere e allineamento del testo rispetto all’immagine cui si riferisce e a quella successiva)
leggo spesso che prima di fare qualsiasi tentativo è opportuno fare un back up di sicurezza…ma come si fa a fare il back up? O_o
vorrei creare una pagina che “elenca” gli articoli (nel senso proprio di articoli di giornale) ma sono tantissimi, allora ho pensato di prevedere la possibilità di filtrarli per anno o parola chiave o rivista ma non so se è meglio gestire ciascun articolo coma “articolo” di blog (fatto solo dal titolo) a cui, magari, allegare un pdf ovvero fare una pagina “normale” in cui inserire manualmente l’elenco
(tra l’altro il copia-incolla dell’elenco da un file di excel viene tradotto come una tabella non modificabile che non è particolarmente bella da un punto di vista grafico…) e poi i relativi link, ma in questo modo si può ottenere comunque la possibilità di ricerca per anno o parola chiave o rivista?
Nel caso optassi per la soluzione un articolo di giornale = un articolo di blog, è possibile eliminare la dicitura automatica “pubblicato il … Autore …” che compare esempre sotto il titolo
Vorrei anche inserire un anteprima dell’home page delle ultime pubblicazioni che sono già pubblicate in una pagina normale (come immagini) con la foto della copertina…ho letto il tuo articolo “Mostrare gli articoli recenti con immagine di anteprima in WordPress senza plugin” ma si puo fare anche con le immagini o funzina solo per gli articoli di blog?
ho letto molti dei tuoi articoli che in parte rispondono alle mie domande ma alcuni sono troppo tecnici per me che non so fare “una copia del file page.php (scaricalo sul tuo computer via FTP) del tema e chiamalo page_archivio.php”…non so che fare, forse devo rassegnarmi ed appendere il mouse al chiodo
12/06/2013 alle 17:31
Ciao Michela,
capisco la frustrazione, ma quello che chiedi te non è roba per principianti, e comunque non è proprio inerente con WordPress (è facile da usare, ma la grafica è un’altra cosa)… per la parte grafica, bisogna studiare un po’ di CSS, trovi una guida nelle risorse che ho preparato (nel menù).
Per il backup leggi https://www.robertoiacono.it/come-fare-il-backup-di-un-blog-wordpress/ e https://www.robertoiacono.it/backup-file-wordpress-dropbox-automatico-plugin/.
Dovresti optare per “un articolo di giornale = un articolo di blog” e sì, è possibile eliminare la dicitura, modificando il file che genera la pagina (leggi https://www.robertoiacono.it/come-dove-modificare-wordpress/)
Quell’articolo che hai citato, mostra l’articolo + immagine, ma puoi anche scegliere se mostrare solo l’immagine (sempre appartenente all’articolo), ma non è fatto per mostrare i file media caricati…
Per l’ultima domanda leggi https://www.robertoiacono.it/come-caricare-scaricare-file-sullo-spazio-web-del-server-via-ftp/
Ciao
Roberto