Arquivos grandes: como lidar com eles?

Se seu blog tem três anos ou mais, conta com um problema na sidebar: o tamanho dos arquivos. É praxe dividir os arquivos por mês, logo, em três anos de blog, e considerando que pelo menos um texto foi publicado por mês, no box dos arquivos há 36 links!

Há dois problemas em ter tantos links no box Arquivos. O primeiro é que a sidebar fica extensa, tirando o foco do que vier abaixo dos arquivos, e/ou deixando-a muito maior que a coluna de posts. O segundo, e mais grave, é que tanto link assim vai contra uma das diretrizes do Google para webmaster, que diz que, numa página, o recomendado é ter, no máximo, 100 links.

Existem duas formas de contornar esse problema, as quais explicarei abaixo. A primeira é criar um menu drop down, o que economiza muito espaço, e é bem discreto. A outra, é listar os arquivos por ano, ao invés do tradicional, que é fazê-lo por mês. Mas não se trata de uma mera listagem por ano… No método que será ensinado, ao clicar n’algum ano, os meses deste se expandem. Vamos lá?

Arquivos como menu drop down

Arquivos como menu drop down.

Arquivos como menu drop down.

Para conferir como fica o menu drop down na prática, veja a sidebar do WinAjuda (ou a imagem ao lado). Como se vê, o resultado é bem satisfatório, e o que é melhor: independe de plugin – embora, salvo engano, existam alguns com essa fianlidade.

Fazer isso em seu blog é muito fácil. Simplesmente copie e cole o trecho abaixo no arquivo sidebar.php, onde achar melhor:

<li><h2 class="titulos">Arquivos e Categorias</h2>
<ul>
<li><select name="archive-dropdown" onChange='document.location.href=this.options[this.selectedIndex].value;'>
<option value=""><?php echo attribute_escape(__('Escolha o mês')); ?></option>
<?php wp_get_archives('type=monthly&amp;amp;amp;format=option&amp;amp;amp;show_post_count=1'); ?> </select></li>
</ul>
</li>

Salve as alterações, e pronto!

Arquivos divididos por ano

O código para exibir arquivos é o seguinte:

<?php wp_get_archives('type=monthly'); ?>

Se seu intuito é simplesmente listar os arquivos por ano, e nada mais, substitua o termo monthly, no código acima, por yearly. Mas como isso é ficar no arroz com feijão, vamos além.

O código abaixo, além de listar os arquivos por ano, traz um plus interessante. Nele, quando o leitor clica num dos anos, a página correspondente é aberta, e no menu, os meses aparecem. Em meu blog pessoal é possível ver o sistema em funcionamento – ou, para quem preferir, na imagem abaixo:

Arquivos por ano.

Arquivos por ano.

Sem mais delongas, o código, extraído deste tópico do fórum oficial, é o seguinte:

<ul><li><h2>Arquivos</h2>
<ul>
<?php
global $month, $year; // scope WP global variables for later use
/* $arc_years => archive years query */
$arc_years = $wpdb->get_col("SELECT DISTINCT YEAR(post_date) FROM $wpdb->posts WHERE post_status = 'publish' ORDER BY post_date DESC");
foreach($arc_years as $arc_year) : // foreach loop for archive years
?>
<?php if($year != $arc_year) : // if current archive year does not equal $arc_year ?>
<li><a href="<?php echo get_year_link($arc_year); ?>"><?php echo $arc_year; ?></a></li>
<?php else : // current archive year *does* equal $arc_year ?>
<li><a href="<?php echo get_year_link($arc_year); ?>"><?php echo $arc_year; ?></a></li>
<li>
<ul>
<?php
/* $arc_months => archive months query for current archive year */
$arc_months = $wpdb->get_col("SELECT DISTINCT MONTH(post_date) FROM $wpdb->posts WHERE YEAR(post_date) = '$arc_year' AND post_status = 'publish' ORDER BY post_date");
foreach($arc_months as $arc_month): // foreach loop for archive months of current archive year
?>
<li><a href="<?php echo get_month_link($arc_year, $arc_month); ?> "><?php echo $month[zeroise($arc_month, 2)]; ?></a></li>
<?php endforeach; // end foreach loop for archive months ?>
</ul>
</li>
<?php endif; // end if/else on archive $year/$arc_year ?>
<?php endforeach; // end foreach loop for archive years ?>
</ul>
</li></ul>

A única coisa que falta nele é um toque de AJAX, de modo que a abertura dos meses seja on the fly, sem que a página inteira precise ser recarregada. Algum programador-leitor disposto a fazer essa melhoria?

Em suma, é isso. Espero que tais dicas sejam úteis, e até a próxima!