WordPress自定義文章型別:建立和使用它們的多合一指南

WordPress自定義文章型別:建立和使用它們的多合一指南

WordPress自定義文章型別是強大的功能。它們將WordPress從一個不起眼的部落格工具提升為一個內容管理系統,併為您提供建立定製網站所需的最重要的靈活性。

但它們可能會引起混淆:WordPress自定義文章型別到底是什麼?它們與標準文章和頁面有何不同?你如何創造它們?一旦你建立了一個自定義的文章型別,你如何新增它,在你的網站上顯示它,以及它是如何被WordPress儲存的?

在本文中,我將向您展示WordPress自定義文章型別的工作原理。我會將它們與您可能更熟悉的文章型別進行比較,教您如何建立它們,並向您展示如何使用主題模板檔案在您的站點中顯示它們。

  1. 什麼是WordPress自定義文章型別?
  2. 文章和自定義文章型別之間的區別
  3. 為什麼要使用自定義文章型別?
  4. 如何使用外掛新增自定義文章型別
  5. 如何註冊自定義文章型別
  6. 新增WordPress自定義型別文章及模板
  7. 如何顯示WordPress自定義文章型別

什麼是WordPress自定義文章型別?

通過解釋一個更廣泛的概念:文章型別,可能更容易解釋WordPress中的自定義文章型別。

文章型別是在WordPress中對不同型別的內容進行分類的方法。我假設您已經熟悉兩種最常見的文章型別:文章和頁面。但您可能不知道的是,WordPress還捆綁了其他一些文章型別。

WordPress預設文章型別

WordPress有七種文章型別

  • 文章
  • 頁面
  • 附件
  • 修訂
  • 導航選單
  • 自定義CSS
  • 變更集Changesets

您可能從未聽說過變更集Changesets,並且您可能會在您的網站中使用自定義CSS,但您沒有想到這些可能是文章型別。

對於大多數WordPress使用者和開發人員來說,您唯一需要關注的文章型別是前五種:文章、頁面、附件、修訂和導航選單。

讓我們看一下這些文章型別中的每一個,以便我們瞭解更多關於它們的資訊。

WordPress文章型別:文章

“文章”是您在WordPress中使用最多的文章型別。文章是動態內容:旨在定期更新。您可以向它們新增類別和標籤,這意味著它們將顯示在多個存檔頁面中,並且它們也將顯示在您的主頁或部落格頁面上。通常,您的文章將構成您網站上的大部分內容。

注意:在 WordPress 中,“釋出”意味著兩件事。在資料庫中,文章是任何文章型別的文章,因此它將包括頁面、附件和其他所有內容。當我們大多數人談論文章時,我們指的是我們部落格中的文章,屬於“文章”文章型別。

WordPress文章型別:頁面

如果您已經有一個WordPress網站,頁面是您熟悉的另一種內容型別。它們是靜態內容,旨在比文章停留更長時間,並提供有關不經常更改的事物的資訊。很好的例子是您的聯絡方式或商業網站上的“關於我們”頁面。

頁面不能有類別或標籤,也不能顯示在存檔頁面上。相反,訪問者將通過您的導航選單訪問它們。

注意:在網際網路術語中,頁面可以表示您網站上的任何型別的頁面。網際網路最初發展時,它僅包含必須通過編寫HTML直接編碼的靜態內容。因此,“網頁”可以是您網站上的任何型別的頁面,包括WordPress術語中的靜態頁面、存檔頁面或文章。在本文中,當我提到頁面時,我指的是WordPress術語中的頁面,即靜態頁面。有時我會提到存檔頁面,但它們不是您建立一個頁面來儲存它們的意義上的頁面。WordPress為您做到這一點。

WordPress文章型別:附件

附件是已上傳到您網站的媒體專案。在WordPress資料庫中,這不是媒體檔案本身,而是與之相關的資料。因此,每個附件都將具有唯一的ID和後設資料,例如其標題、描述、ALT文字等。

每個附件也有自己的附件頁面,帶有唯一的URL。您可以通過該附件的媒體編輯螢幕找到此URL:

WordPress中的附件編輯螢幕

WordPress中的附件編輯螢幕

附件可以是任何型別的上傳:影象、視訊、pdf檔案等等。您可以通過WordPress管理選單中的媒體項訪問和編輯它們,也可以在編輯它們時將它們直接上傳到文章/頁面。您上傳到文章的任何附件都可以通過“媒體 ”選單進行編輯和檢視。

WordPress文章型別:修訂

現在我們開始討論稍微晦澀的文章型別。

每次您儲存新版本的文章、頁面、附件或任何自定義文章型別時,WordPress都會建立一個修訂版以反映該文章(或頁面等)的版本。

您可以通過轉到相關編輯螢幕並開啟右側的“文件” 選項卡來檢視對站點中任何文章或頁面的修訂在這裡,您會看到一條通知,告訴您這篇文章有多少次修訂。您可以在下面看到我正在編輯的文章的螢幕截圖,該文章目前有五個修訂版。

WordPress文章編輯螢幕中的修訂

WordPress文章編輯螢幕中的修訂

如果您不使用古騰堡編輯器,您可以通過滾動到編輯螢幕底部並在此處找到它們的列表來訪問修訂:

經典WordPress文章編輯螢幕中的修訂

