為什麼要給 WordPress 註冊預設文章之外的自定義的文章型別?比如本站,「教程」 是按一般的部落格文章形式來顯示的,但是還有個 「主題類」 的文章,得用另一種顯示形式,這樣用普通的方法恐怕很難實現,所以需要另外註冊一種文章型別,wp 對每種文章型別可以用單獨的模板來顯示,這樣就可以很方便實現我們要的效果了。

不過自定義文章型別的實際用途不僅僅侷限於此,比如我就看到過有專門註冊一個自定義文章型別只是用來給主題首頁一個圖片切換 banner 新增圖片等設定資訊的。。

看了前一篇文章,我想建立一個自定義文章型別 (custom post type) 使用的函式已經很明瞭了。

  1. <?php   
  2. register_post_type( $post_type$args );   
  3. //$post_type-必需, 文章型別的名稱   
  4. //args-可選,一個配置陣列   
  5. ?>  

對於 args 陣列,比較重要,引數比較多,詳細說明如下:

label - (字串, 可選, 不重要) 預設和 $post_type 一樣
labels - (陣列, 可選) 用來配置文章型別顯示在後臺的一些描述性文字。預設為空。

  • 'name' - 文章型別的名稱,這個可以用中文 (一般為複數,對於中文而言就無複數之說了) 。
  • 'singular_name'-單篇文章物件的名稱,(對於英文而言就是 name 的單數),預設為 name 的值
  • 'add_new'-對應於預設文章型別中的 「寫文章」
  • 'add_new_item'-
  • 'edit_item'-編輯
  • 'new_item'
  • 'view_item'
  • 'search_items'
  • 'not_found'
  • 'not_found_in_trash'
  • 'parent_item_colon'
  • 'menu_name'

description-一些簡短的介紹文字

public-(布林值),用於定義 publicly_queriable, show_ui, show_in_nav_menus and exclude_from_search 的值

publicly_queryable- (布林值) 可以從前臺獲取的變數 (從 url 中,比如 url 重寫)

exclude_from_search - (布林值),是否能夠被搜尋到

show_ui -  (布林值) 是否生成一個預設的管理頁面,也就是是否在後臺有管理頁面。預設跟 public 的是一樣

show_in_menu -  是否在後臺選單項中顯示,如果為 ture, 那麼 show_ui 的值也必須設定為 true, 將會有一個頂級選單項。還可以為一個字串,類似'tools.php' 或者'edit.php?post_type=page'

menu_position - 在後臺選單中的位置。

menu_icon - 選單的 icon 圖示 (一個 url) 。

capability_type - 檢視、編輯、刪除的能力型別 (capability),預設為 post

capabilities - (陣列,一般人用不到)

map_meta_cap - (布林值),只有設定了 capabilities 才用的上

hierarchical - (布林值),文章是否有層級關係,也就是是否允許有父級文章。

supports - (陣列),對文章型別的一些功能支援

  • 'title'-標題
  • 'editor' (content) - 內容編輯器
  • 'author' - 作者
  • 'thumbnail' - 特色影像,主題還得支援特色影像才行
  • 'excerpt' - 摘要
  • 'trackbacks'
  • 'custom-fields'-自定義欄位
  • 'comments' - 評論
  • 'revisions' - 修訂版
  • 'page-attributes' - 頁面屬性,類似 page,選擇頁面模板的那個

register_meta_box_cb - 當執行 remove_meta_box() 和 add_meta_box() 時呼叫的函式

taxonomies - 新增已經註冊了的分類法 (比如預設的分類、標籤)

permalink_epmask

has_archive - 文章是否有歸檔,就是一個所有文章歸檔頁面。

rewrite - (布林值或者陣列),是否有 url 重寫,設定為 false 的話將會防止 url 重寫,關於重寫以後教程詳細講解。

query_var - url 重寫會用到

can_export - 是否輸出

show_in_nav_menus - 是否出現在設定選單頁面的選項中

_builtin - WordPress 開發人員建議你不要使用這個引數哦。

_edit_link -  WordPress 開發人員建議你不要使用這個引數哦

說實話,上面引數這樣列出來,我自己看了都不能很清楚的說明每個引數具體效果是什麼,那麼下面透過一個簡單的例項來使用說明一下上面部分引數的實際效果,我們還是使用 WordPress 的預設主題,twentyten 來測試,在 twentyten 主題資料夾下新建一個 post-type.php 檔案,然後在 functions.php 檔案的最後面新增程式碼:

  1. include_once('post-type.php');  

在 post-type.php 中我們就可以新增註冊文章型別的程式碼了,post-type.php 中新增如下程式碼:

  1. <?php   
  2. add_action('init', 'my_custom_init');   
  3. function my_custom_init()    
  4. {   
  5.   $labels = array(   
  6.     'name' => '書本 name',   
  7.     'singular_name' => '書本 singularname',   
  8.     'add_new' => 'Add_new',   
  9.     'add_new_item' => 'add_new_item',   
  10.     'edit_item' => 'edit_item',   
  11.     'new_item' => 'new_item',   
  12.     'view_item' => 'view_item',   
  13.     'search_items' => 'search_items',   
  14.     'not_found' =>  'not_found',   
  15.     'not_found_in_trash' => 'not_found_in_trash',    
  16.     'parent_item_colon' => '',   
  17.     'menu_name' => 'menu_name'   
  18.   
  19.   );   
  20.   $args = array(   
  21.     'labels' => $labels,   
  22.     'public' => true,   
  23.     'publicly_queryable' => true,   
  24.     'show_ui' => true,    
  25.     'show_in_menu' => true,    
  26.     'query_var' => true,   
  27.     'rewrite' => true,   
  28.     'capability_type' => 'post',   
  29.     'has_archive' => true,    
  30.     'hierarchical' => false,   
  31.     'menu_position' => null,   
  32.     'supports' => array('title','editor','author','thumbnail','excerpt','comments')   
  33.   );    
  34.   register_post_type('book',$args);   
  35. }   
  36. ?>  

新增上面的程式碼後,進入後臺,部分效果如圖:

 限於篇幅,這篇文章就到這裡了。。敬請關注接下來的教程。。