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

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.

[php]
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 );
}
[/php]

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]
<?php imprimir_colorear_tags(‘number=30&order=DESC&orderby=count’); ?>
[/php]

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.

[php]
$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;";
[/php]

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

[css]
#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;
}
[/css]

Deja el primer comentario