為什麼要給 WordPress 註冊默認文章之外的自定義的文章類型?比如本站,「教程」 是按一般的博客文章形式來顯示的,但是還有個 「主題類」 的文章,得用另一種顯示形式,這樣用普通的方法恐怕很難實現,所以需要另外註冊一種文章類型,wp 對每種文章類型可以用單獨的模板來顯示,這樣就可以很方便實現我們要的效果了。
不過自定義文章類型的實際用途不僅僅侷限於此,比如我就看到過有專門註冊一個自定義文章類型只是用來給主題首頁一個圖片切換 banner 添加圖片等設置信息的。。
看了前一篇文章,我想創建一個自定義文章類型 (custom post type) 使用的函數已經很明瞭了。
- <?php
- register_post_type( $post_type, $args );
- //$post_type-必需, 文章類型的名稱
- //args-可選,一個配置數組
- ?>
對於 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 文件的最後面添加代碼:
- include_once('post-type.php');
在 post-type.php 中我們就可以添加註冊文章類型的代碼了,post-type.php 中添加如下代碼:
- <?php
- add_action('init', 'my_custom_init');
- function my_custom_init()
- {
- $labels = array(
- 'name' => '書本 name',
- 'singular_name' => '書本 singularname',
- 'add_new' => 'Add_new',
- 'add_new_item' => 'add_new_item',
- 'edit_item' => 'edit_item',
- 'new_item' => 'new_item',
- 'view_item' => 'view_item',
- 'search_items' => 'search_items',
- 'not_found' => 'not_found',
- 'not_found_in_trash' => 'not_found_in_trash',
- 'parent_item_colon' => '',
- 'menu_name' => 'menu_name'
- );
- $args = array(
- 'labels' => $labels,
- 'public' => true,
- 'publicly_queryable' => true,
- 'show_ui' => true,
- 'show_in_menu' => true,
- 'query_var' => true,
- 'rewrite' => true,
- 'capability_type' => 'post',
- 'has_archive' => true,
- 'hierarchical' => false,
- 'menu_position' => null,
- 'supports' => array('title','editor','author','thumbnail','excerpt','comments')
- );
- register_post_type('book',$args);
- }
- ?>
添加上面的代碼後,進入後台,部分效果如圖:

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