Vous cherchez un moyen d'afficher une liste d'archives magnifiquement formatée de mois séparés par année ? Bien qu'il existe probablement un plugin pour cela, nous avons créé un extrait de code rapide que vous pouvez utiliser pour afficher les archives formatées par mois, séparées par année dans WordPress.
Instructions :
Il vous suffit d'ajouter ce code au fichier functions.php de votre thème ou dans un plugin spécifique au site :
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;
}
Ajoutez cet extrait dans votre fichier index.php ou tout autre fichier de modèle où vous souhaitez afficher les archives formatées.
<?php
wp_custom_archive();
?>
Remarque : Si c'est la première fois que vous ajoutez des extraits de code dans WordPress, veuillez consulter notre guide sur la manière de copier / coller correctement des extraits de code dans WordPress, afin de ne pas casser accidentellement votre site.
Si vous avez aimé cet extrait de code, n'hésitez pas à consulter nos autres articles sur le site tels que : 9 meilleurs plugins d'enchères WordPress et comment créer un formulaire de soumission d'articles invités dans WordPress.
Excellent travail cher..
pouvez-vous s'il vous plaît me dire comment afficher le nombre de publications par mois ?
actuellement, il affiche les noms des mois
Comment supprimer le mois récent de l'année dans ces plugins ?
$temp_year non défini 😉
Code génial ! Merci beaucoup mec !
Pas de problème, content d'avoir pu aider !
Code génial ! Merci beaucoup mec !
Code génial ! Merci beaucoup mec !
Code génial. Exactement ce que je cherchais. Savez-vous, par hasard, comment l'affiner pour ne récupérer qu'un type de publication personnalisé ? *attend avec espoir :)*
post_type est défini ici, "WHERE post_type = 'post'"
C'est un très bon exemple. Merci, maintenant, est-il possible de charger les mois d'une catégorie spécifique ?
Très magnifiquement. Super. Merci !
Wow. C'est une excellente solution sans plugin. Fonctionne parfaitement. Merci pour l'extrait
Exactement ce dont j'avais besoin, cela devrait être intégré au cœur de WordPress, c'est tellement bon
Excellente solution, merci :)
Cher Kevin,
Difficile de comprendre votre script. Souhaitez-vous le joindre avec un tableau dans la base de données MySql ? Peut-être que ce sera plus clair pour moi car je suis nouveau en PHP. Merci
Je sais que c'est un vieux post. Mais y a-t-il un moyen de spécifier la catégorie de la liste d'archives ? De préférence en passant la valeur de la balise wp_custom_archive. Pour que je puisse mettre plusieurs listes d'archives sur une page. Je veux une liste d'archives pour la catégorie 9 et une liste d'archives séparée pour la catégorie 4. Pour que la balise soit quelque chose comme wp_custom_archive('9') et wp_custom_archive('4').
Une aide ?
hhhmmm Salut John, de nombreux plugins d'archives existent et pourraient être une meilleure solution si vous voulez être aussi détaillé avec vos archives.
Si vous vous posez encore la question, j'ai publié un code modifié ci-dessus (29/05/2017) qui permet de filtrer par catégorie.