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

34

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

В частности, вопрос касается 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' ),
));

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

MikeSchinkel
источник
Можете ли вы также объяснить, что иерархически к чему? Является ли таксономическая группа иерархической по отношению к типу поста? Или индивидуальная таксономия иерархична таксономической группе? Я просто сбит с толку словом иерархии, я думаю. Спасибо.
Дэйв

Ответы:

42

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

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

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

Metabox термина таксономии на экране постредактирования, когда $ иерархический == false

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

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

Metabox термина таксономии на экране постредактирования, когда $ иерархический == 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' ),
    ));
}

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

MikeSchinkel
источник
Является ли иерархическая таксономия тем же, что и пользовательская категория? И является ли неиерархическая таксономия тем же, что и пользовательский тег?
Даниил
1
@ ravensfan55222 - Не совсем, но почти. Вместо того, чтобы «иерархическая таксономия» была такой же, как пользовательская категория, встроенная система классификации категорий является лишь одной из многих потенциальных иерархических таксономий. Точно так же (Post) теги являются лишь одним примером неиерархической таксономии. Точнее, «иерархический» - это просто атрибут таксономии, например, как метка является просто атрибутом таксономии, а цвет - атрибутом автомобиля. Возможно, это то, что вы имели в виду, но я хотел бы уточнить, если нет.
MikeSchinkel