Verifică dacă o etichetă este folosită în articole
Folosesc etichetele site-ului pentru un glosar. Aș dori să afișez o legătură către pagina etichetei dacă aceasta există, altfel doar să afișez titlul etichetei. Există o verificare care să-mi permită să determin dacă eticheta este atribuită articolelor?
$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( __( "Vezi toate articolele din %s" ), $tag->name ) . '" ' . ' style="text-decoration:none;">' . $tag->name.'</a></strong></dt><dd style="margin-bottom:20px;">' . $tag->description . '</dd>';
}
}
}
(Funcțional) Actualizare după recomandarea lui 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( __( "Vezi toate articolele din %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>';
}
}
}
Exemplu de rezultat final https://i.sstatic.net/Ph751.png
Încearcă să folosești eticheta condițională de tipar has_tag()
. De exemplu, pentru a interoga eticheta "foobar":
<?php
if ( has_tag( 'foobar' ) ) {
// Postarea curentă are eticheta "foobar";
// fă ceva
} else {
// Postarea curentă NU are eticheta "foobar";
// fă altceva
}
?>
Dacă ești în interiorul Loop-ului, apelează simplu <?php has_tag( $tag ); ?>
; dacă ești în afara Loop-ului, va trebui să transmiți ID-ul postării: <?php has_tag( $tag, $post ); ?>
Așadar, aproximând codul tău:
$tags = get_tags( array( 'hide_empty' => false ) );
if ( $tags ) {
foreach ( $tags as $tag ) {
if ( has_tag( $tag->slug ) ) {
// Postarea curentă are $tag;
// afișează link-ul etichetei
echo '<dt style="display:inline; float:left; padding-right:5px;"><strong><a href="' . get_tag_link( $tag->term_id ) . '" title="' . sprintf( __( "Vezi toate postările în %s" ), $tag->name ) . '" ' . ' style="text-decoration:none;">' . $tag->name.'</a></strong></dt><dd style="margin-bottom:20px;">' . $tag->description . '</dd>';
} else {
// Postarea curentă NU are eticheta;
// afișează doar numele etichetei
echo $tag->name;
}
}
}
EDIT
Așadar, o altă idee: dacă extragi dintr-o listă arbitrară de termeni și vrei să determini dacă acel termen este folosit ca etichetă de postare, poți încerca să folosești condiționalul term_exists()
; de exemplu, dacă vrei să știi dacă 'foobar' este folosit ca etichetă de postare:
<?php
if ( term_exists( 'foobar', 'post_tag' ) ) {
// Termenul 'foobar' este folosit ca etichetă de postare;
// fă ceva
}
?>
Dar sunt încă confuz în legătură cu sursa ta de "etichete" aici.
EDIT 2
Așadar, acum vom interoga pe baza faptului că numărul de etichete este mai mare decât zero (adică eticheta a fost folosită pe cel puțin o postare):
$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( __( "Vezi toate postările în %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>';
}
}
}

Da, asta este în afara buclei. Am încercat ambele recomandări ale tale și nu au funcționat. Se pare că pur și simplu sare peste if ( has_tag( $tag->slug ) ) {
. Am actualizat postul meu. Poți vedea cum funcționează aici http://www.openeye.net/glossary

Vezi răspunsul actualizat. De unde obții array-ul cu termenii din glosar?

Am creat manual multe dintre tag-uri și am adăugat descrierea. Folosim deja mulți dintre termeni pe site și planificăm să-i folosim pe toți când vom adăuga secțiunea de Întrebări și Răspunsuri.

"Am creat manual multe dintre etichete și am adăugat descrierea." - deci, acestea sunt etichete existente ale postărilor, dar ai nevoie să știi dacă numărul este mai mare decât zero? Asta e și mai ușor!

A funcționat, totuși am mutat ( 0 < $tag->count )
de sub foreach acolo unde era has_tag( $tag->slug )
. Acum, dacă postarea are o descriere, aceasta va fi afișată în listă, apoi dacă eticheta este conectată la o postare, va afișa un link. Excelentă treabă, Chip! Am actualizat postarea mea cu codul funcțional.

Puteți folosi câmpul count returnat de get_tags
pentru a verifica dacă are postări sau nu, în felul următor:
$tags = get_tags( array( 'hide_empty' => false ) );
if ($tags) {
foreach ($tags as $tag) {
echo '<dt style="display:inline; float:left; padding-right:5px;"><strong>';
//verifică numărul de postări ale tag-ului
if($tag->count > 0){
//este folosit în postări
if ($tag->description) {
echo '<a href="' . get_tag_link( $tag->term_id ) . '" title="' . sprintf( __( "Vezi toate postările din %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( __( "Vezi toate postările din %s" ), $tag->name ) . '" ' . ' style="text-decoration:none;">' . $tag->name.'</a></strong></dt>';
}
}else{
//fără postări
echo $tag->name;
if ($tag->description)
echo '<dd style="margin-bottom:20px;">' . $tag->description . '</dd>';
}
}
}
