X

Cómo dar un formato bonito a los archivos por meses separados por años

Snippets by IsItWP

¿Está buscando una forma de mostrar una lista de archivos con un bonito formato de meses separados por año? Si bien es probable que haya un plugin para esto, hemos creado un fragmento de código rápido que puede utilizar para mostrar archivos formateados por mes separados por año en WordPress.

Instrucciones:

Todo lo que tienes que hacer es añadir este código al archivo functions.php de tu tema o en un plugin específico del sitio:

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;
}

Añada este fragmento en su archivo index.php o en cualquier otro archivo de plantilla en el que desee mostrar los archivos formateados.

<?php 
           wp_custom_archive(); 
?>

Nota: Si es la primera vez que añade fragmentos de código en WordPress, consulte nuestra guía sobre cómo copiar / pegar correctamente fragmentos de código en WordPress, para no romper accidentalmente su sitio.

Si te ha gustado este fragmento de código, por favor considere revisar nuestros otros artículos en el sitio como: 9 mejores plugins de subastas de WordPress y cómo crear un formulario de envío de post invitado en WordPress.

Comentarios   Deja una respuesta

  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 octubre 9, 2018 en 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 marzo 27, 2013 en 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.

Añadir un comentario

Nos alegra que haya decidido dejar un comentario. Tenga en cuenta que todos los comentarios se moderan de acuerdo con nuestra política de privacidad , y que todos los enlaces son nofollow. NO utilice palabras clave en el campo del nombre. Tengamos una conversación personal y significativa.

WordPress Launch Checklist

La lista definitiva para lanzar WordPress

Hemos recopilado todos los elementos esenciales de la lista de comprobación para el lanzamiento de su próximo sitio web de WordPress en un práctico ebook.
Sí, envíeme el ¡gratuito!