經典WordPress文章編輯螢幕中的修訂

如果您單擊“修訂 ”框,您將被帶到一個螢幕,顯示您最新的兩個版本的文章。從這裡您可以檢視修訂並恢復到文章的早期版本。

隨著時間的推移,WordPress會為您的網站建立大量修訂,這意味著資料庫將充滿它們(這是關於如何處理修訂版本以獲得更快效能的指南)!但是修訂版本是一種文章型別,就像其他任何型別一樣,它們以相同的方式儲存——很快就會有更多。

WordPress文章型別:導航選單

導航選單,或者更準確地說,導航選單中的專案,也是一種文章型別。

導航選單中的每個專案都作為一個專案儲存在資料庫中。由於其後設資料,WordPress知道這是一個導航選單項,它應該出現在導航選單中的確切位置以及連結到的位置。

您不能像編輯其他文章型別一樣編輯導航選單項。相反,您可以通過定製器或選單螢幕來編輯它們。

WordPress文章型別:自定義CSS

如果您通過定製器新增自定義CSS,您的工作將使用此自定義文章型別儲存。將為與您網站中的每個主題相關的自定義CSS儲存一個新文章(“自定義CSS”文章型別),並且WordPress只會將一個用於當前活動的主題。

WordPress文章型別:變更集

變更集有點像修訂,但它們不是應用於文章,而是應用於定製器。當您使用定製器進行更改時,它將以類似於草稿的方式儲存為更改集。

現在我們已經瞭解了所有WordPress文章型別,讓我們繼續瞭解有關WordPress自定義文章型別的更多資訊。

預設文章和自定義文章型別之間的區別

讓我們快速回顧一下:文章可以是兩件事之一。

文章型別是給定內容項所屬的文章型別(在更廣泛的意義上)。“文章”是一種文章型別,就像“頁面”、“附件”或您註冊的任何自定義文章型別一樣(我知道,這很令人困惑,但我會在一分鐘內深入挖掘)。

另一方面,您的自定義文章型別不是部落格文章意義上的“文章”型別。它是儲存在資料庫中的所有文章(所有文章型別)意義上的一種文章。

預設文章型別和自定義文章型別都有各自的用途,可以在 WordPress 網站上共存,提供豐富多樣的內容體驗。看看它們的區別!

預設文章型別 自定義文章型別
可用性 安裝 WordPress 時預設可用。 需要手動建立或使用外掛建立。又或者主題本身支援,比如閃電博很多主題就採用了自定義文章型別。
型別 文章、頁面和媒體。 根據您的需要(如新聞、電影、作品集)無限建立。
靈活性 僅限於內建選項。 可釋出和編輯自己和他人的文章。
使用方法 適用於標準部落格文章、靜態頁面和媒體檔案。 適用於不適合預設文章型別的專門內容。

WordPress自定義文章型別:常見用途

所以現在我們知道什麼是自定義文章型別了。但是什麼時候你可能需要使用一個?答案是每當您想向您的網站新增不適合其中一種內建文章型別的內容時。

自定義文章型別的一些常見示例是:

  • 電子商務網站的產品。
  • 作品集網站的作品或專案。
  • 地圖位置站點的地圖。
  • 預訂網站的活動。

這些是一些最常見的用例,但絕不是唯一的用例。在決定是否對任何新內容使用自定義文章型別時,我的建議是問自己這個問題:

我想在主部落格頁面或靜態頁面中顯示我的新內容,還是希望能夠在單獨的存檔頁面上顯示它?

在某些情況下,使用一個類別來分離您的新內容可能就足夠了:也許您正在執行一個部落格並希望包含可以在他們自己的頁面上顯示的案例研究(使用您建立的“案例研究”類別)並顯示在主部落格中。但是,如果您想將新內容與部落格文章分開,那麼為它建立自定義文章型別是有意義的。

WordPress如何儲存文章型別

自定義文章型別的文章的儲存方式與標準文章(和頁面等)的儲存方式相同。讓我們更詳細地看一下這個。

您的WordPress站點有許多用於儲存內容和設定的資料庫表。表的最小數量是 12,但是如果您的站點執行多語言站點或者如果您安裝了新增更多表的外掛,您的站點可能會有更多。

WordPress資料庫表

WordPress資料庫表

在上面的螢幕截圖中,您可以看到有兩個表看起來好像與文章有關:wp_posts 和 wp_postmeta。

wp_posts表儲存所有文章型別的所有文章內容。因此,無論我們談論的是部落格文章、頁面、修訂、附件還是自定義文章型別都沒有關係:它們都將儲存在這個wp_posts表中。

WordPress知道每個文章的文章型別,因為它會在 wp_posts 表的 post_type 欄位中有一個值。該值將對應於文章型別的名稱。因此,當您新增新的部落格文章時,WordPress會在wp_posts表中新增一個 post_type 為“post”的文章。例如,如果您註冊了一個名為“product”的自定義文章型別,那麼您建立的每個新產品都會在wp_posts 表中生成一行,其中“product”作為 post_type 欄位中的值。

