Como exibir tags em um menu dropdown Por Érico Oliveira dia 24 de setembro de 2008 às 21:51 | Imprimir este post

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.

Adicionar um comentário

5 comentários : “ Como exibir tags em um menu dropdown ”

  1. 1
    Gravatar
    Denis :

    Muito boa a dica, valeu!

  2. 2
    Gravatar
    Victor - Infovcs :

    taí, gostei dessa, pois nem todos gostam de tags, então isso pega bem neste caso….

    Muito boa dica Érico :)

  3. 3
    Gravatar
    Matheus Bonela :

    Legal a dica, vai me ser útil.. Nem sabia dessa.. Valeu!

  4. 4
    Gravatar
    Passageiro :

    Obrigado pelo código, foi muito útil e oportuno para meu blog no momento. Funcionou imediatamente e sem problemas, do jeito que eu queria.

  5. 5
    Gravatar
    marujo :

    oi erico. saabe me dizer como fazer pra exibir vários selects na index, cada um com uma determinada categoria, que ao abrir exibi as subcategrias. por exemplo. na side bar eu teria alguns selects:
    - faixa de preço
    0 a 100
    100 a 200
    acima de 200

    - localização
    bairro x
    bairro y
    bairro z

    - tipo de apto.
    3 qtos
    4 qtos

Escreva um Comentário