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 = ' ('.$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.
Ó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
Como remover o mês mais recente do ano neste plugin?
$temp_year não definido 😉
Código incrível! Muito obrigado, cara!
Sem problemas, fico feliz em ajudar!
Código incrível! Muito obrigado, cara!
Código incrível! Muito obrigado, cara!
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 🙂
post_type é definido aqui, “WHERE post_type = ‘post'”
Este é um ótimo exemplo. Obrigado, agora é possível carregar meses de uma categoria específica?
Muito bonito. Ótimo. Obrigado!
Uau. Essa é uma ótima solução sem um plugin. Funciona perfeitamente. Obrigado pelo trecho
Exatamente o que eu precisava, isso deveria vir no core do wordpress, é tão bom
Ótima solução, obrigado 🙂
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
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?
hhhmmm Olá John, existem muitos plugins de arquivo que podem ser uma solução melhor quando se quer detalhar seus arquivos.
Se você ainda está se perguntando, postei um código modificado acima (29/05/2017) que permite filtrar por categoria.