web-dev-qa-db-fra.com

get_post_terms ne fonctionne pas comme prévu

J'ai un type de message personnalisé appelé "Fruit" et sous celui-ci j'ai une taxonomie hiérarchique appelée "Catégories de fruits"

Lorsque je crée un nouveau poste sous Fruit, je peux l'assigner à un "terme" - comme vous le feriez avec une catégorie de message normal, mais sous la taxonomie des catégories de fruits.

J'ai ajouté trois publications à Fruit, chacune étant affectée à un seul terme; "Pommes", "Poires" et "Bananes".

Tout cela fonctionne bien, mais je souhaite maintenant créer une page d'archive qui répertorie simplement les termes dans une UL, pour ce type de publication personnalisé, comme ceci;

mysite.com/fruit

  • Pommes
  • Poires
  • Bananes

Le problème auquel je suis confronté est que chaque requête que j'ai utilisée semble ne renvoyer que le premier terme, Pommes. Les deux autres ne sont pas visibles et j'ai essayé de nombreux extraits de code, tous avec le même succès.

Certaines choses que j'ai essayées

    $term_list = wp_get_post_terms($post->ID, 'fruit_categories', array("fields" => "all"));  print_r($term_list);

Et

$terms = wp_get_post_terms($post->ID,'fruit_categories');
$count = count($terms);

if ( $count > 0 ){
    echo "<ul>";
    foreach ( $terms as $term ) {
        echo '<li><a href="'.get_term_link($term->slug, 'fruit_categories').'">'. $term->name . "</a></li>";
    }
    echo "</ul>";
}

J'ai également essayé les astuces suggérées ici, cependant, cela entraîne toujours le même problème avec seulement le premier terme répertorié.

https://stackoverflow.com/questions/15502811/display-current-post-custom-taxonomy-in-wordpress

C'est une nouvelle installation sans plugins.

Dois-je ajouter une boucle foreach pour intégrer les termes supplémentaires? Ou y a-t-il quelque chose qui me manque ici?

J'ai aussi regardé wp_get_object_terms mais je ne comprends pas vraiment comment l'utiliser.

Quand je fais un dump d'écran, j'obtiens ce qui suit sur mysite/fruit

Pommes

Tableau ([0] => Objet stdClass ([term_id] => 43 [name] => pommes [slug] => pommes [term_group] => 0 [term_taxonomy_id] => 43 [taxonomie] => fruit_categories [description] = > [parent] => 0 [compte] => 2))

Voici ce que je peux faire pour mon type de message personnalisé et mon code de taxonomie http://Pastebin.com/K8kwuzqt

Toute aide très appréciée.

1
Sol

J'ai mal compris ce que vous essayiez de faire auparavant. Je pensais que vous vouliez énumérer les termes associés à un article en particulier - celui sur lequel vous êtes. Oups!

Essayez ceci à la place:

    $terms = get_terms('fruit_category');
    if(!empty($terms)){ 
        echo "<ul>";
        foreach ( $terms as $term ) {
            echo '<li><a href="'.get_term_link($term->slug, 'fruit_categories').'">'. $term->name . "</a></li>";
        }
        echo "</ul>";
    }

Cela vous donnera une liste de tous les liens vers les pages term, à condition que chaque terme comporte au moins un post.

Mettre à jour:

Pour obtenir des termes de taxonomie un peu plus dynamiques, vous pouvez le faire:

// taxonomy term archives
$post_type = get_post_type();
$taxonomies = get_object_taxonomies($post_type);
if(!empty($taxonomies)){
    foreach($taxonomies as $taxonomy){
        $terms = get_terms($taxonomy);
        if(!empty($terms)){ 
            echo "<ul>";
            foreach ( $terms as $term ) {
                echo '<li><a href="'.get_term_link($term->slug, $taxonomy).'">'. $term->name . "</a></li>";
            }
            echo "</ul>";
        }
    }
}
2
GhostToast