本文將告訴你什麼是 WordPress 自定義分類法 (Taxonomies),並且教會你怎麼使用它。

我們首先將討論自定義分類法是什麼,以及有什麼用和重要性。

之後將告訴你怎麼建立一個自定義分類法,然後怎麼把它變得越來越強大。

到最後,你將掌握自定義分類法怎麼使用,而且還會把它利用在你的網站、主題或外掛上邊。

什麼是分類法?

分類法,簡單來說就是對具有一定相同特徵的專案的分組。

WordPress 預設的文章提供了兩種分類法,分別為:

這兩種分類法可以幫助你給你的文章進行分類和分組,這樣對網站主來說可以讓網站邏輯更加清晰,而且更加利於 SEO 的最佳化;對於網站的讀者而言,可以幫他們更快的熟悉網站,迅速找到仔細需要的內容。

分類和標籤都是自帶的分類法,同時,你也可以建立自己的自定義分類法,來滿足你的需要。

管理分類和標籤

WordPress 自帶的分類和標籤分類法都位於後臺選單 「文章」 的子級:

進入到分類和標籤的管理介面,都類似於下圖:

新增分類和標籤到文章上

給文章新增一個分類或者標籤最簡單的方法就是透過文章編輯器。

當你在使用文章編輯器的時候,會發現下邊有兩個板塊叫做 「分類目錄」 和 「標籤」,用這兩個板塊就可以給文章設定分類和新增標籤。

建立自定義分類法

雖然內建的分類和標籤可以幫你分類和組織文章,但是每個網站的需求都不盡相同,有的時候你往往需要更多的分類法,特別是自定義文章型別。

建立自定義分類法的函式

建立一個自定義分類法需要使用 register_taxonomy() 函式,這個函式接收 3 個引數:

1

register_taxonomy($taxonomy,$object_type,$args);

引數的簡單介紹如下:

  1. $taxonomy:分類法的名稱。這個名稱不應包含中文,因為它不是給使用者看的,而是類似於 ID 的作用
  2. $object_type:分類法用於哪些文章型別。 WordPress 的文章 (post) 預設已經有了兩個分類法 (分類和標籤),你可以把這個分類法用於自帶的文章型別 (post 、 page 、 attachment 、 revision 和 nav_menu_item) 和自定義文章型別,有三種填法:
    • 只用於一個文章型別,列如:$object_type = 'post'
    • 用於多個文章型別,例如:$object_type = array( 'post', 'page' )
    • 不應用給任何文章型別,例如:$object_type = null
  3. $args:分類法的細節設定,是一個陣列,裡邊所有的引數都是選填的 (WordPress 會自動補全缺少的設定),下邊介紹所有可用的引數:
    • label:分類法顯示給使用者的名字,可用使用中文和其它字元
    • labels:顯示給使用者的名詞。這個陣列用來設定顯示給使用者的關鍵文字,如果不填 WordPress 會自動給你設定好,下邊是所有可用引數
      • name:分類法顯示給使用者的名字,可用使用中文和其它字元 (事實上,這個和上邊的 label 引數是一樣的)
      • singular_name:分類法的別名
      • menu_name:分類法在管理後臺選單處顯示的文字
      • all_items:檢視全部條款
      • view_item:瀏覽單個條款
      • update_item:更新條款
      • add_new_item:新建條款
      • parent_item:父級條款
      • parent_item_colon:同上,但結尾要加冒號
      • search_items:搜尋條款
      • popular_items:熱門條款
      • separate_items_with_commas:多個條款的提示
      • add_or_remove_items:刪除和新增條款的提示,只在停用 JavaScript 的時候顯示
      • choose_from_most_used:「從常用的條款中選擇」 的文字提示
      • not_found:沒有條款的提示
    • public:是否公開,如果公開會生成前臺存檔頁面
    • show_ui:是否在後臺的側邊管理選單顯示
    • show_in_nav_menus:是否在選單頁面裡新增一個條款
    • show_tagcloud:分類法是否顯示標籤雲的部件
    • meta_box_cb:顯示在文章編輯器的分類法選擇板塊是什麼形式
    • show_admin_column:是否顯示在後臺文章列表的資料列上
    • hierarchical:顯示在文章編輯器的分類法選擇板塊是什麼形式。設定成 True 則為分類形式 (多選框),False 則為標籤形式 (文字框和新增按鈕)
    • update_count_callback:分類法發生變化時的回撥函式
    • query_var:查詢存檔頁面的關鍵字,預設是分類法名 (ID) 。最好保持預設
    • rewrite:偽靜態規則。設定成 False 將停用偽靜態;還可以設定一些元素,比如 「slug」
    • capabilities:分類法許可權設定。最好保持預設
    • sort:查詢分類法文章時的排序
    • _builtin:這是內建的分類法還是自定義分類法。最好保持預設或設定成 False 。這個引數只有 WordPress 核心才有用

