问题描述

问题是 「分层与 Non-Hierarchical 分类法有什么区别?」 这个问题真的让我失望了,所以我想这是一个很好的主意,显示与浏览网站的其他人寻找区别的差异。

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

‘hierarchical’ => 假

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

和这个?

‘hierarchical’ => 真正

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

注意我要继续回答我自己的问题,但不会将其标记为最佳,除非没有人能够提出一个非常好的答案。我的直觉也告诉我,我可能没有抓住两个二分法之间的所有区别,所以如果不是,请让我们知道我错过了什么。

最佳解决方案

简单的答案是分层分类法中的术语可以有子条款。但还有什么?

‘hierarchical’ => 假

当您指定'hierarchical'=>false 时,您会得到以下类型的 metabox,这是 MetBox 格式,WordPress 还用于发布标签:

‘hierarchical’ => 真

但是当您指定'hierarchical'=>true 时,您将得到以下类型的 metabox,它是 MetBox 格式,WordPress 也用于类别:

当然,上面的例子也指出,层次分类可以是一个混合的包,因为在现实生活中的子类通常适用于许多父类。即使如此,”many parents” 不是层次分类法在 WordPress 中的工作,而是对 WordPress 的工作原理几乎是不可能的。所以 Caveat Emptor!

关于定制分类注册,还是 「为什么不保存?」

虽然没有直接关系到这个问题,如果你是一个新手尝试自定义分类法 (或一个有经验的开发人员,不注意像我这样写的时候发生的事情!) 很可能你会尝试添加 register_taxonomy()像在问题中直接看到您的主题的 functions.php 文件中的代码。哎呀!

如果您直接将代码添加到 functions.php 中,您的 metabox 将显示,但不会保存新添加的术语 (并且在'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' ),
    ));
}

希望这可以帮助!

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。