Como exibir tags em um menu dropdown

Esta dica eu encontrei no blog Hack WordPress e achei muito interessante, por isso resolvi compartilhar com vocês. Exibir as tags é uma maneira muito eficaz de encontrar todos os posts de um determinado assunto, o problema está no fato de que todo blog possui uma quantidade enorme de tags e é impossível organizar um espaço para exibí-las todas de uma só vez. Pensando em como resolver isso, Jean-Baptiste Jung teve a idéia de colocar todas as tags em um menu dropdown, da mesma forma como muita gente já exibe suas categorias e o arquivo. Para isso Jean desenvolveu duas novas funções e para implementá-las você deverá copiar o código abaixo no arquivo functions.php do seu tema (se o arquivo não existir você deverá criá-lo).

<?php
function dropdown_tag_cloud( $args = '' ) {
	$defaults = array(
		'smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'number' => 45,
		'format' => 'flat', 'orderby' => 'name', 'order' => 'ASC',
		'exclude' => '', 'include' => ''
	);
	$args = wp_parse_args( $args, $defaults );

	$tags = get_tags( array_merge($args, array('orderby' => 'count', 'order' => 'DESC')) ); // Always query top tags

	if ( empty($tags) )
		return;

	$return = dropdown_generate_tag_cloud( $tags, $args ); // Here's where those top tags get sorted according to $args
	if ( is_wp_error( $return ) )
		return false;
	else
		echo apply_filters( 'dropdown_tag_cloud', $return, $args );
}

function dropdown_generate_tag_cloud( $tags, $args = '' ) {
	global $wp_rewrite;
	$defaults = array(
		'smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'number' => 45,
		'format' => 'flat', 'orderby' => 'name', 'order' => 'ASC'
	);
	$args = wp_parse_args( $args, $defaults );
	extract($args);

	if ( !$tags )
		return;
	$counts = $tag_links = array();
	foreach ( (array) $tags as $tag ) {
		$counts[$tag->name] = $tag->count;
		$tag_links[$tag->name] = get_tag_link( $tag->term_id );
		if ( is_wp_error( $tag_links[$tag->name] ) )
			return $tag_links[$tag->name];
		$tag_ids[$tag->name] = $tag->term_id;
	}

	$min_count = min($counts);
	$spread = max($counts) - $min_count;
	if ( $spread <= 0 )
		$spread = 1;
	$font_spread = $largest - $smallest;
	if ( $font_spread <= 0 )
		$font_spread = 1;
	$font_step = $font_spread / $spread;

	// SQL cannot save you; this is a second (potentially different) sort on a subset of data.
	if ( 'name' == $orderby )
		uksort($counts, 'strnatcasecmp');
	else
		asort($counts);

	if ( 'DESC' == $order )
		$counts = array_reverse( $counts, true );

	$a = array();

	$rel = ( is_object($wp_rewrite) && $wp_rewrite->using_permalinks() ) ? ' rel="tag"' : '';

	foreach ( $counts as $tag => $count ) {
		$tag_id = $tag_ids[$tag];
		$tag_link = clean_url($tag_links[$tag]);
		$tag = str_replace(' ', '&nbsp;', wp_specialchars( $tag ));
		$a[] = "\t<option value='$tag_link'>$tag ($count)</option>";
	}

	switch ( $format ) :
	case 'array' :
		$return =& $a;
		break;
	case 'list' :
		$return = "<ul class='wp-tag-cloud'>\n\t<li>";
		$return .= join("</li>\n\t<li>", $a);
		$return .= "</li>\n</ul>\n";
		break;
	default :
		$return = join("\n", $a);
		break;
	endswitch;

	return apply_filters( 'dropdown_generate_tag_cloud', $return, $tags, $args );
}
?>

Agora é necessário adicionar o código que irá exibir o menu dropdown, que em geral é colocado no menu lateral. Para isso adicione o código abaixo no arquivo sidebar.php do seu tema ou no local de sua preferência.

<select name="tag-dropdown" onchange="document.location.href=this.options[this.selectedIndex].value;">
	<option value="#">Lista de Tags</option>
	<?php dropdown_tag_cloud('number=0&order=asc'); ?>
</select>

Para testar o código e poder mostrá-la em funcionamento, eu resolvi adicioná-la ao tema Migthy, que está disponível a demostração e o download na seção temas aqui do pBlog.

Como exibir suas categorias em um menu dropdown

Categorias em um menu dropdownSe você possui uma grande quantidade de categorias que ocupa muito espaço no seu blog, uma boa opção para resolver seu problema é exibir todas as categorias dentro de um menu dropdown. Para implementar este recurso basta substituir a tag <?php wp_list_cats(); ?> por esta <?php wp_dropdown_categories(); ?> no arquivo sidebar.php do seu tema. Confesse que você pensou que fosse bem mais complicado, mas não é não. Ainda existe vários argumentos que você pode utilizar com esta tag, como listar as categorias por ordem de ID ou alfabética, exibir ou não o número de posts em cada categoria, excluir algumas categorias da lista, entre outras. Se você quiser ver todas as opções, acesse o WordPress Codex.