WordPress 瞭解和創建自定義分類法(Taxonomies)
本文將告訴你什麼是 WordPress 自定義分類法(Taxonomies),並且教會你怎麼使用它。
我們首先將討論自定義分類法是什麼,以及有什麼用和重要性。
之後將告訴你怎麼創建一個自定義分類法,然後怎麼把它變得越來越強大。
到最後,你將掌握自定義分類法怎麼使用,而且還會把它利用在你的網站、主題或插件上邊。
什麼是分類法?
分類法,簡單來說就是對具有一定相同特徵的項目的分組。
WordPress 默認的文章提供了兩種分類法,分別爲:
這兩種分類法可以幫助你給你的文章進行分類和分組,這樣對網站主來說可以讓網站邏輯更加清晰,而且更加利於 SEO 的優化;對於網站的讀者而言,可以幫他們更快的熟悉網站,迅速找到仔細需要的內容。
分類和標籤都是自帶的分類法,同時,你也可以創建自己的自定義分類法,來滿足你的需要。
管理分類和標籤
WordPress 自帶的分類和標籤分類法都位於後臺菜單 “文章” 的子級:
進入到分類和標籤的管理界面,都類似於下圖:
添加分類和標籤到文章上
給文章添加一個分類或者標籤最簡單的方法就是通過文章編輯器。
當你在使用文章編輯器的時候,會發現下邊有兩個板塊叫做 “分類目錄” 和 “標籤”,用這兩個板塊就可以給文章設置分類和添加標籤。
創建自定義分類法
雖然內置的分類和標籤可以幫你分類和組織文章,但是每個網站的需求都不盡相同,有的時候你往往需要更多的分類法,特別是自定義文章類型。
創建自定義分類法的函數
創建一個自定義分類法需要使用 register_taxonomy() 函數,這個函數接收 3 個參數:
1 |
register_taxonomy($taxonomy,$object_type,$args); |
參數的簡單介紹如下:
- $taxonomy:分類法的名稱。這個名稱不應包含中文,因爲它不是給用戶看的,而是類似於 ID 的作用
- $object_type:分類法用於哪些文章類型。WordPress 的文章(post)默認已經有了兩個分類法(分類和標籤),你可以把這個分類法用於自帶的文章類型(post、page、attachment、revision 和 nav_menu_item)和自定義文章類型,有三種填法:
- 只用於一個文章類型,列如:$object_type = ‘post’
- 用於多個文章類型,例如:$object_type = array( ‘post’, ‘page’ )
- 不應用給任何文章類型,例如:$object_type = null
- $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