wp_postmeta 表用於儲存有關您的文章的後設資料。它有四個欄位:

  • meta_id:wp_postmeta表中該項的id。
  • post_id:該項後設資料對應的文章。一篇文章在wp_postmeta表中可以有多行。
  • meta_key:此特定型別後設資料的金鑰。例如,對於靜態頁面,一個潛在的鍵可能是page_template,它會記錄正在使用的頁面模板。
  • meta_value:欄位的值。如果頁面(再次使用此示例)正在使用預設頁面模板,則此處的meta_value將為“default”。

因此,為給定文章儲存的後設資料種類將根據它的文章型別而有所不同。

您無需擔心哪些資料儲存在wp_posts中,哪些儲存在wp_postmeta中:但瞭解所有文章型別都儲存在同一個位置很有用,因為這意味著WordPress可以以幾乎相同的方式處理它們大大地。

自定義文章型別儲存在WordPress中的什麼位置?

您的WordPress站點有許多用於儲存內容和設定的資料庫表。例如,如果您註冊了一個名為“case study”的自定義文章型別,那麼您建立的每個新案例研究都會在wp_posts表中生成一行,其中“product”作為post_type欄位中的值。

WordPress知道每個文章的文章型別,因為它會在wp_posts表的post_type欄位中有一個值。

自定義文章型別如何與自定義分類法和自定義欄位互動

在我們繼續研究如何在WordPress中註冊自定義文章型別之前,讓我們確定自定義文章型別將如何與其他自定義內容型別互動,即自定義分類法和自定義欄位。

自定義分類法

WordPress中的分類法用於對任何文章型別的文章進行分類。對於標準文章,使用的兩種分類法是類別和標籤。

註冊自定義文章型別時,您可以選擇為其分配任何現有的分類法或分類法。您可以在註冊分類時為其新增“category”分類。當我演示建立自定義文章型別的技術時,我將很快向您展示如何執行此操作。

或者,您可以為您的自定義文章型別建立全新的分類法,這也是一種常用方法。

因此,例如,如果您正在為電子商務網站建立 “product”文章型別,您可能會建立“department” 分類來將產品分類到商店中的部門。

如果您正在建立 “event” 文章型別,則可以建立 “event type”分類,它可以指定這是一場音樂會、詩歌朗誦還是喜劇之夜。

您建立的分類法取決於您,並且取決於您希望從自定義文章型別對文章進行排序和顯示的方式。

自定義欄位

您在WordPress中擁有的另一種自定義內容型別是自定義欄位,也稱為文章後設資料。自定義欄位是您可以新增到任何文章的附加後設資料,只要文章型別支援它們。當您註冊自定義文章型別時,您可以在此行中包含自定義欄位支援:

supports => array( ‘custom-fields’ );

這是作為陣列傳遞的,以便您可以新增對多個選項的支援

因此,如果您想將後設資料新增到您的自定義文章型別,例如服裝店中具有“product”文章型別的尺寸或顏色,您將使用自定義欄位來執行此操作。

自定義欄位不同於自定義分類法,因為您不會使用它們來輸出存檔頁面。

這是一家服裝店的示例。您將為“department”分類的每個示例建立一個存檔頁面,例如“Women’s”、“Men’s”等。假設您還有一個名為“Size”的自定義欄位。您不會為每種尺寸建立存檔頁面,因為這不是您的客戶希望看到的。

遵循此規則可幫助您確定是否需要使用自定義分類法或自定義欄位來向您的文章新增更多資料:您是否需要在存檔頁面中顯示它?

稍後我將向您展示如何為您的自定義文章型別和自定義分類法輸出存檔頁面。

為什麼要使用自定義文章型別?

以下是您應該在 WordPress 中使用自定義文章型別的幾個原因:

  1. 它們可以將不同型別的內容分隔開來,有助於保持網站整潔。
  2. 讓訪客更容易在網站上找到他們想要的內容。
  3. 它們可以讓您為某些文章新增特殊功能,比如書評的評論分數。
  4. 它們可以幫助你的網站在搜尋引擎結果中顯示得更高。
  5. 它們能讓您更輕鬆地建立一致、結構化的內容,尤其是當有多人向您的網站新增內容時。

如何使用外掛新增自定義文章型別

因此,您知道自定義文章型別是什麼,並且您知道您的網站需要一個:如何新增它?

有兩種方法:使用外掛和手動編碼。讓我們從外掛路由開始。

您可以使用兩種型別的外掛來註冊自定義文章型別:第一種將註冊自定義文章型別以新增​​外掛附帶的功能,第二種將為您提供可用於建立您的自己的文章型別。

第一個示例包括各種外掛,包括電子商務外掛、事件外掛等。讓我們從最受歡迎的WordPress外掛之一WooCommerce開始。

如何使用WooCommerce註冊自定義文章型別

WooCommerce是一個註冊自定義文章型別以便工作的外掛示例。在這種情況下,它是“product”文章型別。

WooCommerce中列出的產品

WooCommerce中列出的產品

WooCommerce還為您註冊了一些自定義分類和自定義欄位來組織您的商店,包括產品類別和產品標籤。這些與您用於部落格文章的類別和標籤不同。

如何使用Events Calendar外掛註冊自定義文章型別

事件日曆外掛是另一個使用自定義文章型別的外掛。在這種情況下,它是“event”文章型別。

Events Calendar外掛建立的event

Events Calendar外掛建立的event

