В чем разница между Иерархической и Неиерархической таксономиями?


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

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

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

Author: Community, 2010-08-22

1 answers

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

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

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

'иерархический'=>истинный

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

Конечно, приведенный выше пример также указывает на то, что иерархическая категоризация может быть немного смешанной, потому что в реальной жизни подкатегории часто применяются ко многим родительским категориям. Несмотря на это, указание "многих родителей" не является тем, как иерархическая таксономия работает в WordPress, но ИМО, идеально классифицируя что-либо, практически невозможно независимо от того, как работает 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' ),
    ));
}

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

 43
Author: MikeSchinkel, 2020-06-15 08:21:38