X

Como Formatar Belos Arquivos por Mês Separados por Ano

Snippets por IsItWP

Você está procurando uma maneira de exibir uma lista de arquivos formatada e bonita de meses separados por ano? Embora provavelmente exista um plugin 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 este código ao arquivo functions.php do seu tema ou a 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 este trecho ao seu arquivo index.php ou a qualquer outro arquivo de template onde 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 trechos de código corretamente no WordPress, para não quebrar acidentalmente seu site.

Se você gostou deste trecho de código, considere conferir nossos outros artigos no site, como: 9 melhores plugins de leilão para WordPress e como criar um formulário de envio de post para convidados no WordPress.

Comentários   Deixe uma resposta

  1. Ótimo trabalho, querido..
    você pode me dizer como mostrar a contagem de posts por mês?
    no momento, ele está mostrando os nomes dos meses

  2. Como remover o mês mais recente do ano neste plugin?

  3. Cristian Florescu October 9, 2018 at 8:40 pm

    $temp_year não definido 😉

  4. Código incrível! Muito obrigado, cara!

    1. Sem problemas, fico feliz em ajudar!

  5. Código incrível! Muito obrigado, cara!

  6. Código incrível! Muito obrigado, cara!

  7. Código incrível. Exatamente o que eu estava procurando. Você, por acaso, sabe como refiná-lo para buscar apenas um tipo de post personalizado? *esperando esperançosamente 🙂

    1. post_type é definido aqui, “WHERE post_type = ‘post'”

  8. Este é um ótimo exemplo. Obrigado, agora é possível carregar meses de uma categoria específica?

  9. Jony Fernando Schulz March 27, 2013 at 12:54 pm

    Muito bonito. Ótimo. Obrigado!

  10. Uau. Essa é uma ótima solução sem um plugin. Funciona perfeitamente. Obrigado pelo trecho

  11. Exatamente o que eu precisava, isso deveria vir no core do wordpress, é tão bom

  12. Ótima solução, obrigado 🙂

  13. Caro Kevin,
    Difícil de entender seu script. Você gostaria de anexá-lo com uma tabela no banco de dados MySql? Talvez fique mais claro para mim porque sou novo em PHP. Obrigado

  14. Eu sei que esta é uma postagem antiga. Mas há alguma maneira de especificar a categoria da lista de arquivos? Preferencialmente passando o valor da tag wp_custom_archive. Para que eu possa colocar várias listas de arquivos em uma página. Eu quero uma lista de arquivos para a categoria 9 e uma lista de arquivos separada para a categoria 4. Para que a tag seja algo como wp_custom_archive(‘9’) e wp_custom_archive(‘4’).

    Alguma ajuda?

    1. hhhmmm Olá John, existem muitos plugins de arquivo que podem ser uma solução melhor quando se quer detalhar seus arquivos.

    2. Se você ainda está se perguntando, postei um código modificado acima (29/05/2017) que permite filtrar por categoria.

Adicionar um comentário

Ficamos felizes que você tenha escolhido deixar um comentário. Por favor, tenha em mente 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.

Checklist de Lançamento WordPress

O Checklist Definitivo para Lançamento de WordPress

Compilamos todos os itens essenciais da lista de verificação para o lançamento do seu próximo site WordPress em um e-book prático.
Sim, envie-me o eBook Gratuito!