Función Wordress. Cambiar el color del tag dependiendo de la cantidad. Actualizado

26 Mayo 2009
Macgrafic
No hay comentarios
176 VISITAS

Llevo unas cuantas horas creando esta función. Pero al final he conseguido crearla gracias a un ejemplo de ayudawordpress, en el cual se mostraban los tags en una lista de selección.
Para implementarla tenéis que editar vuestro archivo functions.php de vuestro theme y añadir este código.

function imprimir_colorear_tags( $args = '' ) {
	$defaults = array(
		'smallest' => 12, 'largest' => 30, 'unit' => 'px', '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')) ); // Siempre hace la query a las tags superiores

	if ( empty($tags) )
		return;

	$return = generador_imprimir_colorear_tags( $tags, $args ); // Aqui es donde se ordenan las tags de acuerdo a los $args
	if ( is_wp_error( $return ) )
		return false;
	else
		echo apply_filters( 'imprimir_colorear_tags', $return, $args );
}

function generador_imprimir_colorear_tags( $tags, $args = '' ) {
	global $wp_rewrite;
	$defaults = array(
		'smallest' => 12, 'largest' => 30, 'unit' => 'px', '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 no puede salvarte; este es un segundo (y potencialmente diferente) orden en una secuencia de datos.
	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 ));

		$medida_letra_tag = ( $smallest + ( ( $count - $min_count ) * $font_step ) );

		if ( $medida_letra_tag ==30) {
			$contador_tags = 1;
		} else if ( $medida_letra_tag <= 29 AND $medida_letra_tag >= 24 ) {
			$contador_tags = 2;
		} else if ( $medida_letra_tag <= 23 AND $medida_letra_tag >= 18 ) {
			$contador_tags = 3;
		} else if ( $medida_letra_tag <= 17 AND $medida_letra_tag >= 15 ) {
			$contador_tags = 4;
		} else {
			$contador_tags = 5;
		}

		$a[] = "<a href='$tag_link' class='tag-level-$contador_tags' style='font-size: " .
			( $smallest + ( ( $count - $min_count ) * $font_step ) )
			. "$unit;'>$tag</a> &#8226;";
	}

	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( 'generador_imprimir_colorear_tags', $return, $tags, $args );
}

Una vez hayas guardado el archivo tenéis que añadir este código donde os mostrará el resultado. En mi caso lo tengo en el pie de página, en el archivo footer.php de mi theme.

<?php imprimir_colorear_tags('number=30&order=DESC&orderby=count'); ?>

ACTUALIZADO
He actualizado el codigo porque habia algunas cosas incoherentes. La actualización de la condición, que condiciona mediante los tamaños de letra.

$medida_letra_tag = ( $smallest + ( ( $count - $min_count ) * $font_step ) );

		if ( $medida_letra_tag ==30) {
			$contador_tags = 1;
		} else if ( $medida_letra_tag <= 29 AND $medida_letra_tag >= 24 ) {
			$contador_tags = 2;
		} else if ( $medida_letra_tag <= 23 AND $medida_letra_tag >= 18 ) {
			$contador_tags = 3;
		} else if ( $medida_letra_tag <= 17 AND $medida_letra_tag >= 15 ) {
			$contador_tags = 4;
		} else {
			$contador_tags = 5;
		}

		$a[] = "<a href='$tag_link' class='tag-level-$contador_tags' style='font-size: " .
			( $smallest + ( ( $count - $min_count ) * $font_step ) )
			. "$unit;'>$tag</a> &#8226;";

Y claro está, los estilos.
Recodaros que teneis que crear los estilos que en este caso son cinco.

#footer_tags a.tag-level-1 {
	color: #fff;
}

#footer_tags a.tag-level-2 {
	color: #a8a8a8;
}

#footer_tags a.tag-level-3 {
	color: #777;
}
#footer_tags a.tag-level-4 {
	color: #4c4c4c;
}
#footer_tags a.tag-level-5 {
	color: #333;
}

Palabras tags


Comparte esta entrada:

  • del.icio.us
  • Facebook
  • Mixx
  • email
  • LinkedIn
  • NewsVine
  • Reddit
  • RSS
  • StumbleUpon
  • Technorati
  • Twitter
  • Yahoo! Buzz

Escribe un comentario

Insertar número página automaticamente en Indesign CS3 - 8,512 VISITAS Crear gif animado en Photoshop CS3 - 6,953 VISITAS Definir estilos de parrafo y caracter en Indesign CS3 - 3,590 VISITAS Definir estilos de tabla y celda en Indesign CS3 - 2,434 VISITAS Graficos de barras con CSS - 1,948 VISITAS