問題描述

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