Stai cercando un modo per visualizzare un elenco di archivi mensili splendidamente formattato, separato per anno? Sebbene esista probabilmente un plugin per questo, abbiamo creato un rapido snippet di codice che puoi utilizzare per visualizzare archivi formattati per mese separati per anno in WordPress.
Istruzioni:
Tutto quello che devi fare è aggiungere questo codice al file functions.php del tuo tema o in un plugin specifico per il sito:
function wp_custom_archive($args = '') {
global $wpdb, $wp_locale;
$defaults = array(
'limit' => '',
'format' => 'html', 'before' => '',
'after' => '', 'show_post_count' => false,
'echo' => 1
);
$r = wp_parse_args( $args, $defaults );
extract( $r, EXTR_SKIP );
if ( '' != $limit ) {
$limit = absint($limit);
$limit = ' LIMIT '.$limit;
}
// over-ride general date format ? 0 = no: use the date format set in Options, 1 = yes: over-ride
$archive_date_format_over_ride = 0;
// options for daily archive (only if you over-ride the general date format)
$archive_day_date_format = 'Y/m/d';
// options for weekly archive (only if you over-ride the general date format)
$archive_week_start_date_format = 'Y/m/d';
$archive_week_end_date_format = 'Y/m/d';
if ( !$archive_date_format_over_ride ) {
$archive_day_date_format = get_option('date_format');
$archive_week_start_date_format = get_option('date_format');
$archive_week_end_date_format = get_option('date_format');
}
//filters
$where = apply_filters('customarchives_where', "WHERE post_type = 'post' AND post_status = 'publish'", $r );
$join = apply_filters('customarchives_join', "", $r);
$output = '<ul>';
$query = "SELECT YEAR(post_date) AS `year`, MONTH(post_date) AS `month`, count(ID) as posts FROM $wpdb->posts $join $where GROUP BY YEAR(post_date), MONTH(post_date) ORDER BY post_date DESC $limit";
$key = md5($query);
$cache = wp_cache_get( 'wp_custom_archive' , 'general');
if ( !isset( $cache[ $key ] ) ) {
$arcresults = $wpdb->get_results($query);
$cache[ $key ] = $arcresults;
wp_cache_set( 'wp_custom_archive', $cache, 'general' );
} else {
$arcresults = $cache[ $key ];
}
if ( $arcresults ) {
$afterafter = $after;
foreach ( (array) $arcresults as $arcresult ) {
$url = get_month_link( $arcresult->year, $arcresult->month );
/* translators: 1: month name, 2: 4-digit year */
$text = sprintf(__('%s'), $wp_locale->get_month($arcresult->month));
$year_text = sprintf('<li>%d</li>', $arcresult->year);
if ( $show_post_count )
$after = ' ('.$arcresult->posts.')' . $afterafter;
$output .= ( $arcresult->year != $temp_year ) ? $year_text : '';
$output .= get_archives_link($url, $text, $format, $before, $after);
$temp_year = $arcresult->year;
}
}
$output .= '</ul>';
if ( $echo )
echo $output;
else
return $output;
}
Aggiungi questo snippet nel tuo file index.php o in qualsiasi altro file di template dove vuoi visualizzare gli archivi formattati.
<?php
wp_custom_archive();
?>
Nota: Se questa è la prima volta che aggiungi snippet di codice in WordPress, consulta la nostra guida su come copiare / incollare correttamente snippet di codice in WordPress, in modo da non rompere accidentalmente il tuo sito.
Se ti è piaciuto questo snippet di codice, prendi in considerazione la lettura dei nostri altri articoli sul sito come: 9 migliori plugin per aste WordPress e come creare un modulo di invio guest post in WordPress.
Ottimo lavoro caro..
puoi dirmi come mostrare il conteggio dei post per mese?
attualmente mostra i nomi dei mesi
Come rimuovere il mese più recente dell'anno in questi plugin?
$temp_year non definito 😉
Codice fantastico! Grazie mille amico!
Nessun problema, sono contento di aver potuto aiutare!
Codice fantastico! Grazie mille amico!
Codice fantastico! Grazie mille amico!
Codice fantastico. Esattamente quello che stavo cercando. Sai, per caso, come perfezionarlo per recuperare solo un tipo di post personalizzato? *attendo con speranza 🙂
post_type è definito qui, "WHERE post_type = 'post'"
Questo è un ottimo esempio. Grazie, ora è possibile caricare i mesi di una categoria specifica?
Molto bello. Fantastico. Grazie!
Wow. Questa è un'ottima soluzione senza plugin. Funziona perfettamente. Grazie per lo snippet
Esattamente quello di cui avevo bisogno, questo dovrebbe essere integrato nel core di WordPress, è così buono
Ottima soluzione, grazie 🙂
Caro Kevin,
Difficile capire il tuo script. Vorresti allegarlo con una tabella nel database MySql? Forse mi sarà più chiaro perché sono nuovo in PHP. Grazie
So che questo è un vecchio post. Ma c'è un modo per specificare la categoria dell'elenco degli archivi? Preferibilmente passando il valore dal tag wp_custom_archive. In modo che potrei mettere diversi elenchi di archivi in una pagina. Voglio un elenco di archivi per la categoria 9 e un elenco di archivi separato per la categoria 4. In modo che il tag sia qualcosa come wp_custom_archive('9') e wp_custom_archive('4').
Qualsiasi aiuto?
hhhmmm Ciao John, esistono molti plugin di archivi che potrebbero essere una soluzione migliore quando si vuole essere così dettagliati con i propri archivi.
Se ti stai ancora chiedendo, ho pubblicato un codice modificato sopra (29/05/2017) che consente il filtraggio per categoria.