注意,第一個引數 $taxonomy 因為文章查詢的關係,有一些保留關鍵詞,也就是說不能用以下的詞來做 $taxonomy,否則會衝突:

  • attachment
  • attachment_id
  • author
  • author_name
  • calendar
  • cat
  • category
  • category__and
  • category__in
  • category__not_in
  • category_name
  • comments_per_page
  • comments_popup
  • customize_messenger_channel
  • customized
  • cpage
  • day
  • debug
  • error
  • exact
  • feed
  • hour
  • link_category
  • m
  • minute
  • monthnum
  • more
  • name
  • nav_menu
  • nonce
  • nopaging
  • offset
  • order
  • orderby
  • p
  • page
  • page_id
  • paged
  • pagename
  • pb
  • perm
  • post
  • post__in
  • post__not_in
  • post_format
  • post_mime_type
  • post_status
  • post_tag
  • post_type
  • posts
  • posts_per_archive_page
  • posts_per_page
  • preview
  • robots
  • s
  • search
  • second
  • sentence
  • showposts
  • static
  • subpost
  • subpost_id
  • tag
  • tag__and
  • tag__in
  • tag__not_in
  • tag_id
  • tag_slug__and
  • tag_slug__in
  • taxonomy
  • tb
  • term
  • theme
  • type
  • w
  • withcomments
  • withoutcomments
  • year

如果想更詳細的瞭解 register_taxonomy() 函式,可以檢視它的官方檔案。

建立第一個自定義分類法

上邊正如你所看到的,有很多的選項,可以讓你調整自定義分類法。

雖然選項那麼多,但我還是建議大多數的設定最好保持預設。

下邊我將演示如何建立一個自定義分類法。下邊我拿一個電影分享網站做演示,建立一個名為電影國家的自定義分類法給預設已經存在的文章文章型別。

建立一個簡單的自定義分類法需要使用 register_taxonomy() 函式,在使用的時候需要掛到 init 鉤子上,否則可能會出現一些錯誤。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

//建立一個操作函式,用來註冊自定義分類法

functionBing_register_custom_taxonomy(){

    //自定義分類法名

    $name='country';

    //自定義分類法的文章型別

    $post_type='post';

    //設定關鍵文字

    $labels=array(

        'name'                  =>'電影國家',

        'singular_name'         =>'country',

        'search_items'          =>'搜尋國家',

        'popular_items'         =>'熱門國家',

        'all_items'             =>'全部國家',

        'parent_item'           =>'父級國家',

        'parent_item_colon'     =>'父級國家:',

        'edit_item'             =>'編輯國家',

        'update_item'           =>'更新國家',

        'add_new_item'          =>'新建國家',

        'new_item_name'         =>'國家名稱',

        'add_or_remove_items'   =>'新增或刪除國家',

        'choose_from_most_used'=>'從經常使用的國家中選擇',

        'menu_name'             =>'國家'

    );

    //詳細配置自定義分類法

    $args=array(

        'labels'            =>$labels,

        'public'            =>true,

        'show_in_nav_menus'=>true,

        'hierarchical'      =>true,

        'show_ui'           =>true,

        'query_var'         =>true,

        'rewrite'           =>true,

        'show_admin_column'=>true

    );

    //使用 register_taxonomy() 函式註冊自定義分類法

    register_taxonomy($name,$post_type,$args);

}