該外掛新增了事件獨有的分類法:“event category”。它也將普通標籤應用於事件,因此您可以使用與部落格文章相同的標籤。

如何使用WP Google Maps註冊自定義文章型別

就像WooCommerce和The Events Calendar一樣,WP Google Maps是一個WordPress地圖外掛,可為您的地圖註冊自定義文章型別。

由WP Google Maps外掛建立的地圖

由WP Google Maps外掛建立的地圖

“map”文章型別與之前外掛中的產品或活動文章型別的工作方式不同,因為您不會顯示所有地圖的存檔頁面:相反,該外掛為您建立的每個地圖提供了一個短程式碼,您嵌入進入您網站的文章或頁面。但是,儘管您無法像檢視其他一些文章型別一樣檢視地圖,但它仍然是一種文章型別。

如何使用Custom Post Type UI外掛

如果您想註冊自己的自定義文章型別,而不是作為WooCommerce等外掛提供的更廣泛功能的一部分,您可以使用為您提供介面的外掛,該介面旨在使註冊自定義文章型別變得容易。

一個這樣的外掛是Custom Post Type UI外掛。

Custom Post Type UI外掛

Custom Post Type UI外掛

該外掛允許您使用管理螢幕註冊自己的自定義文章型別,而無需編寫任何程式碼。

它為您提供了一組螢幕,可讓您新增註冊文章型別的所有元素,您將在使用register_post_type()函式時新增這些元素。要使用外掛新增新的文章型別,請轉到CPT IU > Add/Edit Post Types

使用Custom Post Type UI外掛新增文章型別

使用Custom Post Type UI外掛新增文章型別

從這裡,您可以新增新的文章型別或編輯您已註冊的任何現有文章型別。

您可以編輯文章型別的設定,也可以將它們保留為預設設定。您可以在WordPress Codex中找到有關文章型別的所有設定和選項的完整文件。

Custom Post Type UI外掛的設定

Custom Post Type UI外掛的設定

您還可以使用該外掛註冊自定義分類並將其分配給您的新文章型別或任何現有文章型別。當您使用該外掛註冊文章型別時,您可以為它分配任何現有的分類法。

如何使用Pods外掛註冊自定義文章型別

Pods外掛是另一個外掛,它為您提供了一個介面,旨在讓您無需編寫程式碼即可註冊自定義文章型別。

Pods還允許您擴充套件現有的文章型別。因此,您可以向現有文章型別或分類新增額外欄位,並編輯其設定。

使用Pods外掛建立文章型別

使用Pods外掛建立文章型別

Pods外掛使用文章型別(“pod”)來儲存您的所有自定義設定,並且還允許您註冊自己的文章型別,有點像Custom Post Type UI外掛,但其介面旨在引導您完成整個過程. 這意味著該外掛可以使該過程更容易,但與您自己編寫文章型別相比,它向您的站點(以及向您的資料庫中的資料)新增了更多的程式碼。

或者,如果您不想安裝外掛來管理註冊文章型別的過程,您可以自己編寫程式碼。

如何註冊自定義文章型別

如果您喜歡編寫程式碼,您可以利用register_post_type()函式來註冊您的自定義文章型別。這是最有效的方法。

最佳實踐告訴我們將自定義文章型別的程式碼放在外掛中,而不是在您的主題中。這是因為如果您將來要更改主題,您將不希望丟失文章型別以及您使用該文章型別建立的所有文章。這也意味著如果您將來更新主題,您將不會丟失您的文章型別。

讓我們完成在WordPress中註冊您自己的自定義文章型別的步驟。

建立你的外掛

第一步是建立你的外掛。在您的開發或臨時站點(還不是您的實時站點)的wp-content/plugins資料夾中,為您的外掛新增一個資料夾。在該資料夾中,新增一個PHP檔案。比如wbolt-register-posttype.php。

提示:我總是喜歡在資料夾中建立外掛,而不是僅僅將外掛檔案新增到wp-content/plugins資料夾中。這樣,如果我需要向我的外掛新增更多檔案,例如包含檔案、指令碼或樣式,我已經準備好一個資料夾來儲存它們。

現在在您的新php檔案中,為您的外掛新增開頭註釋掉的文字:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
/*
Plugin Name: Register Custom Post Types
Plugin URI: https://www.wbolt.com
Description: Plugin to register the book post type
Version: 1.0
Author: WBOLT
Author URI:https://www.wbolt.com
Textdomain: wbolt
License: GPLv2
*/
<?php /* Plugin Name: Register Custom Post Types Plugin URI: https://www.wbolt.com Description: Plugin to register the book post type Version: 1.0 Author: WBOLT Author URI:https://www.wbolt.com Textdomain: wbolt License: GPLv2 */
<?php
/*
Plugin Name: Register Custom Post Types
Plugin URI: https://www.wbolt.com
Description: Plugin to register the book post type
Version: 1.0
Author: WBOLT
Author URI:https://www.wbolt.com
Textdomain: wbolt
License: GPLv2
*/

這會告訴WordPress(和使用者)有關外掛的一些關鍵資訊:

  • 它叫什麼
  • 在哪裡可以找到更多資訊
  • 它能做什麼
  • 版本號
  • 誰開發了它,你可以在哪裡找到更多關於它們的資訊
  • 國際化的文字域
  • 許可證,應始終為GPL。

