客製化WordPress文章類型, Custom Post Type
WordPress 是個開源、資源豐富且使用社群龐大的內容管理系統(CMS)。WordPress 在預設只有兩種版型:頁面(Page)和文章(Post),但網站大多擁有一種以上的文章類型,如果能在事前做好設定、在事後的內容呈現和管理上都會相對順暢。
對於 php 或寫程式不熟悉的使用者,選用第三方的外掛會是一個快速簡單的方式。但因為是第三方製作的外掛、在功能上和安全性上都會有他的限制和顧慮。另一種方式是寫在佈景主題(Theme)的 function.php裡,而佈景主題主要負責呈現使用者的資訊、有許多相對嚴謹的資訊需要遵守。
這篇文章會介紹如何寫一個 Must Use Plugins 來新增文章類型。
mu-plugins 新增文章類型 #
用 Plugins 客製化網站有許多好處,譬如未來需要在不同的網站或佈景主題新增文章類型、可以直接複製再利用,客製化的內容集中在一個地方也相對好管理。
Must-use Plugin(mu-plugin)是預設自動啟用外掛的意思。啟用 mu-plugin 的方法很簡單,只需要在「wp-content」內新增「mu-plugins」的資料夾、Wordpress 在載入的時候就會自動啟動、也無法被取消使用。
register_post_type 註冊新文章類型 #
新增文章類型時,會使用 WordPress 的 [register_post_type()](http://codex.wordpress.org/Function_Reference/register_post_type)
功能,透過 WordPress API 和 hooks 幫助我們客製化網站。
在「mu-plugins」資料夾內新增php檔案,寫一個 function 來定義 [register_post_type()](http://codex.wordpress.org/Function_Reference/register_post_type)
並在最後 [add_action()](http://codex.wordpress.org/Function_Reference/register_post_type)
來執行這個機能。除此之外,啟用客製化文章類型的主要變數為以下幾個:
function event_post_types(){
register_post_type('event', array(
'rewrite' => array('slug' => 'events'),
'show_in_rest' => true,
'show_in_nav_menus' => true,
'public' => true,
));
}
add_action('init', 'event_post_types');
- slug:www.domain.com/slug,文章類型在網址列的名稱
- show_in_rest:可被 REST API 存取
- show_in_nav_menus:是否顯示在後台選單
- public:文章類型是否公開給後台或是前端使用者
客製化類型的功能和外觀文字等 #
若想對新增的文章類型進行機能上和顯示上的客製化,可以做以下的設定調整:
function event_post_types(){
register_post_type('event', array(
'rewrite' => array('slug' => 'events'),
'show_in_rest' => true,
'show_in_nav_menus' => true,
'public' => true,
'has_archive' => true,
'supports' => array('title', 'author', 'page-attributes', 'editor', 'excerpt', 'thumbnail', 'custom-fields'),
'menu_icon' => 'dashicons-calendar-alt',
'menu_position' => 5,
'labels' => array(
'name' => '工會活動',
'add_new' => '新增活動',
'add_new_item' => '新增活動',
'edit_item' => '編輯活動',
'all_items' => '全部活動',
'singular_name' => '活動'
),
));
}
add_action('init', 'event_post_types');
- has_archive:是否啟用文章彙整功能
- supports:在文章編輯畫面中支援的選項,標題、作者等
- menu_icon:使用 WordPress dashicons 來客製化圖示
- menu_position:在後台選單中的排列位置
- labels:客製化文章類型的顯示文字
為什麼需要客製化文章類型 #
在架設 WordPress 網站時,我們時常會被單一文章類型所限制。尤其當擁有一定的文章數量和內容時更容易讓整個網站被無止盡的「分類層級」和「頁面層級」堆滿。客製化文章能幫助我們在整理文章層級、permalinks 固定連結時更簡單省事。
個人覺得 mu-plugins 是個能快速簡易新增文章類型的方式,適合對程式語言有些許了解的人跳戰嘗試。之前在面試工作的時候,技術性面試官也有問到這方面的問題。根據結論判斷,嘗試用 hooks 客製化網站主題和外掛對於求職也是滿有幫助的。