手動創建 WordPress 自定義帖子類型

已發表: 2020-12-15

在我們關於 WordPress 自定義帖子類型的第一篇文章中,我們介紹瞭如何使用出色的插件自定義帖子類型 UI 輕鬆創建自己的自定義帖子類型。 在第二篇文章中,我們將了解如何手動執行此操作(即通過編碼)。 那麼,如果使用插件創建自定義帖子類型如此容易,您為什麼要長期這樣做呢?

使用插件添加自定義功能可以非常好地工作(幫助擴展功能的大量插件庫是 WordPress 如此受歡迎的原因之一)。 但是,如果插件不受支持(因為插件作者選擇不繼續更新和開發它),就會出現問題。 如果發生這種情況,您會發現插件提供的功能現在不再起作用,如果您的網站是圍繞插件提供的特定功能構建的,這可能是一個嚴重的問題。

因此,如果您可以直接編寫功能而不是依賴插件,那麼這是一個不錯的選擇。

今天我們將向您介紹如何在不使用插件的情況下創建自己的自定義帖子類型。 我們還將演示一些基本配置,例如定義 CPT(自定義帖子類型)標籤以及啟用特色圖像等。 然後,我們將添加一個自定義分類法,最後我們將了解如何在您網站的前端顯示您的自定義帖子類型內容。

創建自定義帖子類型

如果您按照我們之前的教程操作並且仍然安裝了 CPT UI 插件,請停用此插件,以免在手動創建新 CPT 時出現混淆。

和以前一樣,我們將使用食譜作為我們新的自定義帖子類型的焦點。 首先,我們要做的第一件事是通過在我們的functions.php文件中插入正確的代碼來創建自定義帖子類型。

基本設置

現在,我們將使用 WordPress 提供的register_post_type函數創建具有最少參數的帖子類型。

 register_post_type( string $post_type, array|string $args = array() )

這個函數的結構需要兩個參數。 帖子類型鍵應僅包含小寫字母數字字符、破折號和下劃線以及第二個可選參數,用於附加參數的$args 。 我們將在本文中只關注其中一些參數,但如果您想進行更多實驗,可以在相關 WordPress 文檔中找到可用參數的完整列表。

出於本文的目的,我們將使用下面的代碼。

 function recipes_post_type() { register_post_type( 'recipes', array( 'labels' => array( 'name' => __( 'Recipes' ), 'singular_name' => __( 'Recipe' ) ), 'public' => true, 'show_in_rest' => true, 'supports' => array('title', 'editor', 'thumbnail') ) ); } add_action( 'init', 'recipes_post_type' );

如果您正在跟進,請啟動您最喜歡的文本編輯器並將此代碼添加到您的functions.php文件中。

您將在這段代碼中看到,我們使用 'labels' 數組來定義我們的帖子類型的單數和復數名稱,使用show_in_rest參數來激活食譜帖子的 Gutenberg 編輯器以及public參數。

public論證實際上做了三件不同的事情。 它顯示了管理員自定義帖子菜單,它包括網站搜索結果中的自定義帖子菜單,並在 WordPress 管理員菜單區域中顯示自定義帖子菜單。 這些選項可以分別使用show_in_nav_menusexclude_from_searchshow_ui參數單獨修改。 show_in_nav_menusshow_ui默認值繼承public值,但exclude_from_search默認值與public值相反。

我們還使用了supports參數,它定義了自定義帖子將支持哪些功能。 目前我們只啟用“title”、“editor”和“thumbnail”(一些進一步的選項將在以後的文章中顯示)。

將此代碼片段添加到我們的 functions.php 文件並保存(在進行此類工作之前始終備份您的網站!)您現在將在 WordPress 管理員中看到一個全新的菜單項(在本例中為“食譜”)。

接下來,如果我們前往外觀 > 菜單,我們可以確認食譜已作為選項添加。 這證實了事情正在按應有的方式工作。

注意:如果您進入菜單區域並且沒有看到“食譜”菜單項,則可能是在屏幕選項中未檢查。 為此,請前往頁面頂部並打開屏幕選項欄,並確保您的新自定義帖子類型(本示例中的食譜)已被勾選。

為您的自定義帖子類型添加您的分類