所以你的外掛現在已經設定好了,如果你願意,你可以在管理螢幕中啟用它。如果你這樣做,它不會做任何事情。

為文章型別設定函式

現在讓我們開始建立函式來註冊您的文章型別。在我的示例中,我將建立一個名為“book”的文章型別,因為這是一個虛構的書評網站。您使用的內容顯然會有所不同,並且取決於您使用自定義文章型別的目的。

在註釋掉的文字下方,新增以下內容:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
function wbolt_register_post_type() {
}
add_action( 'init', 'wbolt_register_post_type' );
function wbolt_register_post_type() { } add_action( 'init', 'wbolt_register_post_type' );
function wbolt_register_post_type() {
}
add_action( 'init', 'wbolt_register_post_type' );

此函式將包含您的自定義文章型別的所有程式碼。您可能想要更改其名稱以新增您自己的字首而不是wbolt_。最好在所有函式上使用字首,這樣您就不會與主題或正在執行的其他外掛提供的任何函式的名稱發生衝突。

其餘程式碼將新增到該函式的大括號內。

為自定義文章型別定義標籤

現在是時候為您的自定義文章型別定義標籤了,在這些花括號內,新增以下內容:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$labels = array(
'name' => __( ‘Books’, ‘wbolt’ ),
'singular_name' => __( 'Book', ‘wbolt’ ),
'add_new' => __( 'New Book', ‘wbolt’ ),
'add_new_item' => __( 'Add New Book', ‘wbolt’ ),
'edit_item' => __( 'Edit Book', ‘wbolt’ ),
'new_item' => __( 'New Book', ‘wbolt’ ),
'view_item' => __( 'View Books', ‘wbolt’ ),
'search_items' => __( 'Search Books', ‘wbolt’ ),
'not_found' => __( 'No Books Found', ‘wbolt’ ),
'not_found_in_trash' => __( 'No Books found in Trash', ‘wbolt’ ),
);
$labels = array( 'name' => __( ‘Books’, ‘wbolt’ ), 'singular_name' => __( 'Book', ‘wbolt’ ), 'add_new' => __( 'New Book', ‘wbolt’ ), 'add_new_item' => __( 'Add New Book', ‘wbolt’ ), 'edit_item' => __( 'Edit Book', ‘wbolt’ ), 'new_item' => __( 'New Book', ‘wbolt’ ), 'view_item' => __( 'View Books', ‘wbolt’ ), 'search_items' => __( 'Search Books', ‘wbolt’ ), 'not_found' => __( 'No Books Found', ‘wbolt’ ), 'not_found_in_trash' => __( 'No Books found in Trash', ‘wbolt’ ), );
$labels = array(
'name' => __( ‘Books’, ‘wbolt’ ),
'singular_name' => __( 'Book', ‘wbolt’ ),
'add_new' => __( 'New Book', ‘wbolt’ ),
'add_new_item' => __( 'Add New Book', ‘wbolt’ ),
'edit_item' => __( 'Edit Book', ‘wbolt’ ),
'new_item' => __( 'New Book', ‘wbolt’ ),
'view_item' => __( 'View Books', ‘wbolt’ ),
'search_items' => __( 'Search Books', ‘wbolt’ ),
'not_found' =>  __( 'No Books Found', ‘wbolt’ ),
'not_found_in_trash' => __( 'No Books found in Trash', ‘wbolt’ ),
);

如果您的自定義文章型別不是“book”,則需要更改您的。您可以使用更多標籤,但我發現上面的標籤往往足以滿足我的需求。

請注意,我在標籤中使用了國際化,因此它們將被翻譯成使用者的本地語言。

為自定義文章型別定義引數

下一步是定義引數,其中一個是我們已經新增的標籤陣列。

在標籤下方且仍在這些大括號內,新增以下內容:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$args = array(
'labels' => $labels,
'has_archive' => true,
'public' => true,
'hierarchical' => false,
'supports' => array(
'title',
'editor',
'excerpt',
'custom-fields',
'thumbnail',
'page-attributes'
),
'taxonomies' => 'category',
'rewrite' => array( 'slug' => 'book' ),
‘show_in_rest’ => true
);
$args = array( 'labels' => $labels, 'has_archive' => true, 'public' => true, 'hierarchical' => false, 'supports' => array( 'title', 'editor', 'excerpt', 'custom-fields', 'thumbnail', 'page-attributes' ), 'taxonomies' => 'category', 'rewrite' => array( 'slug' => 'book' ), ‘show_in_rest’ => true );
$args = array(
'labels' => $labels,
'has_archive' => true,
'public' => true,
'hierarchical' => false,
'supports' => array(
'title',
'editor',
'excerpt',
'custom-fields',
'thumbnail',
'page-attributes'
),
'taxonomies' => 'category',
'rewrite'   => array( 'slug' => 'book' ),
‘show_in_rest’ => true
);

