X

Comment formater joliment des archives par mois séparées par année

Snippets by IsItWP

Vous cherchez un moyen d’afficher une liste d’archives joliment formatée par 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 des archives formatées par mois séparées par année dans WordPress.

Instructions:

Tout ce que vous avez à faire est d’ajouter ce code au fichier functions.php de votre thème ou dans un plugin spécifique à votre 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 ce code dans votre fichier index.php ou tout autre fichier template où vous souhaitez afficher les archives formatées.

<?php 
           wp_custom_archive(); 
?>

Note : Si c’est la première fois que vous ajoutez des extraits de code dans WordPress, veuillez vous référer à notre guide sur comment 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 comme : 9 meilleurs plugins WordPress de vente aux enchères et comment créer un formulaire de soumission d’un article invité sur WordPress.

Commentaires   laisser une réponse

  1. Great work Dear..
    can you please tell me how to show post count by months?
    right now it showing the month names

  2. How to remove recent month of the year in this plugins?

  3. Cristian Florescu octobre 9, 2018 à 8:40 pm

    $temp_year not defined 😉

  4. Awesome code! Thanks a lot man!

    1. No problem glad I could help!

  5. Awesome code! Thanks a lot man!

  6. Awesome code! Thanks a lot man!

  7. Awesome code. Exactly what I was looking for. Do you, perhaps know how to refine it to only pull in a custom post type? *waiting hopefully 🙂

    1. post_type is defined here, “WHERE post_type = ‘post'”

  8. This is a very good example. Thanks, Now, it’s possible loading months of a specify category?

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

    Very bealtifully. Great. Thanks!

  10. Wow. That’s a great solution without a plugin. Works perfekt. Thanks for the snippet

  11. Exactly what i needed, this should be baked into wordpress core it’s so good

  12. Great solution, thanks 🙂

  13. Dear Kevin,
    Hard to understand your script. Would you like to attach it with tabel in database MySql? May be it more clearly for me because I am new in PHP. Thanks

  14. I know this is an old post. But is there any way to specify the category of the archive list? Preferably by passing the value from the wp_custom_archive tag. So that I could put several archive lists on a page. i want an archive list for category 9 and a separate archive list for category 4. So that the tag would be something like wp_custom_archive(‘9’) and wp_custom_archive(‘4’).

    Any help?

    1. hhhmmm Hi John, many archive plugins exist that might be a better solution when wanting to get this detailed with your archives.

    2. If you’re still wondering, I’ve posted modified code above (5/29/2017) that allows for filtering by category.

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 privacy policy, et que tous les liens sont en nofollow. N'utilisez PAS de mots-clés dans le champ du nom. Engageons une conversation personnelle et constructive.

WordPress Launch Checklist

L'ultime liste de contrôle pour le lancement de WordPress

Nous avons rassemblé 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 le gratuit !