问题描述
问题是 「分层与 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。