讓我們來看看所有這些都做了什麼。

  • 標籤引數是我們已經定義的標籤陣列。
  • 'has_archive' => true為自定義文章型別啟用文章型別存檔。這預設為false,所以我喜歡覆蓋它並給自己選擇使用文章型別存檔的選項(我將很快向您展示如何使用)。
  • 'public' => true使文章型別可以包含在搜尋結果和自定義查詢中。同樣,預設值為false,這是我喜歡覆蓋的內容。
  • “hierarchical”值將取決於您希望如何使用自定義文章型別。如果將此設定為true,則文章型別的行為類似於頁面,具有可能的層次結構以及您文章型別的任何文章的父文章和子文章。如果將其設定為false,它的行為就像文章一樣,沒有層次結構。
  • ‘supports’ 陣列定義了您可以擁有此文章型別支援的文章型別的許多功能。我喜歡確保開啟特色影象和自定義欄位等功能。
  • ‘taxonomies’ 引數定義了適用於此文章型別的現有分類法。在這裡,我使用“category”分類法。如果您想使用自定義分類法但尚未註冊,只需跳過此行,然後將分類法註冊到文章型別。如果您已經註冊了自定義分類法,則可以使用此行將其新增到文章中。
  • 我正在使用“rewrite”引數,因為我要給分類法一個不同於我想用於它的slug的名稱。我將在稍後更詳細地解釋這一點。
  • ‘show_in_rest’ => true確保文章型別可用於REST API和Gutenberg介面。它預設為false,這對我來說毫無意義——我希望我所有的文章型別都使用相同的編輯介面!

所以這些就是所有的論點。但是我們還沒有真正註冊文章型別。是時候解決這個問題了。

新增register_post_type()函式

最後一步是將所有這些整合到register_post_type()函式中。

在您的論點下方,仍在大括號內,新增以下內容:

