問題描述
問題是 「分層與 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。

