1. 程式人生 > >一文說透WordPress的自定義文章類型

一文說透WordPress的自定義文章類型

開發 高級功能 什麽 不一定 聚焦 列表 設計 函數 區分

從 2004 年的 1.0 版本算起,WordPress 在 14 年間已經叠代開發到了 5.x 版。如果說這中間哪個版本是一個質的提升的話,那應該算是 2010 年發布的代號為 Thelonious 的 3.0 版。這個版本發布了很多重要的功能,比如多站點、主題 API 等等,其中一個就是 Custom Post Type(自定義文章類型)。

雖然 WordPress 2.9 版也引入了 register_post_type()函數,但並不是很好用,在 CMS 市場上競爭力並不是很強。3.0 版的 register_post_type()函數變的更好用了,同時這也使得 WordPress 從一個單純的博客管理系統(blogging system)變成一個真正意義上的可以管理各種內容的內容管理系統(CMS)。

什麽是文章類型(Post Type)?

Post Type,字面意思就是“文章類型”或者叫“帖子類型”,其實更準確的說法應該叫“內容類型”,是 WordPress 用來區分不同類型不同用途的內容的一個術語。

Post Type 應該算是一個業務術語,而不能算作一個技術術語。因為從本質上講,它們都是 WordPress 業務數據庫裏同一個數據表 wp_posts 中的數據,數據結構都是一樣的,不同的 Post Type 之間的區別就是在 post_type 這個字段。見下圖:

在 3.0 版本之前 ,WordPress 自帶的默認 Post Type 只有兩種最基本的類型:post 和 page,後來又擴展了如下幾種默認類型:

Post (Post Type: ‘post‘) 文章
Page (Post Type: ‘page‘) 頁面
Attachment (Post Type: ‘attachment‘) 附件
Revision (Post Type: ‘revision‘) 自動保存的文章版本
Navigation Menu (Post Type: ‘nav_menu_item‘) 導航菜單
Custom CSS (Post Type: ‘custom_css‘) 自定義 CSS
Changesets (Post Type: ‘customize_changeset‘) 自定義的設置
User Data Request (Post Type: ‘user_request‘) 用戶請求

Post Type 這個名字非常不友好,很容易讓人誤解和迷惑。Post 這個單詞一般都會被理解成文章,但那些並不是文章(post)的內容(見上面的列表),也被歸入文章類型(Post Type),所以叫做內容類型(content type)或許更準確。雖然都是屬於 Post Type,但不全都是 Post。這中間的差別,舉個例子就能理解了:面包、面條、面粉、面料、面試都是面字頭,但又不全都是面。

什麽是自定義文章類型(Custom Post Type)?

你可以把所有內容都用默認的文章或頁面這兩種類型來編輯和管理,反正都是數據而已,但這樣帶來的問題就是混亂,不好管理。這就好比不管什麽菜都用一種做法,一鍋亂燉,反正裝盤都能吃。不同的菜當然有不同的管理方式和料理方式,甚至不同的餐具。同樣的道理,不同的內容也需要區別對待。所以除了默認的 Post Type 之外,還有一個重要的類型就是 Custom Post Type–自定義文章類型,就是用來滿足內容生產者的不同需求。

那麽自定義文章類型到底可以做什麽用呢?能幹什麽這主要取決於你自己的需求和內容定位,沒有什麽規定,只要你願意,什麽樣的內容都可以定義成一種 type,理論上說,你可以用 Custom Post Type 來幹存任何你想要存的數據。隨便舉幾個例子:

公司信息、項目數據,比如用 WordPress 做一個類似 36kr 的創業項目信息庫
電影、書籍數據,比如用 WordPress 做的電影信息展示網站
產品信息,用 WordPress 做的電商平臺
說明文檔
論壇數據
食譜
設計稿
歌詞
活動
av
僵屍
等等等
總之,自定義文章類型(CPT)就是你的內容和內容存儲方式。不管哪種類型的內容,基本在 WordPress 中都是可以實現的。只要遇到了一些信息你覺得可能用默認的文章或者頁面的形式不好展現,那麽可能你就需要用到自定義文章類型了。

還有一種情形下也可以考慮使用自定義文章類型,當你使用了很多的頁面(page),並給頁面做了父子層級的時候,如果層級超過了十個,那麽多半這些頁面都屬於一種類型了,比如說一個公司能提供多種多樣的 services(服務),都用頁面形式的話也是可以的,但這種場景下,考慮用新建一個自定義文章類型叫做 services(服務)可能會更方便。