register_post_type( ‘wbolt_book', $args );

這將使用我們已經定義的引數註冊“wbolt_book”文章型別。

現在您可能會更容易理解為什麼我之前使用了 ‘rewrite’ 引數。我喜歡為我的文章型別的名稱新增字首,因此我可以確保它們不會與任何第三方外掛新增的任何文章型別發生衝突,但我不希望將字首公開。

預設情況下,當WordPress顯示您的文章型別的示例時,它將在 URL 中使用文章型別的名稱。因此,我的名為“My Wonderful Book”的書的URL為 mysite.com/wbolt_book/my-wonderful-book。我不希望這樣,所以我使用“rewrite”引數將URL更改為 mysite.com/book/my-wonderful-book。看起來好多了,是嗎?

現在儲存您的檔案並在WordPress管理員中啟用您的外掛。您會發現管理選單中出現了一種新的文章型別。

管理螢幕中的“book”文章型別

管理螢幕中的“book”文章型別

文章型別現已註冊並準備好在您的網站上使用。花一些時間向其中新增一些文章(記住您的自定義文章型別的文章,而不是部落格文章 – WordPress有時會讓人感到困惑!)然後我們將看看如何在前面顯示您的自定義文章型別的文章您網站的結尾。

新增WordPress自定義型別文章及模板

您可以按照以下步驟在 WordPress 網站上新增新的自定義文章:

  • 點選已註冊的自定義文章型別,在我們的例子中就是“新聞”
  • 點選新增新內容
  • 輸入文章的標題正文

自定義文章內容編輯

  • 輸入摘要並設定特色圖片
  • 點選“釋出”按鈕,啟用新的自定義文章。

釋出自定義文章

當您建立類似“新聞”這樣的自定義文章型別時,WordPress 不會自動提供前端佈局。如果沒有模板,您的“新聞”文章就會像普通帖子一樣,沒有專門的佈局。看看上面的截圖,我們的情況正是如此。

你需要建立一個自定義模板,以特定格式或樣式顯示它們。讓我們看看如何做到這一點…

使用FSE為自定義文章型別建立模板

全站編輯中,模板是通過網站編輯器而不是 PHP 檔案建立和分配的。由於我使用的是 WordPress 主題 – Twenty Twenty-Four,它完全利用了全站編輯(FSE)功能,下面我將介紹如何為我的“新聞”這個自定義文章型別建立自定義模板。

在全站編輯器中建立模板

  • 進入 WordPress 控制面板,導航到外觀 > 編輯器

外觀 &gt; 編輯器

  • 網站編輯器中,點選左側面板中的模板
    編輯模板
  • 單擊新增新模板按鈕建立新模板。
  • 彈出新視窗後,選擇要建立的模板型別。我會選擇自定義模板

自定義模板

  • 接下來,我會將模板命名為“News Custom Template,然後點選 “建立”

自定義文章模板標題

  • 建立模板後,它將在編輯器中開啟,您可以在其中新增區塊。您可能需要新增區塊來顯示文章內容、標題和特色圖片。
  • 對模板滿意後,點選儲存

儲存自定義文章型別模板

您的模板現在已經建立,但除非您為其分配任務,否則它不會做任何事情。因此,在我們的例子中,我將把它分配給我們建立的“新聞”文章型別。

將模板分配給自定義文章型別

  • 要將模板分配給 “新聞 ”自定義文章型別,我會建立一個新文章,然後在“文章屬性”下選擇我們的新模板
  • 我還將文章帖子標題、正文內容和特色圖片。
  • 完成後,我會點選 “釋出”

選擇自定義文章型別模板

  • 現在,如果我檢視新建立的文章,你會發現它繼承了我們之前建立的自定義模板的設計。

建立的自定義模板的設計

如果您使用的主題不使用全站編輯 (FSE),可以按照以下步驟操作。

為非全站編輯主題手動建立模板檔案

  • 開啟 WordPress 主題資料夾(主題檔案所在的資料夾)。您可以使用 FileZilla 或任何其他 FTP 工具開啟。
  • 在你使用的活動主題資料夾中,建立一個新檔案並命名為 template-news.php 。本例中我使用的是 Twenty Nineteen 主題,因為它不支援 FSE。該檔案將顯示你的自定義文章型別。

新增模板程式碼

在文字編輯器(如記事本)中開啟新建立的檔案(template-news.php),新增以下程式碼:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
/* Template Name: News */
get_header(); // Includes the site header
?>
<?php
// Define query arguments
$args = array(
'post_type' => 'news', // Custom post type
'posts_per_page' => 10, // Number of posts to display );
);
// Create a new WP_Query instance
$the_query = new WP_Query($args);
?>
<?php if ($the_query->have_posts()) : ?>
<?php while ($the_query->have_posts()) : $the_query->the_post(); ?> <h2><?php the_title(); ?>
</h2> <!-- Display the post title -->
<div class="entry-content">
<?php the_content(); ?> <!-- Display the post content -->
</div>
<?php endwhile; ?>
<?php wp_reset_postdata(); // Reset the post data to restore the global $post object ?>
<?php else : ?>
<p><?php esc_html_e('Sorry, no posts matched your criteria.', 'textdomain'); ?></p> <!-- Fallback message -->
<?php endif; ?>
<?php
get_footer(); // Includes the site footer
?>
<?php /* Template Name: News */ get_header(); // Includes the site header ?> <?php // Define query arguments $args = array( 'post_type' => 'news', // Custom post type 'posts_per_page' => 10, // Number of posts to display ); ); // Create a new WP_Query instance $the_query = new WP_Query($args); ?> <?php if ($the_query->have_posts()) : ?> <?php while ($the_query->have_posts()) : $the_query->the_post(); ?> <h2><?php the_title(); ?> </h2> <!-- Display the post title --> <div class="entry-content"> <?php the_content(); ?> <!-- Display the post content --> </div> <?php endwhile; ?> <?php wp_reset_postdata(); // Reset the post data to restore the global $post object ?> <?php else : ?> <p><?php esc_html_e('Sorry, no posts matched your criteria.', 'textdomain'); ?></p> <!-- Fallback message --> <?php endif; ?> <?php get_footer(); // Includes the site footer ?>
<?php 
/* Template Name: News */ 
get_header(); // Includes the site header 
?>
<?php 
// Define query arguments 
$args = array( 
    'post_type'      => 'news', // Custom post type 
    'posts_per_page' => 10, // Number of posts to display ); 
);
// Create a new WP_Query instance 
$the_query = new WP_Query($args); 
?> 
<?php if ($the_query->have_posts()) : ?> 
  <?php while ($the_query->have_posts()) : $the_query->the_post(); ?> <h2><?php the_title(); ?>
    </h2> <!-- Display the post title --> 
    <div class="entry-content">
      <?php the_content(); ?> <!-- Display the post content -->
    </div>
  <?php endwhile; ?>
 <?php wp_reset_postdata(); // Reset the post data to restore the global $post object ?>
<?php else : ?>
  
  <p><?php esc_html_e('Sorry, no posts matched your criteria.', 'textdomain'); ?></p> <!-- Fallback message -->
<?php endif; ?>
<?php
get_footer(); // Includes the site footer
?>

該程式碼可從“新聞”自定義文章型別中獲取並顯示多達 10 篇帖子。對於每篇文章,它都會將標題顯示為單篇文章頁面的連結,並顯示簡短摘錄。如果沒有找到文章,則會顯示一條後備資訊。

為自定義文章型別分配模板

建立模板後,您需要將其分配給一個頁面,以便 WordPress 知道如何使用它。

請按照以下步驟操作

  • 進入 WordPress 控制面板。
  • 點選頁面 新頁面
  • 建立一個新頁面,命名為“新聞”。
  • 在右側面板中找到“頁面屬性”部分,找到“模板 ”下拉選單。
  • 從下拉選單中選擇你剛剛建立的 News 模板(由於你在 PHP 檔案中新增了模板名稱,它將顯示為一個選項)。
  • 單擊“釋出”使頁面生效。

請參考下圖,直觀瞭解上述步驟:

自定義文章型別模板

下圖是列表頁面的最終顯示效果:

自定義文章型別佈局

如何顯示WordPress自定義文章型別

您新增到站點的大多數自定義文章型別都將像文章一樣工作,這意味著它們旨在顯示在存檔頁面中。也許您正在使用自定義分類法來顯示它們,或者您可能像我一樣新增了“category”分類法。

或者,如果您使用了像WooCommerce這樣的外掛來新增自定義文章型別以向您的網站新增特定功能,那麼該外掛可能會新增一些特定頁面(如“Shop2頁面”)以輸出您的自定義文章型別。

顯示自定義文章型別的四個選項是:

  • 顯示單個文章(在我的示例中,即書)
  • 顯示完整的文章型別存檔,列出所有書籍。
  • 使用您為自定義文章型別註冊的分類顯示自定義分類存檔。
  • 將自定義文章型別(例如書籍)中的文章整合到現有分類法(例如“category”)的存檔中,或整合到主部落格頁面中。

讓我們依次看看這些。

警告!如果在此過程中的任何時候您無法訪問自定義文章型別的檔案或單個文章,那是因為WordPress尚未為它們編寫永久連結。要解決此問題,請轉到“設定”>“固定連結” ,然後單擊“儲存更改 ”按鈕。這將告訴WordPress檢查任何新的文章型別併為它們建立URL。

顯示文章型別存檔

您擁有的第一個選項是建立自定義文章型別存檔中所有文章的存檔頁面。

如果您在註冊文章型別時將“has_archive”定義為true,WordPress將自動為您的文章型別生成一個存檔頁面。您可以使用定製器將此新增到導航選單中。

將您的文章型別存檔新增到選單

開啟定製器並選擇選單選項。選擇您的主選單並單擊新增專案 按鈕以向您的選單新增額外的專案。

在WordPress定製器中新增選單項

在WordPress定製器中新增選單項

從出現的選項中選擇您的文章型別,然後單擊其名稱右側的向下箭頭。這將顯示包含您新增的每個文章的所有列表,以及一個在我的例子中稱為All Books的選項。單擊它,它將被新增到您的選單中。

如果然後單擊選單中的該專案,則可以編輯標籤。我不想稱我的為“All Books”,而只稱其為“Books”。

編輯書籍選單項

編輯書籍選單項

請注意,您只能通過定製器執行此操作 – 在選單螢幕中是不可能的。因此,請確保您使用定製器將您的自定義文章型別存檔新增到您的選單中。

自定義文章型別存檔

WordPress將使用模板層次結構來識別主題中的哪個模板檔案用於顯示自定義文章型別存檔。

WordPress模板層次結構

WordPress模板層次結構

如果您的主題有一個archive.php檔案,它將使用該檔案,如果沒有,它將使用index.php。

如果要編輯自定義文章型別存檔的輸出方式,則可以為自定義文章型別存檔建立模板檔案。

對於特定的自定義文章型別,您需要建立一個名為archive-$posttype.php的模板檔案,其中$posttype是您的文章型別的名稱。因此,對於我的書籍文章型別,我將建立一個名為archive-wbolt_book.php的檔案。

建立此檔案的最簡單方法是在您的主題中複製archive.php檔案。重新命名並編輯它,以便它以您想要的方式顯示您的文章型別存檔。

顯示單個文章

使用自定義文章型別建立的單個文章也將使用模板層次結構中找到的第一個相關模板檔案顯示。

您可以使用單個文章比使用存檔更進一步:您不僅可以為文章型別建立模板檔案(single-$posttype.php),還可以為該文章的特定文章建立檔案使用該文章的slug鍵入 (single-$postype-slug.php)。

因此,如果我將Great Expectations 新增到我的書評網站,我可以為所有書評建立一個名為single-wbolt_book.php的檔案,或者我可以為該書建立一個名為 single-wbolt_book-great-expectations.php的目標檔案。如果我沒有建立這些檔案中的任何一個,WordPress將預設使用single.php或(如果不存在singular.php或index.php。

將自定義文章型別新增到主部落格頁面

預設情況下,您的主部落格頁面將僅包含“post”文章型別。但是,如果您還想在該頁面上包含自定義文章型別,與部落格文章混合怎麼辦?

您可以通過使用WordPress中的pre_get_posts鉤子來完成此操作。

在您註冊文章型別的外掛中,新增以下內容:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
function wbolt_books_on_blog_page() {
if ( $query->is_home() && $query->is_main_query() ) {
$query->set( ‘post_type', array( ‘post’, ‘wbolt_book’ );
}
}
add_action( 'pre_get_posts', 'wbolt_books_on_blog_page' ); ?>
<?php function wbolt_books_on_blog_page() { if ( $query->is_home() && $query->is_main_query() ) { $query->set( ‘post_type', array( ‘post’, ‘wbolt_book’ ); } } add_action( 'pre_get_posts', 'wbolt_books_on_blog_page' ); ?>
<?php
function wbolt_books_on_blog_page() {
if ( $query->is_home() && $query->is_main_query() ) {
$query->set( ‘post_type', array( ‘post’, ‘wbolt_book’ );
}
}
add_action( 'pre_get_posts', 'wbolt_books_on_blog_page' ); ?>

這會檢查我們是否在“主頁”頁面(即部落格頁面,即使那不是您網站的首頁)以及主查詢是否正在執行(因為您不想在一個小工具,例如)。如果是這樣,它會將文章和書籍新增到查詢中。

請注意,您必須在陣列中包含“post”文章型別以及新的文章型別。

小結

WordPress自定義文章型別是將其從簡單的部落格平臺提升為真正的內容管理系統的功能。它們使您可以建立複雜的定製站點,這些站點可以充當商店、參考中心、媒體站點或您需要的任何東西。

您可以通過以下三種方式之一將自定義文章型別新增到您的WordPress網站。您可以使用諸如WooCommerce之類的外掛來註冊與外掛功能相關的自定義文章型別。您可以使用CPT UI或Pods之類的外掛來新增您自己的自定義文章型別。或者您可以編寫自己的外掛並使用該register_post_type()函式使用程式碼註冊文章型別。無論您使用哪種方法,您都可以從您的WordPress網站獲得更多收益。

評論留言