it-swarm.com.de

Verwenden einer Schleife zum Anzeigen von Begriffen, die mit einem Beitrag verknüpft sind

Ich verwende einen benutzerdefinierten Beitragstyp und benutzerdefinierte Taxonomien und verwende Folgendes, um die Bedingungen der Taxonomien auf der Beitragsseite anzuzeigen:

the_terms( $post->ID, 'taxname', 'beforetext', ', ');

Gibt es eine Möglichkeit, alle diesem Beitrag zugewiesenen Taxonomien zu durchlaufen und die Begriffe in einer ungeordneten Liste anstatt in einer separaten Zeile in functions.php für jede Taxonomie anzuzeigen? Ich vermute, dass dies mit einer foreach-Schleife durchgeführt werden kann, aber ich kenne die richtige Syntax nicht.

2

Diese Antwort war eine gemeinsame Anstrengung mit tnorthcutt, also habe ich es zum Community-Wiki gemacht .

Es stehen mehrere interessante Funktionen zur Verfügung: the_taxonomies(), die get_the_taxonomies() aufruft, die wiederum get_object_taxonomies() und wp_get_object_terms() aufruft.

  • the_taxonomies() ist ein dokumentiertes Template-Tag und ein Light Wrapper um einen Aufruf von get_the_taxonomies(), der nicht dokumentiert ist.

  • get_object_taxonomies() gibt eine Liste der zugeordneten Taxonomien (als einfache Namen oder als Objekte) zurück, die in bestimmten Situationen sehr nützlich sein können. Es ist dokumentiert, aber es ist leicht zu übersehen, dass diese Funktion im Codex nicht verlinkt ist. Ich habe es nur gefunden, indem ich wp-includes/taxonomy.php durchgesehen habe. Es gibt eine undokumentierte Wrapper-Funktion, get_post_taxonomies(), die standardmäßig den aktuellen Beitrag verwendet.

  • wp_get_object_terms() erledigt den größten Teil des schweren Hebens. Es hat zwei sehr interessante Parameter: ein Array (!) Von Objekt-IDs und ein Array (!) Von Taxonomienamen. Am Ende wird ein mäßig schlecht aussehendes SELECT generiert und für die angegebenen Objekte innerhalb der angegebenen Taxonomie (n) ein Array von Begriffen (als Namen, Objekte oder ... Dokumente lesen) zurückgegeben.

Wenn Sie eine komplexere Formatierung benötigen, als über the_taxonomies() verfügbar ist, sollten Sie die "inneren" Funktionen kennen.

7
Peter Rowell

Ich denke , was Sie suchen, ist get_the_term_list. Probieren Sie es aus

get_the_term_list( $post->ID, 'taxname', '', ', ', '');

andernfalls kann diese Funktion sie ziehen. nur nicht sicher, wie sie in Bezug auf Markup ausspucken werden

get_terms( $taxonomy, array( 'hide_empty' => false ) );
2
Norcross

Dies funktioniert bei jeder benutzerdefinierten Taxonomie recht gut (Sie müssen keinen Taxonomienamen angeben).

Möglicherweise benötigen Sie global $post; oder nicht, je nachdem, wo Sie diesen Code platzieren möchten.

global $post;
// get the post type
$post_type = get_post_type( get_the_ID() );
// go to taxonomies array
$post_type_taxonomies = get_object_taxonomies( $post_type );

// if we have any taxonomy
if ( ! empty( $post_type_taxonomies ) ) {

    echo '<ul>';

    // loop through each of them
    foreach ( $post_type_taxonomies as $taxonomy ) {
        // get terms list for each taxonomy
        $terms = get_the_term_list( get_the_ID(), $taxonomy, '', '</li><li>', ''  );

        // show only those terms that are assigned to post 
        if ( $terms ) {
            echo '<li>' . $terms . '</li>';
        }
    }

    echo '</ul>';
}
0
zzap