web-dev-qa-db-fra.com

Utiliser une boucle pour afficher les termes associés à une publication

J'utilise un type d'article personnalisé et des taxonomies personnalisées, et j'utilise les éléments suivants pour afficher les termes des taxonomies sur la page de l'article:

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

Existe-t-il un moyen de parcourir toutes les taxonomies attribuées à cette publication et d’afficher les termes dans une liste non ordonnée, plutôt qu’une ligne séparée dans functions.php pour chaque taxonomie? Je suppose que cela peut être fait avec une boucle foreach, mais je ne connais pas la bonne syntaxe.

2
Travis Northcutt

Cette réponse étant un effort commun avec tnorthcutt, je l’ai donc faitcommunity wiki.

Plusieurs fonctions intéressantes sont disponibles: the_taxonomies(), qui appelle get_the_taxonomies(), qui à son tour appelle get_object_taxonomies() et wp_get_object_terms().

  • the_taxonomies() est une balise de modèle documentée et constitue un wrapper léger autour d'un appel à get_the_taxonomies(), qui n'est pas documenté.

  • get_object_taxonomies() renvoie une liste de taxonomies associées (sous forme de noms simples ou d'objets), ce qui peut s'avérer très utile dans certaines situations. C'est documenté, mais il est facile de rater cette fonction car rien ne s'y rapporte dans le Codex. Je ne l'ai trouvé qu'en parcourant wp-includes/taxonomy.php. Il existe une fonction wrapper non documentée autour de celle-ci, get_post_taxonomies(), qui par défaut est la publication en cours.

  • wp_get_object_terms() effectue la majeure partie des tâches lourdes. Il a deuxveryparamètres intéressants: un tableau (!) D'identifiants d'objet et un tableau (!) De noms de taxonomie. Il finit par générer un SELECT d'aspect modérément diabolique et renvoie un tableau de termes (tels que des noms, des objets ou ... lire la documentation) pour le ou les objets donnés dans la ou les taxonomies données.

Si vous avez besoin d’une mise en forme plus complexe que celle disponible via the_taxonomies(), il est utile de connaître ces fonctions "internes".

7
Peter Rowell

Je pense ce que vous cherchez, c'est get_the_term_list. Donnez un coup de feu

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

sinon, cette fonction peut les tirer. juste pas sûr de savoir comment ils vont cracher en termes de balisage

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

Cela fonctionne assez bien avec n'importe quelle taxonomie personnalisée (vous n'avez pas à spécifier le nom de la taxonomie).

Vous aurez peut-être besoin de global $post; ou non, selon l'endroit où vous envisagez de placer ce code.

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