Blog and Web

Cómo excluir etiquetas de la lista de tags en WordPress

En WordPress, generalmente mostramos las tags o etiquetas en dos lugares, en la barra lateral como nube de tags y en cada post con sus etiquetas correspondientes. Regularmente no es necesario excluir ninguna de ambas listas, pero cuando a un etiqueta le damos una función diferente o destacada respecto a las otras conviene listarla aparte.

Para excluirla de la nube de tags no hay mucho problema pues la misma función wp_tag_clud() que la muestra cuenta con ese parámetro. Ejemplo, excluir las tags con ID 3 y 4:

<?php wp_tag_cloud('smallest=10&largest=18&exclude=3,4'); ?>

Por su parte, la función para mostrar las tags en el post no incluye argumentos para excluir tags:

<?php the_tags('', ', ', ''); ?>

Pero buscando, me encontré con una función a partir de get_the_tags() que puede hacerlo. La función puede colocarse en el archivo fuctions.php y es la siguiente:

/* Excluir tags en Posts */
function pk_the_tags( $before = '', $sep = ', ', $after = '', $exclude = '' ) {
        $tags = get_the_tags();
        if ( empty( $tags ) )
                return false;
        $tag_list = $before;
        foreach ( $tags as $tag ) {
                 if (!empty($exclude))  
                        $pos = stripos( $exclude, $tag->name);
                 else
                        $pos = false;
                 if ($pos=== false)
                        $tag_links[] = '<a href="' . get_tag_link($tag->term_id) . '">' . $tag->name . '</a>'; 
        }
        if (empty($tag_links))
           return false;
        $tag_links = join( $sep, $tag_links );
        $tag_links = apply_filters( 'the_tags', $tag_links );
        $tag_list .= $tag_links;
        $tag_list .= $after;
        echo $tag_list;
}

Como se ve en la función, acepta varios argumentos como el antes y después de cada etiqueta de la lista, un separador y lo que nos interesa que es la exclusión. Entonces, desde cualquier parte del theme se puede llamar esta función y excluir tags por su nombre. Ejemplo, excluir tags llamadas “WordPress” y “Blogger”:

<?php if (get_the_tags()) pk_the_tags('', ', ', '', 'Wordpress, Blogger'); ?>

Repito, no es común tener la necesidad de excluir tags en ambos lugares, se usa principalmente en themes tipo revista o con funciones adicionales para las tags, pero a mi me fue útil y se las dejo a mano.