it-swarm-es.com

¿La diferencia entre taxonomías jerárquicas y no jerárquicas?

La pregunta es "¿Cuál es la diferencia entre taxonomías jerárquicas y no jerárquicas?" Esta pregunta realmente me dejó perplejo al principio, así que pensé que sería una buena idea mostrar la diferencia a otros que navegan en el sitio buscando la distinción.

Específicamente, la pregunta se refiere al argumento hierarchical pasado a la función register_taxonomy(). Más específicamente, ¿cuál es la diferencia entre esto?

'jerárquico' => falso

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

¿Y esto?

'hierarchical' => true

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

Tenga en cuenta que voy a seguir adelante y responder a mi propia pregunta, pero no la marcaré mejor a menos que nadie más responda con una buena respuesta también. Además, mi intuición me dice que podría no haber capturado todas las distinciones entre las dos dicotomías, por lo que, de no ser así, háganos saber lo que me perdí.

33
MikeSchinkel

La respuesta simple es que los términos en taxonomías jerárquicas pueden tener términos secundarios. Pero que mas

'jerárquico' => falso

Cuando especifica un 'hierarchical'=>false, obtiene el siguiente tipo de metabox, que es el formato de metabox que WordPress también usa para Publicar etiquetas :

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

'hierarchical' => true

Sin embargo, cuando especifica 'hierarchical'=>true, obtiene el siguiente tipo de metabox, que es el formato de metabox que WordPress también usa para Categorías :

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

Por supuesto, el ejemplo anterior también señala donde la categorización jerárquica puede ser un poco de una bolsa mixta porque en las subcategorías de la vida real a menudo se aplican a muchas categorías principales. Aun así, permitir "muchos padres" no es cómo funcionan las taxonomías jerárquicas en WordPress, pero IMO categorizar cualquier cosa a la perfección es casi imposible independientemente de cómo funciona WordPress. Entonces Caveat Emptor!

En el registro personalizado de taxonomía, o "¿Por qué no se guarda?"

Si bien no está directamente relacionado con la pregunta si usted es un novato que está probando taxonomías personalizadas, ( o un desarrollador experimentado que no me está prestando atención, como me pasó a mí cuando escribí esto! ) es probable que usted ' Intentaré agregar register_taxonomy() como el código que ve en la pregunta directamente en el archivo functions.php de su tema. ¡Uy!

Si agrega el código directamente en functions.php, su metabox se mostrará, pero no guardará los términos recién agregados (y en la forma 'heirarchical'=>true del metabox, los términos existentes no se cargarán con las casillas de verificación). taxonomías (y tipos de publicaciones personalizadas) dentro de un gancho init, así:

<?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' ),
    ));
}

¡Espero que esto ayude!

40
MikeSchinkel