X

Comment formater magnifiquement les archives par mois séparées par année

Extraits par IsItWP

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 = '&nbsp;('.$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.

Commentaires   Laisser une réponse

  1. 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

  2. Comment supprimer le mois récent de l'année dans ces plugins ?

  3. Cristian Florescu 9 octobre 2018 à 20:40

    $temp_year non défini 😉

  4. nicolabavaro 10 avril 2014 à 6:41

    Code génial ! Merci beaucoup mec !

    1. Kevin Chard 10 avril 2014 à 8:01

      Pas de problème, content d'avoir pu aider !

  5. nicolabavaro 10 avril 2014 à 6:41

    Code génial ! Merci beaucoup mec !

  6. nicolabavaro 10 avril 2014 à 6:41

    Code génial ! Merci beaucoup mec !

  7. Nicole Holgate 20 novembre 2013 à 3:24

    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 :)*

    1. Kevin Chard 10 avril 2014 à 8:03

      post_type est défini ici, "WHERE post_type = 'post'"

  8. C'est un très bon exemple. Merci, maintenant, est-il possible de charger les mois d'une catégorie spécifique ?

  9. Jony Fernando Schulz 27 mars 2013 à 12:54

    Très magnifiquement. Super. Merci !

  10. Wow. C'est une excellente solution sans plugin. Fonctionne parfaitement. Merci pour l'extrait

  11. Exactement ce dont j'avais besoin, cela devrait être intégré au cœur de WordPress, c'est tellement bon

  12. Jennifer Allen 26 octobre 2012 à 1:55

    Excellente solution, merci :)

  13. Dede Sahman 2 août 2012 à 1:02

    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

  14. 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 ?

    1. Kevin Chard 13 juin 2012 à 12:12

      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.

    2. 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.

Ajouter un commentaire

Nous sommes heureux que vous ayez choisi de laisser un commentaire. N'oubliez pas que tous les commentaires sont modérés conformément à notre politique de confidentialité, et tous les liens sont nofollow. N'utilisez PAS de mots-clés dans le champ nom. Ayons une conversation personnelle et significative.

Liste de contrôle de lancement WordPress

La checklist ultime pour lancer un WordPress

Nous avons compilé tous les éléments essentiels de la liste de contrôle pour le lancement de votre prochain site Web WordPress dans un ebook pratique.
Oui, envoyez-moi l'eBook gratuit !