MikeSchinkel
  • 0
Гуру

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

  • 0

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

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

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

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

    • 0
    • Иерархическая таксономия — это то же самое, что и пользовательская категория? И является ли неиерархическая таксономия тем же самым, что и пользовательский тег?

      • 0
    • @ravensfan55222 — Не совсем, но почти. Вместо того, чтобы «иерархическая таксономия» была такой же, как пользовательская категория, встроенная система классификации категорий является лишь одной из многих потенциальных иерархических таксономий. Точно так же (Post) теги — это всего лишь один пример неиерархической таксономии. Точнее, «иерархический» — это всего лишь атрибут таксономии, подобно тому, как метка — это просто атрибут таксономии или цвет — это атрибут автомобиля. Возможно, вы имели в виду это, но я хотел уточнить, если нет.

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

    ‘иерархический’ => ложь

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

    Метабокс термина таксономии на экране редактирования поста, когда $hierarchical==false

    ‘иерархический’ => истина

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

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

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

    • 0

Оставить ответ

You must login to add an answer.