Verifică dacă o etichetă este folosită în articole

24 oct. 2011, 21:19:09
Vizualizări: 14.1K
Voturi: 5

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

2
Comentarii

Un lucru pe care nu îl înțeleg; spui: "Aș dori să afișez un link către pagina etichetată dacă eticheta există". Întrebare: de unde vine numele etichetei, dacă nu de la o etichetă existentă?

Chip Bennett Chip Bennett
24 oct. 2011 22:18:05

Etichetele provin din etichetele și descrierile care au fost generate manual pentru a crea un glosar. Dacă etichetele sunt folosite într-un articol, aș dori să direcționeze către pagina respectivă a etichetei.

Zach Shallbetter Zach Shallbetter
24 oct. 2011 22:45:05
Toate răspunsurile la întrebare 2
7

Î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>';
        }
      }
    }
24 oct. 2011 21:27:39
Comentarii

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

Zach Shallbetter Zach Shallbetter
24 oct. 2011 22:03:50

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

Chip Bennett Chip Bennett
24 oct. 2011 22:21:31

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.

Zach Shallbetter Zach Shallbetter
24 oct. 2011 22:27:38

"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!

Chip Bennett Chip Bennett
24 oct. 2011 22:35:13

Corect, aș dori să afișez un link dacă există postări.

Zach Shallbetter Zach Shallbetter
24 oct. 2011 22:38:42

Atunci, vezi editarea #2! :)

Chip Bennett Chip Bennett
24 oct. 2011 22:39:01

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.

Zach Shallbetter Zach Shallbetter
24 oct. 2011 22:42:08
Arată celelalte 2 comentarii
0

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>';
        }
    }
}
24 oct. 2011 22:34:15