或者當你頻繁的使用文章的某一個分類,或者並且為了想要對某些內容的 URL 做一些自定義等等情況下,都可以考慮一下使用自定義文章類型了。

如果你對此不熟悉,那多半可能是因為你沒有這方面的需求,沒有用到而已,現有默認的文章和頁面兩種默認的 Post Type 已經能滿足你的需求了。如果你的網站內容比較特殊,那麽就很有必要好好了解一下自定義文章類型了,很好很強大。

自定義文章類型(Custom Post Type)不是什麽?

WordPress 裏面可以自定義的部分非常多,非常靈活,這也正是 WordPress 的強大之處。這也帶來一個問題就是關於自定義的術語也比較多,初學者會比較容易混淆。下面也稍微解釋一下它們之間的區別。

自定義文章類型(Custom Post Type)不是普通意義上的文章(post),上面已經說過了。
自定義文章類型(Custom Post Type)也不是自定義字段(custom fields)的替代品。實際上自定義字段是作為內容的一部分或補充相關功能,比如一個內容類型為電影的自定義字段可以有很多:導演、演員、風格、海報等等等。這方面的插件就是之前介紹過的Meta Box和Advanced Custom Fields 、Code Embed
自定義文章類型(Custom Post Type)也不是自定義分類(Custom taxonomies)。比如你有了一個自定義類型是電影,這時候用文章的分類可能就不適用了,需要添加自定義分類法,比如奇幻、恐怖、愛情、動作等等。
為什麽要使用自定義文章類型?有什麽好處和優勢?

使用自定義文章類型有幾個好處:

更好的顯示形式。內容決定形式,形式影響內容。某些場景形式重於內容,某些場景內容重於形式,主要還是取決什麽樣的內容。在 WordPress 中可以針對自定義文章類型使用專門的頁面展示顯示形式,自由設置不同於默認文章的顯示樣式,以便突出顯示這類內容,聚焦優質內容。
更好的過濾結果。在需要按條件顯示 WordPress 文章時,WP_Query 默認的搜索是 Post, 這時默認會把自定義文章類型排除出去,除非你特意指明了需要的類型,這樣可以對過濾結果有更好的控制。
更好的編輯內容。在內容管理後臺中,不同的內容類型也需要不同的組織、編輯流程。
更好的用戶體驗。如果你是一個開發者,服務的用戶群體是特定行業的從業者,他們不一定懂代碼,也不一定能搞清楚文章、頁面等等之間的區別,那麽最簡單的方法就是為他們量身打造一套自定義文章類型和發布流程,讓工具去適應用戶,而不是讓用戶去適應內容。
更好的安全性。
更高的效率。
更友好的 URL 展示
總之,自定義文章類型(custom post types )可以讓你自定義並管理你的內容,使創建、編輯、管理更容易更高效,並且能以更好更方便的形式展現出來。

創建自定義文章類型的方法

當你決定了開始使用自定義文章類型之後,首先面對的問題就是,應該怎麽弄?方法很多。一般來說有兩種方法可以創建自定義文章類型:一是手寫代碼,二是通過插件的方式來創建。

WordPress 自身並沒有在後臺提供一種可視化的界面來創建自定義文章類型,但是有很多插件也可以實現可視化創建。



首先可以搜索看下是你的內容類型否已經有插件可以滿足需求了,比如電商插件WooCommerce這類高級插件都會創建自己的 post type。WooCommerce 的自定義類型就是 Products,也有相應的編輯後臺和分類,統統都幫你做好了,直接使用就可以了。

如果內容類型比較特殊,沒有完全符合的插件,那麽可以考慮使用自定義文章類型可視化創建插件。比如Pods – Custom Content Types and Fields、Custom Post Type Maker、還有官方推薦的Custom Post Type UI ,後面會寫一些這幾個插件的詳細使用用法。

用插件的方式當然是非常方便的,但同時也會有一些缺點:會引入很多不要的代碼和數據,因為是通用型的解決方案,所有它們需要兼顧的方面比較多,有些是並不需要的需求,再一點,雖然這些插件的基礎功能大都是免費的,但是高級功能還是需要付費的。

一文說透WordPress的自定義文章類型