add_action('init','Bing_register_custom_taxonomy');//必須把操作函式掛載到 init 鉤子上

執行上邊的程式碼,就能看到後臺側邊管理選單的 「文章」 下出現了一個 「國家」,點選這個 「國家」 選單,就能進入到我們建立的自定義分類法的管理介面了。

分類法的管理介面像 「分類」 還是 「標籤」 取決於你的 hierarchical 引數,下邊是我們建立的 「電影國家」 分類法。

建立你的條款

現在你已經可以在你建立的自定義分類法裡建立條款了。

我已經建立了幾個條款:

給文章新增條款

接下來你就可以給相應的文章新增條款了,只需要進入到文章編輯器,然後使用下邊自動生成的板塊:

自定義分類法開發

一旦你建立自定義分類法,並把文章新增到裡邊,你可能會需要更改主題或外掛,來利用這個分類法。

WordPress 的自定義分類法功能是非常強大的,其中就包括利用它進行擴充套件,所以,可以用很多方面的東西來定製自定義分類法。

單獨的存檔頁

WordPress 預設的存檔頁模板是主題根目錄的 archive.php 檔案,所以,自定義分類法的存檔頁面預設也會呼叫這個檔案。

比 archive.php 優先順序高的是叫做 taxonomy.php 的檔案,如果存在 taxonomy.php 會優先使用,這個 taxonomy.php 只對自定義分類法有用,自帶的分類法不會呼叫 taxonomy.php 檔案。

如果你想給建立的自定義分類法設定一個單獨的存檔模板檔案的話,可以使用 taxonomy-{$taxonomy}.php 檔案 ({$taxonomy} 為分類法的名稱),比如我放的 taxonomy-country.php,在你訪問 「電影國家」 分類法的存檔頁時,就會使用這個檔案作為模板。

文章列表顯示自定義分類法

正如在文章列表顯示文章的分類和標籤一樣,很多時候會需要在文章列表顯示自定義分類法,下邊我用上邊建立的 「電影國家」 自定義分類法來演示一下。

首先開啟你的 functions.php(瞭解更多),然後在裡邊新增下邊的程式碼:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

//封裝一個獲取電影國家的函式

functionBing_the_country($post_ID=false){

    //如果不設定 ID 則預設為迴圈中的當前文章

    if($post_ID===false)$post_ID=get_the_ID();

    //獲取到這個文章有關電影國家分類法的資訊

    $terms=get_the_terms($post_ID,'country');

    //如果文章有新增相關分類法則輸出

    if(!empty($terms)){

        echo'<p > 電影國家:';

            //迴圈輸出

            foreach($termsas$term){

                //獲取分類法專案的名字

                $name=$term->name;

                //獲取連結

                $link=esc_url(get_term_link($term,'country'));

                //輸出一個分類法專案

                echo"<span ><a href='$link'>$name</a></span>";

            }

        echo'</p>';

    }

}

然後在文章迴圈裡呼叫上邊的函式:

1

<?phpBing_the_country();?>

這樣,在前臺的文章列表處,就能顯示當前介紹的電影來自哪個國家了 (請自動忽略截圖不重要的地方):

上邊的程式碼我使用了 get_the_terms() 函式來呼叫某篇文章裡關於 「電影國家」 分類法的資訊,然後把他迴圈輸出出來。

在迴圈的過程中,我還使用了 get_term_link() 函式來呼叫分類法的存檔頁連結。

其它

關於自定義分類法的用法和函式還有很多,這裡無法一一介紹完,還需要你自己去研究。如果可能,你最好去閱讀 wp-includes/category-template.php 和 wp-includes/taxonomy.php 這兩個檔案的程式碼,這樣你對分類法的用法和原理都會有 一些瞭解。

總結

利用自定義分類法可以輕鬆的歸納網站文章,還能擴充套件自定義文章型別的功能。

本文只是簡單的介紹了自定義分類法的用途和用法,更多的可以檢視本站的自定義分類法標籤:https://www.weixiaoduo.com/tag/taxonomy