it-swarm.cn

分层和非分层分类法之间的区别?

问题是 “分层和非分层分类法之间有什么区别?” 这个问题一开始真的让我很难过,所以我认为向其他人浏览网站寻找区别是不错的。

具体来说,问题是指传递给register_taxonomy()函数的hierarchical参数。更具体地说,这有什么区别:

'hierarchical'=> false

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

还有这个?

'hierarchical'=> true

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如何工作。所以Caveat 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' ),
    ));
}

希望这可以帮助!

40
MikeSchinkel