web-dev-qa-db-fra.com

La différence entre les taxonomies hiérarchiques et non hiérarchiques?

La question est "Quelle est la différence entre les taxonomies hiérarchiques et non hiérarchiques?" Cette question m'a vraiment déconcerté au début, alors je me suis dit que ce serait une bonne idée de montrer la différence à ceux qui surfent sur le site à la recherche de la distinction.

Plus précisément, la question fait référence à l'argument hierarchical transmis à la fonction register_taxonomy(). Plus précisément, quelle est la différence entre ceci:

'hierarchical' => false

register_taxonomy('movie-genre', 'movie', array(
  'hierarchical'    => false,
  'label'           => 'Genre',
  'query_var'       => 'movie-genre',
  'rewrite'         => array('slug' => 'genres' ),
));

Et ça?

'hierarchical' => true

register_taxonomy('movie-genre', 'movie', array(
  'hierarchical'    => true,
  'label'           => 'Genre',
  'query_var'       => 'movie-genre',
  'rewrite'         => array('slug' => 'genres' ),
));

Notez que je vais aller de l'avant et répondre à ma propre question, mais je ne la marquerai pas comme meilleure si personne d'autre n'intervient avec une très bonne réponse aussi. De plus, mon instinct me dit que je n’aurais peut-être pas réussi à saisir toutes les distinctions entre les deux dichotomies. Sinon, laissez-nous savoir ce que j’ai manqué.

33
MikeSchinkel

La réponse simple est que les termes des taxonomies hiérarchiques peuvent avoir termes enfants} _. Mais quoi d'autre?

'hierarchical' => false

Lorsque vous spécifiez un 'hierarchical'=>false, vous obtenez le type de métabox suivant, qui est le format de métabox que WordPress utilise également pour Post Tags:

Taxonomy Term Metabox in the Post Edit Screen when $hierarchical==false

'hierarchical' => true

Toutefois, lorsque vous spécifiez 'hierarchical'=>true, vous obtenez le type de métabox suivant, qui est le format de métabox que WordPress utilise également pour Categories:

Taxonomy Term Metabox in the Post Edit Screen when $hierarchical==true

Bien entendu, l'exemple ci-dessus montre également que la catégorisation hiérarchique peut être un peu un mélange, car dans la vie réelle, les sous-catégories s'appliquent souvent à de nombreuses catégories parentes. Même si "beaucoup de parents"n'est pas comment taxonomies hiérarchiques fonctionne dans WordPress mais IMO classer parfaitement quoi que ce soit est presque impossible indépendammentde la façon dont fonctionne WordPress. Donc Caveat Emptor!

Sur l'enregistrement de la taxonomie personnalisée, ou "Pourquoi ne sauvera-t-il pas?"

Bien que cela ne soit pas directement lié à la question de savoir si vous êtes un débutant en train d'essayer des taxonomies personnalisées, (ou un développeur expérimenté qui ne prête pas attention à ce qui m'est arrivé quand j'ai écrit ça!), Il est probable que vous essayiez ajouter register_taxonomy() comme le code que vous voyez dans la question directement dans le fichier functions.php de votre thème.

Si vous ajoutez le code directement dans functions.php, votre métabox s'affichera, mais les termes que vous venez d'ajouter ne seront pas sauvegardés (et sous la forme 'heirarchical'=>true de la métabox, vos termes existants ne seront pas chargés avec des cases à cocher.) C'est parce que vous devez vous enregistrer taxonomies (et types de publication personnalisés) à l'intérieur d'un crochet init, comme ceci:

<?php
add_action('init','register_movie_genre_taxonomy');
  function register_movie_genre_taxonomy() {
    register_taxonomy('movie-genre', 'movie', array(
      'hierarchical'    => true,
      'label'           => 'Movie Genre',
      'query_var'       => 'movie-genre',
      'rewrite'         => array('slug' => 'genres' ),
    ));
}

J'espère que cela t'aides!

40
MikeSchinkel