X

Como formatar arquivos por mês separados por ano

Snippets by IsItWP

Você está procurando uma maneira de exibir uma lista de arquivos formatada de forma bonita, com os meses separados por ano? Embora provavelmente exista um plug-in para isso, criamos um trecho de código rápido que você pode usar para exibir arquivos formatados por mês separados por ano no WordPress.

Instruções:

Tudo o que você precisa fazer é adicionar esse código ao arquivo functions.php do seu tema ou em um plugin específico do 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;
}

Adicione esse snippet em seu arquivo index.php ou em qualquer outro arquivo de modelo em que você queira exibir os arquivos formatados.

<?php 
           wp_custom_archive(); 
?>

Observação: Se esta é a primeira vez que você adiciona trechos de código no WordPress, consulte nosso guia sobre como copiar/colar corretamente trechos de código no WordPress, para não danificar acidentalmente seu site.

Se você gostou desse snippet de código, considere dar uma olhada em nossos outros artigos no site, como: 9 melhores plug-ins de leilão do WordPress e como criar um formulário de envio de guest post no WordPress.

Comentários   Deixe uma resposta

  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 outubro 9, 2018 em 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 março 27, 2013 em 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.

Adicionar um comentário

Ficamos felizes por você ter optado por deixar um comentário. Lembre-se de que todos os comentários são moderados de acordo com nossa política de privacidade, e todos os links são nofollow. NÃO use palavras-chave no campo do nome. Vamos ter uma conversa pessoal e significativa.

WordPress Launch Checklist

A lista de verificação definitiva para o lançamento do WordPress

Compilamos todos os itens essenciais da lista de verificação para o lançamento de seu próximo site WordPress em um ebook prático.
Sim, envie-me o livro eletrônico gratuito grátis!