存在 WordPress 分類法來對類似內容進行分組。 在這一點上,我們有我們的“食譜”自定義帖子,但我們沒有能力按照我們想要的方式對它們進行分類。 因此,為我們的食譜創建一個單獨的類別會很有用。 例如,讓我們按照它們所屬的美食類型對食譜進行分組。

為此,我們需要註冊一個新的“美食”分類,然後將其鏈接到“食譜”帖子類型。

要添加分類,我們使用 WordPress 提供的register_taxonomy()函數(請參閱此處的參數列表)。

 register_taxonomy( string $taxonomy, $object_type, $args )

強制參數是$taxonomy ,它是分類鍵,以及$object_type ,它是對像類型或對像類型的數組,分類應該與之關聯,在我們的例子中,“recipes”。 在$arg參數中,我們還將包含必要的值,用於標記我們的分類管理實例。

 function create_recipes_taxonomy() { register_taxonomy('cuisines','recipes',array( 'hierarchical' => false, 'labels' => array( 'name' => _x( 'Cuisines', 'taxonomy general name' ), 'singular_name' => _x( 'Cuisine', 'taxonomy singular name' ), 'menu_name' => __( 'Cuisines' ), 'all_items' => __( 'All Cuisines' ), 'edit_item' => __( 'Edit Cuisines' ), 'update_item' => __( 'Update Cuisines' ), 'add_new_item' => __( 'Add Cuisines' ), 'new_item_name' => __( 'New Cuisines' ), ), 'show_ui' => true, 'show_in_rest' => true, 'show_admin_column' => true, )); } add_action( 'init', 'create_recipes_taxonomy', 0 );

show_admin_column布爾值定義分類法是否在食譜管理列表表中作為列可見。

現在,如果您返回 WordPress 管理員並刷新它,您應該會在“食譜”菜單中看到“美食”分類。

您還應該在 Recipes 表中看到“Cuisines”列:

在前端顯示您的自定義帖子類型內容

此時,您應該能夠在菜單中包含您的自定義帖子以及您創建的自定義分類法。 為了證明這一點,我們在美食分類菜單中添加了兩種美食“地中海”和“墨西哥”。 然後這些在我們的 WordPress 菜單中顯示為菜單選項,允許我們創建如下所示的食譜菜單。

如果您創建了食譜帖子並將其與美食類別相關聯,那麼當您從菜單中選擇相關美食時,您現在應該會看到它們出現。

注意:如果您嘗試在前端查看食譜帖子,您可能會收到“404 not found”。 發生這種情況是因為需要刷新永久鏈接緩存。 這很容易做到。 只需轉到設置>永久鏈接並重新保存。

現在我們將使用自定義代碼為“所有食譜”創建另一個菜單項,以顯示我們所有食譜的存檔。

不過,在繼續之前,我們應該確保我們的自定義帖子存檔參數設置為 true。 返回到您在functions.php中註冊配方類型的代碼並在參數數組中添加'has_archive' => true,

 function recipes_post_type() { register_post_type( 'recipes', array( 'labels' => array( 'name' => __( 'Recipes' ), 'singular_name' => __( 'Recipe' ) ), 'public' => true, 'show_in_rest' => true, 'supports' => array('title', 'editor', 'thumbnail'), 'has_archive' => true, ) ); } add_action( 'init', 'recipes_post_type' );

之後,轉到“設置”>“永久鏈接”並重新保存以確保您不會收到 404 錯誤(正如我們之前提到的)。

現在在菜單構建頁面中,為檔案頁面添加自定義鏈接。 鏈接文本可以是“所有食譜”。

如果您的永久鏈接設置為“Plain”,則 URL 應為“/?post_type=recipes”,如果永久鏈接設置為“帖子名稱”,則 URL 應為“/recipes/”。

添加菜單項並轉到您的網站並單擊其鏈接。 您現在應該在存檔視圖中看到所有食譜帖子。

延伸閱讀

  • 使用插件創建 WordPress 自定義帖子類型
  • WordPress 自定義帖子類型——更進一步
  • 使用您自己的插件創建 WordPress 自定義帖子類型!

結論

我們在本文中研究的處理自定義帖子類型的方法起初可能看起來令人困惑(尤其是與使用插件創建自定義帖子類型的便利性相比)。 但是,如果您願意堅持下去,編寫自己的自定義帖子類型確實有其優勢,即如果該插件停止工作或不受支持,您將不依賴插件。