自定義文章類別 Custom Post Type

WordPress 現在已經是一套CMS(內容管理系統)的程式。而不是早期單純的部落格使用的。
自然就會有很多的自定義的功能可以使用。
在這邊要介紹的一個是,自定義文章類別,用英文說的話是 Custom Post Type。

這功能通常是不單單將 WordPress 當做部落格使用的人才會使用到的功能。
一般的文章與頁面兩種類型,在搭配文章格式下去使用,其實就已經足夠於絕大多數的部落格與企業形象網站的需求。不過有時候就是會希望做一些不一樣的東西出來。或是進行很不一樣的二度開發,這時候就需要更豐富的文章類型才可以滿足我們的需求了。

自定義文章類別,基本上就只需要使用到 register_post_type 這一個函式。
也就只有使用到這一個函示就足夠了。而最好的解釋當然是前往 WordPress codex 觀看啦!
對於某些人可能感覺到友善的程度不夠好,所以這就分享一下我研究與使用的心得啦!
廢言結束,進入主題。

首先,自要使用定義的文章類別的功能。請將你的定義插入 init 這一個 action API 註1之中。
整體的語法大至上類似下面這樣,不過實際上還是看你的用途來決定啦!

add_action('init', 'add_custom_posy_type');
function add_custom_posy_type() {
	register_post_type('book', array(
		'labels' => array(
			'name'               => '書籍'
			'all_items'          =>'所有書籍',
			'add_new'            => '新增書籍',
			'add_new_item'       =>'增加一本書籍的資料',
			'edit_item'          => '編輯書籍',
			'view_item'          => '檢視書籍',
			'search_items'       => '搜尋書籍',
			'not_found'          => '沒有找到',
			'not_found_in_trash' => '沒有於回收桶之中找到'
		),
		'description' => '書本資料的專用文章類型',
		'public' => true,
		'exclude_from_search' => false,
		'capabilities' => array(
			'edit_post'          => 'edit_book',
			'read_post'          => 'read',
			'delete_post'        => 'delete_book',
			'edit_posts'         => 'edit_books',
			'edit_others_posts'  => 'edit_other_books',
			'publish_posts'      => 'publish_books',
			'read_private_posts' => 'read_private_books'
		),
		'hierarchical' => false,
		'supports' => array('title', 'editor', 'author', 'thumbnail', 'custom-fields', 'comments', 'page-attributes')
	));
}

register_post_type 需要兩個參數,第一個是文章類別的名稱,只能使用小寫字母與底線,而且不可以於已經註冊的文章類別相同。
而第二個參數就是關於這一個文章類型的詳細設定值啦!
我洋洋灑灑的寫了一大堆,其實我自己實用的時候反而沒有這麼多,不過教學當然要完整一點。

第二個參數的內容。可以分為底下幾個項目:

  1. labels:主要就是於後台功能中用於顯示的名稱,其中name就是其最主要的名稱,用於後台左側的的大項目,其他的就是一堆細節的東西啦!
  2. description:文章類別的描述,實用性不大。
  3. public:是否可以公開文章給一般使用者觀看。
  4. exclude_from_search:是否從搜尋功能中排除,這裡指的搜尋是WP內鍵的搜尋系統,也就是利用 index.php?s=xxx這樣的方式搜尋的情況。
  5. capabilities:權限設定。每一個文章類型又可以細分為
    • edit_post:編輯
    • read_post:閱讀
    • delete_post:刪除
    • edit_posts:編輯
    • edit_others_posts:編輯其他人的
    • publish_posts:發佈
    • read_private_posts:閱讀私密的
    • delete_posts:刪除
    • delete_private_posts:刪除私密的
    • delete_other_posts:刪除其他人的
    • edit_private_posts:編輯私密的
    • edit_published_posts:編輯已發佈的

    不過這之中,結尾有沒有 ‘s’ 的區別在哪裡,小弟我一直搞不是很清楚。
    另外在這裡使用到系統當中沒有的權限項目名稱,並不會自動的幫你建立權限項目,需要自己處理權限項目的建立。
    那就是例外一個議題了,改天再討論。

  6. hierarchical:是否擁有子項目,也就是這一個文章類別是否有上下從屬的關係。
  7. supports:提供的功能。而WP內建有的功能為
    • title:標題
    • editor:編輯,也就是文章內容
    • author:作者
    • thumbnail:特色圖片
    • excerpt:摘要
    • trackbacks:引用
    • custom-fields:自訂欄位
    • comments:討論
    • revisions:版本
    • page-attributes:頁面屬性
    • post-formats:文章格式

當然這麼複雜的功能,是否有外掛可以協助你建立呢?
不過我是實作派的人,而且這功能通常使用的時機是在二次開發的時候,相信要二次開發的人,都會選擇直接於檔案中撰寫的~~
所以外掛就懶的額外去搜尋測試務掛來推薦!

註1:你不知道什麼是 action API,請看我之前的文章讓 外掛 與 WordPress 產生互動,看完你應該就會懂了!

分類: WordPress,標籤: , , , , , 。這篇內容的永久連結

在〈自定義文章類別 Custom Post Type〉中有 1 則留言

  1. hsiao表示:

    搜尋到您的網站,幫助很大啊!

    想請問一下如果我在book裡面已經有很多篇文章了,但忽然想把book改成mybook,這樣子要怎麼設定?

    因為我直接改成register_post_type(‘mybook’, array….了話,他好像是重新開一個mybook,並不是更換名稱..

留言功能已關閉。