web-dev-qa-db-ja.com

階層分類法と非階層分類法の違いは?

問題は "階層型分類法と非階層型分類法の違いは何ですか?" この質問は最初は本当に私を困惑させたので、私はそれが区別を探しているサイトをサーフィンしている他の人に違いを示すのは良い考えであると考えました。

具体的には、register_taxonomy()関数に渡されるhierarchical引数についての質問です。より具体的には、これの違いは何ですか:

'hierarchy' => false

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

この?

'hierarchy' => true

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

注私は先に進んで私自身の質問に答えるつもりですが、他に誰も本当に良い答えも出てこない限り、それを最高とマークしません。また、私の直感は、2つの二分法の間のすべての違いを捉えていない可能性があることを示しています。そうでない場合は、見逃したことをお知らせください。

33
MikeSchinkel

単純な答えは、階層的分類法の用語は子用語を持つことができます。しかし、他に何が?

'hierarchical' => false

'hierarchical'=>falseを指定すると、WordPressがPost Tagsにも使用するメタボックス形式である次のタイプのメタボックスを取得します。

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

'hierarchical' => true

ただし、'hierarchical'=>trueを指定すると、WordPressがCategoriesにも使用するメタボックス形式である次のタイプのメタボックスを取得します。

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

もちろん、上記の例では、実際のサブカテゴリは多くの親カテゴリに適用されることが多いため、階層的なカテゴリ化が少し混ざり合っている場合があることも指摘しています。たとえそうであっても"多くの親"はWordPressで階層分類法が機能する方法ではありませんが、IMOを完全に分類することはほとんど不可能ですに関係なく WordPress動作します。 警告Emptor!

カスタム分類登録、または「なぜ保存しないのですか?」

カスタムタクソノミーを試している初心者の場合、質問とは直接関係ありませんが(またはこの記事を書いたときに私に起こったような注意を払っていない経験豊富な開発者!) '質問に表示されるコードのような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' ),
    ));
}

お役に立てれば!

41
MikeSchinkel