Verificar si una etiqueta se usa en publicaciones
Estoy usando etiquetas del sitio para un glosario. Me gustaría mostrar un enlace a la página de la etiqueta si existe, de lo contrario solo mostrar el título de la etiqueta. ¿Existe alguna verificación que me permita determinar si la etiqueta ha sido asignada a publicaciones?
$tags = get_tags( array( 'hide_empty' => false ) );
if ($tags) {
foreach ($tags as $tag) {
if ($tag->description) {
echo '<dt style="display:inline; float:left; padding-right:5px;"><strong><a href="' . get_tag_link( $tag->term_id ) . '" title="' . sprintf( __( "Ver todas las publicaciones en %s" ), $tag->name ) . '" ' . ' style="text-decoration:none;">' . $tag->name.'</a></strong></dt><dd style="margin-bottom:20px;">' . $tag->description . '</dd>';
}
}
}
(Funcionando) Actualización según la recomendación de Chip
$tags = get_tags( array( 'hide_empty' => false ) );
if ($tags) {
foreach ($tags as $tag) {
if ($tag->description) {
echo '<dt style="display:inline; float:left; padding-right:5px;"><strong>';
if ( 0 < $tag->count ){
echo '<a href="' . get_tag_link( $tag->term_id ) . '" title="' . sprintf( __( "Ver todas las publicaciones en %s" ), $tag->name ) . '" ' . ' style="text-decoration:none;">' . $tag->name.'</a>';
} else {
echo $tag->name;
}
echo '</strong></dt><dd style="margin-bottom:20px;">' . $tag->description . '</dd>';
}
}
}
Ejemplo del resultado final https://i.sstatic.net/Ph751.png

Prueba utilizando la etiqueta condicional de plantilla has_tag()
. Por ejemplo, para consultar la etiqueta "foobar":
<?php
if ( has_tag( 'foobar' ) ) {
// El post actual tiene la etiqueta "foobar";
// hacer algo
} else {
// El post actual NO tiene la etiqueta "foobar";
// hacer otra cosa
}
?>
Si estás dentro del Loop, simplemente llama <?php has_tag( $tag ); ?>
; si estás fuera del Loop, necesitarás pasar el ID del post: <?php has_tag( $tag, $post ); ?>
Así, aproximando tu código:
$tags = get_tags( array( 'hide_empty' => false ) );
if ( $tags ) {
foreach ( $tags as $tag ) {
if ( has_tag( $tag->slug ) ) {
// El post actual tiene $tag;
// mostrar el enlace de la etiqueta
echo '<dt style="display:inline; float:left; padding-right:5px;"><strong><a href="' . get_tag_link( $tag->term_id ) . '" title="' . sprintf( __( "Ver todos los posts en %s" ), $tag->name ) . '" ' . ' style="text-decoration:none;">' . $tag->name.'</a></strong></dt><dd style="margin-bottom:20px;">' . $tag->description . '</dd>';
} else {
// El post actual NO tiene la etiqueta;
// mostrar solo el nombre de la etiqueta
echo $tag->name;
}
}
}
EDITADO
Otra idea: si estás extrayendo de una lista arbitraria de términos y quieres determinar si ese término se usa como etiqueta de post, puedes probar usando el condicional term_exists()
; por ejemplo, si quieres saber si 'foobar' se usa como etiqueta de post:
<?php
if ( term_exists( 'foobar', 'post_tag' ) ) {
// El término 'foobar' se usa como etiqueta de post;
// hacer algo
}
?>
Pero sigo confundido sobre tu fuente de "etiquetas" aquí.
EDITADO 2
Ahora consultaremos basándonos en que el contador de etiquetas sea mayor que cero (es decir, la etiqueta ha sido usada en al menos un post):
$tags = get_tags( array( 'hide_empty' => false ) );
if ($tags) {
foreach ($tags as $tag) {
if ( 0 < $tag->count ) {
echo '<dt style="display:inline; float:left; padding-right:5px;"><strong>';
if ( has_tag( $tag->slug ) ) {
echo '<a href="' . get_tag_link( $tag->term_id ) . '" title="' . sprintf( __( "Ver todos los posts en %s" ), $tag->name ) . '" ' . ' style="text-decoration:none;">' . $tag->name.'</a>';
} else {
echo $tag->name;
}
echo '</strong></dt><dd style="margin-bottom:20px;">' . $tag->description . '</dd>';
}
}
}

Sí, esto está fuera del bucle. Probé ambas recomendaciones y no parecieron funcionar. Parece que simplemente está omitiendo el if ( has_tag( $tag->slug ) ) {
. Actualicé mi publicación. Puedes verlo en acción aquí http://www.openeye.net/glossary

Ver respuesta actualizada. ¿De dónde estás obteniendo tu array de términos del glosario?

Creé manualmente muchas de las etiquetas y agregué la descripción. Usamos muchos de los términos actualmente en el sitio y planeamos usar todos eventualmente cuando agreguemos el Q&A.

"Creé manualmente muchas de las etiquetas y agregué la descripción." - entonces, estas son etiquetas de publicaciones existentes, pero necesitas saber si el conteo es mayor que cero? ¡Eso es aún más fácil!

Correcto, me gustaría mostrar un enlace si existe una publicación.

Eso funcionó, sin embargo moví ( 0 < $tag->count )
desde debajo del foreach hasta donde estaba has_tag( $tag->slug )
. Ahora si la publicación tiene una descripción, se mostrará en la lista y si la etiqueta está conectada a una publicación, mostrará un enlace. ¡Excelente trabajo Chip! Actualicé mi publicación con el código funcional.

Puedes utilizar el campo count devuelto por get_tags
para verificar si tiene publicaciones o no, algo así:
$tags = get_tags( array( 'hide_empty' => false ) );
if ($tags) {
foreach ($tags as $tag) {
echo '<dt style="display:inline; float:left; padding-right:5px;"><strong>';
//verificar el conteo de etiquetas
if($tag->count > 0){
//está siendo usado en publicaciones
if ($tag->description) {
echo '<a href="' . get_tag_link( $tag->term_id ) . '" title="' . sprintf( __( "Ver todas las publicaciones en %s" ), $tag->name ) . '" ' . ' style="text-decoration:none;">' . $tag->name.'</a></strong></dt><dd style="margin-bottom:20px;">' . $tag->description . '</dd>';
}else{
echo '<a href="' . get_tag_link( $tag->term_id ) . '" title="' . sprintf( __( "Ver todas las publicaciones en %s" ), $tag->name ) . '" ' . ' style="text-decoration:none;">' . $tag->name.'</a></strong></dt>';
}
}else{
//no hay publicaciones
echo $tag->name;
if ($tag->description)
echo '<dd style="margin-bottom:20px;">' . $tag->description . '</dd>';
}
}
}
