web-dev-qa-db-fra.com

Vérifier si le tag est utilisé sur les posts

J'utilise des balises de site pour un glossaire. Je voudrais afficher un lien vers la page marquée si la balise existe, sinon il suffit d'afficher le titre de la balise. Existe-t-il une vérification qui me permettrait de déterminer si la balise est sur des publications?

    $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( __( "View all posts in %s" ), $tag->name ) . '" ' . ' style="text-decoration:none;">' . $tag->name.'</a></strong></dt><dd style="margin-bottom:20px;">' . $tag->description . '</dd>';
        }
      }
    }

Mise à jour (de travail) de la recommandation 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( __( "View all posts in %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>';
        }
      }
    }

Exemple de résultat final http://i.imgur.com/aFs6z.png

4
Zach Shallbetter

Essayez d’utiliser la balise de modèle has_tag() conditionnelle. Par exemple, pour rechercher la balise "foobar":

<?php
if ( has_tag( 'foobar' ) ) {
    // The current post has the tag "foobar";
    // do something
} else {
    // The current post DOES NOT have the tag "foobar";
    // do something else
}
?>

Si vous êtesdans la boucle, appelez simplement <?php has_tag( $tag ); ?>; Si vous êtesen dehors dela boucle, vous devrez transmettre l'ID de poste: <?php has_tag( $tag, $post ); ?>

Donc, approximant votre code:

$tags = get_tags( array( 'hide_empty' => false ) );
if ( $tags ) {
    foreach ( $tags as $tag ) {
        if ( has_tag( $tag->slug ) ) {
            // Current post has $tag;
            // output the tag link
            echo '<dt style="display:inline; float:left; padding-right:5px;"><strong><a href="' . get_tag_link( $tag->term_id ) . '" title="' . sprintf( __( "View all posts in %s" ), $tag->name ) . '" ' . ' style="text-decoration:none;">' . $tag->name.'</a></strong></dt><dd style="margin-bottom:20px;">' . $tag->description . '</dd>';
        } else {
            // Current post does NOT have the tag;
            // output just the tag name
            echo $tag->name;
        }
    }
}

MODIFIER

Donc, une autre pensée: si vous tirez d'une liste arbitraire de termes et que vous voulez déterminer si ce terme est utilisé comme une balise de publication, vous pouvez essayer d'utiliser le term_exists() conditionnel; par exemple. si vous voulez savoir si 'foobar' est utilisé comme tag post:

<?php 
if ( term_exists( 'foobar', 'post_tag' ) ) {
    // The term 'foobar' is used as a post tag;
    // do something
}
?>

Mais je suis encore confus au sujet de votre source de "tags" ici.

EDIT 2

Donc, nous allons maintenant interroger en fonction du nombre de balisesétant supérieur à zéro (c’est-à-dire que la balise a été utilisée sur au moins une publication):

    $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( __( "View all posts in %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>';
        }
      }
    }
3
Chip Bennett

Vous pouvez utiliser le champ de nombre retourné par get_tags pour vérifier s'il contient ou non des messages, quelque chose comme ceci:

$tags = get_tags( array( 'hide_empty' => false ) );
if ($tags) {
    foreach ($tags as $tag) {
        echo '<dt style="display:inline; float:left; padding-right:5px;"><strong>';
        //check tag count
        if($tag->count > 0){
            //its used on posts
            if ($tag->description) {
                echo '<a href="' . get_tag_link( $tag->term_id ) . '" title="' . sprintf( __( "View all posts in %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( __( "View all posts in %s" ), $tag->name ) . '" ' . ' style="text-decoration:none;">' . $tag->name.'</a></strong></dt>';
            }
        }else{
            //no posts
            echo $tag->name;
            if ($tag->description)
                echo '<dd style="margin-bottom:20px;">' . $tag->description . '</dd>';
        }
    }
}
1
Bainternet