Verificare se un tag è utilizzato nei post
Sto usando i tag del sito per un glossario. Vorrei mostrare un link alla pagina con tag se il tag esiste, altrimenti mostrare solo il titolo del tag. C'è un controllo che mi permetterebbe di determinare se il tag è stato utilizzato nei post?
$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( __( "Visualizza tutti i post in %s" ), $tag->name ) . '" ' . ' style="text-decoration:none;">' . $tag->name.'</a></strong></dt><dd style="margin-bottom:20px;">' . $tag->description . '</dd>';
}
}
}
(Funzionante) Aggiornamento dalla raccomandazione di 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( __( "Visualizza tutti i post 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>';
}
}
}
Esempio del risultato finale https://i.sstatic.net/Ph751.png
Prova a utilizzare il tag condizionale del template has_tag()
. Ad esempio, per verificare la presenza del tag "foobar":
<?php
if ( has_tag( 'foobar' ) ) {
// Il post corrente ha il tag "foobar";
// fai qualcosa
} else {
// Il post corrente NON ha il tag "foobar";
// fai qualcos'altro
}
?>
Se sei all'interno del Loop, chiama semplicemente <?php has_tag( $tag ); ?>
; se sei all'esterno del Loop, dovrai passare l'ID del post: <?php has_tag( $tag, $post ); ?>
Quindi, approssimando il tuo codice:
$tags = get_tags( array( 'hide_empty' => false ) );
if ( $tags ) {
foreach ( $tags as $tag ) {
if ( has_tag( $tag->slug ) ) {
// Il post corrente ha $tag;
// mostra il link al tag
echo '<dt style="display:inline; float:left; padding-right:5px;"><strong><a href="' . get_tag_link( $tag->term_id ) . '" title="' . sprintf( __( "Vedi tutti i post in %s" ), $tag->name ) . '" ' . ' style="text-decoration:none;">' . $tag->name.'</a></strong></dt><dd style="margin-bottom:20px;">' . $tag->description . '</dd>';
} else {
// Il post corrente NON ha il tag;
// mostra solo il nome del tag
echo $tag->name;
}
}
}
MODIFICA
Quindi, un'altra idea: se stai recuperando da una lista arbitraria di termini e vuoi determinare se quel termine è usato come tag del post, puoi provare a usare il condizionale term_exists()
; ad esempio, se vuoi sapere se 'foobar' è usato come tag del post:
<?php
if ( term_exists( 'foobar', 'post_tag' ) ) {
// Il termine 'foobar' è usato come tag del post;
// fai qualcosa
}
?>
Ma sono ancora confuso riguardo alla tua fonte di "tag" qui.
MODIFICA 2
Quindi, ora interrogheremo basandoci sul conteggio dei tag maggiore di zero (cioè, il tag è stato usato almeno in 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( __( "Vedi tutti i post 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>';
}
}
}

Sì, questo è al di fuori del loop. Ho provato entrambe le tue raccomandazioni ma non sembrano funzionare. Sembra che stia semplicemente saltando il if ( has_tag( $tag->slug ) ) {
. Ho aggiornato il mio post. Puoi vederlo in azione qui http://www.openeye.net/glossary

Vedi la risposta aggiornata. Dove stai ottenendo il tuo array di termini del glossario?

Ho creato manualmente molti dei tag e aggiunto la descrizione. Usiamo già molti dei termini sul sito attualmente e pianifichiamo di utilizzarli tutti quando aggiungeremo la sezione Domande e Risposte.

"Ho creato manualmente molti dei tag e ho aggiunto la descrizione." - quindi questi sono tag di articoli esistenti, ma hai bisogno di sapere se il conteggio è maggiore di zero? È ancora più semplice!

Ha funzionato, tuttavia ho spostato ( 0 < $tag->count )
da sotto il foreach a dove si trovava has_tag( $tag->slug )
. Ora se il post ha una descrizione verrà mostrata nella lista, poi se il tag è collegato a un post mostrerà un link. Ottimo lavoro Chip! Ho aggiornato il mio post con il codice funzionante.

Puoi utilizzare il campo count restituito da get_tags
per verificare se ha post o meno, in questo modo:
$tags = get_tags( array( 'hide_empty' => false ) );
if ($tags) {
foreach ($tags as $tag) {
echo '<dt style="display:inline; float:left; padding-right:5px;"><strong>';
//verifica il conteggio del tag
if($tag->count > 0){
//è utilizzato nei post
if ($tag->description) {
echo '<a href="' . get_tag_link( $tag->term_id ) . '" title="' . sprintf( __( "Visualizza tutti i post 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( __( "Visualizza tutti i post in %s" ), $tag->name ) . '" ' . ' style="text-decoration:none;">' . $tag->name.'</a></strong></dt>';
}
}else{
//nessun post
echo $tag->name;
if ($tag->description)
echo '<dd style="margin-bottom:20px;">' . $tag->description . '</dd>';
}
}
}
