it-swarm-ru.tech

Разница между иерархической и неиерархической таксономией?

Вопрос "В чем разница между иерархической и неиерархической таксономией?" Сначала этот вопрос действительно озадачил меня, поэтому я подумал, что было бы неплохо показать разницу тем, кто просматривает сайт в поисках различия.

В частности, вопрос относится к аргументу hierarchical, переданному в функцию register_taxonomy(). Более конкретно, в чем разница между этим:

'иерархический' => ложный

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

И это?

'иерархический' => правда

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

Заметьте, я собираюсь ответить и на свой вопрос, но не буду отмечать его как лучший, если никто не придет с действительно хорошим ответом. Кроме того, мое внутреннее чувство говорит мне, что я, возможно, не уловил все различия между этими двумя дихотомиями, поэтому, если нет, сообщите нам, что я пропустил.

33
MikeSchinkel

простой ответ заключается в том, что термины в иерархических таксономиях могут иметь дочерние термины . А что еще?

"Иерархического" => ложным

При указании 'hierarchical'=>false вы получаете следующий тип метабокса, который является форматом метабокса, который WordPress также использует для Опубликовать теги:

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

"Иерархического" => верно

Однако при указании 'hierarchical'=>true вы получаете следующий тип метабокса - формат метабокса, который WordPress также использует для Categories:

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

Конечно, приведенный выше пример также указывает, где иерархическая категоризация может быть немного смешанной, потому что в реальной жизни подкатегории часто применяются ко многим родительским категориям. Даже при том, что упускать "много родителей" не то, как иерархические таксономии работают в WordPress, но IMO категоризировать что-либо совершенно практически невозможно независимо того, как работает WordPress. Так Будьте бдительны!

О регистрации пользовательской таксономии, или "Почему не сохранить?"

Хотя это не имеет прямого отношения к вопросу о том, являетесь ли вы новичком, пробующим пользовательские таксономии, (или опытный разработчик, который не обращает внимания, как это случилось со мной, когда я писал это!), Вероятно, вы ' Попробуем добавить register_taxonomy(), подобный коду, который вы видите в вопросе, прямо в файл functions.php вашей темы. К сожалению!

Если вы добавите код непосредственно в functions.php, ваш метабокс будет отображаться, но он не сохранит вновь добавленные вами термины (и в форме 'heirarchical'=>true метабокса ваши существующие термины не будут загружаться с флажками.) Это потому, что вам нужно зарегистрировать пользовательский таксономии (и пользовательские типы записей) внутри хука init, например:

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

Надеюсь это поможет!

40
MikeSchinkel