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

xodyhu發表於2019-04-10

轉自丘壑部落格

從2004年的1.0版本算起,WordPress在14年間已經迭代開發到了5.x版。如果說這中間哪個版本是一個質的提升的話,那應該算是2010年釋出的代號為

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業務資料庫裡同一個資料表

中的資料,資料結構都是一樣的,不同的Post Type之間的區別就是在
post_type
這個欄位。見下圖:

Internally, all the
post types
are stored in the same place, in the
wp_posts
database table, but are differentiated by a column called
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 BoxAdvanced Custom FieldsCode Embed

自定義文章型別(Custom Post Type)也不是自定義分類(Custom taxonomies)。比如你有了一個自定義型別是電影,這時候用文章的分類可能就不適用了,需要新增自定義分類法,比如奇幻、恐怖、愛情、動作等等。

為什麼要使用自定義文章型別?好處和優勢

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

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

總之,自定義文章型別(custom post types )可以讓你自定義管理你的內容,使建立、編輯、管理更容易更高效,並且能以更好更方便的形式展現出來。

建立自定義文章型別的方法

當你決定了開始使用自定義文章型別之後,首先面對的問題就是,應該怎麼弄?方法很多。

一般來說有兩種方法可以建立自定義文章型別:1. 手寫程式碼 2. 通過外掛的方式來建立。

WordPress自身並沒有在後臺提供一種視覺化的介面來建立自定義文章型別,但是有很多外掛也可以實現視覺化建立。

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

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

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

所以,最後還有一種終極方案就是自己手寫程式碼來實現完全定製化了,下一篇文章再寫。

參考文獻:


相關文章