為WordPress創建帖子插件
Feb 18, 2025 pm 12:09 PM
> WordPress Post系列插件使您能夠串行組織帖子以創建書籍或課程。它為用戶提供了學習的途徑。帖子系列插件也可以用來將長帖子分為多個部分。
> 在本教程中,我將向您展示如何創建一個用於顯示一系列帖子的插件。您還可以將相同的代碼集成到主題功能中。>
鑰匙要點- >利用自定義帖子類型,而不是自定義分類法來有效地創建和管理WordPress的帖子系列,增強用戶體驗和內容組織。
- >實現具有PHP文件和可選CSS的插件結構,可確保WordPress識別並正確安裝您的自定義插件。
- 在WordPress管理中包括元框,以允許作者將帖子分配給特定的系列並串行訂購,從而改善該系列的結構完整性。
- >通過使用“ Pre_get_posts”操作修改主查詢循環,在您的網站上擴展了Post系列的可見性,確保串聯的索引和存檔頁麵包括。
- >通過將導航鏈接添加到上一個和下一個帖子,提高用戶參與度和每個訪問者的頁面視圖,來增強系列中的單個帖子。
- >分類學與帖子系列
因此,我們需要一個文章系列,這實際上是一個以串行方式包含其他帖子的帖子。
>如何創建帖子系列
>創建帖子系列有許多不同的方法。在WordPress.org上找到的流行帖子系列插件使用WordPress帖子上的自定義分類法來創建帖子系列,但是在本教程中,我將使用自定義帖子類型。
插件文件結構>創建一個名為SitePoint-Post系列的插件目錄並將兩個文件放在此中,名為SitePoint-Post-series.php和sitepoint-post-series.css.css.
>在sitepoint-post series.php文件中,將代碼放在下面,以便WordPress識別目錄為插件,並讓您安裝它。
>您還可以將POST系列功能添加到主題。在這種情況下,您需要在本教程中的所有代碼,主題的functions.php file。
如何創建帖子系列自定義帖子類型首先,我們需要創建一個自定義帖子類型,其中每個自定義帖子類型代表帖子系列。
>將下面的代碼放在名為sitepoint-post series.php的文件中
<span><span><?php </span></span><span> </span><span><span>/* </span></span><span><span>Plugin Name: SitePoint Post Series </span></span><span><span>Plugin URI: https://www.sitepoint.com/ </span></span><span><span>Description: This used is used to create a post series. </span></span><span><span>Version: 1.0 </span></span><span><span>Author: Narayan Prusty </span></span><span><span>*/</span></span>
>在這裡,我們創建了一種自定義帖子類型,該類型具有與WordPress帖子使用的相同分類法。這樣您也可以創建一個類別帖子系列。
>>我們還添加了激活和停用鉤子以齊平的重寫規則。這是為了使帖子系列可以在前端查看。
>這是我們的自定義帖子類型在管理屏幕上的外觀:

現在,我們需要將元框添加到WordPress帖子admin接口。因此,作者可以將帖子附加到帖子系列中,並提供序列號以對帖子系列中的帖子進行分類。
這是在帖子系列中添加元框的代碼:
在這裡,我們在元框中添加了兩個字段。作者使用文本字段輸入序列號,並使用下拉列表來選擇帖子所屬的帖子名稱。如果您不想將帖子添加到帖子系列中,則應將一個或兩個字段留為空白。
<span>function sitepoint_post_series_custom_post_type() </span><span>{ </span> <span>register_post_type("sitepoint-postseries", array( </span> <span>"labels" => array("name" => __("Post Series"), "singular_name" => __("Post Series")), </span> <span>"public" => true, </span> <span>"has_archive" => true, </span> <span>"rewrite" => array("slug"=> "post-series"), </span> <span>"supports" => array("editor", "title", "excerpt", "thumbnail", "comments"), </span> <span>"capability_type" => "post", </span> <span>"publicly_queryable" => true, </span> <span>"taxonomies" => array("category", "post_tag"), </span> <span>) </span> <span>); </span><span>} </span> <span>add_action("init", "sitepoint_post_series_custom_post_type", 2); </span> <span>/* Flush Rewrite Rules */ </span> <span>function sitepoint_post_series_activation() </span><span>{ </span> <span>sitepoint_post_series_custom_post_type(); </span> <span>flush_rewrite_rules(); </span><span>} </span> <span>register_activation_hook( __FILE__, "sitepoint_post_series_activation"); </span><span>register_deactivation_hook( __FILE__, "sitepoint_post_series_activation");</span>
現在,我們需要在保存表單時保存元框字段。這是這樣做的代碼:

>在這裡我們保存元框內容,然後調用函數sitepoint_post_series_series_series_series_save_settings具有不同的參數值,具體取決於用戶是刪除系列,添加系列或更改系列。
這是sitepoint_post_series_save_settings函數/* Add Custom Meta Boxes in WordPress Posts */ function sitepoint_post_series_meta_box_markup($object) { wp_nonce_field(basename(__FILE__), "sitepoint-postseries"); ?> <span><span><span><div</span>></span> </span> <span><span><span><label</span> for<span>="sitepoint-postseries-serial-number"</span>></span>Serial Number<span><span></label</span>></span> </span> <span><span><span><br</span>></span> </span> <span><span><span><input</span> name<span>="sitepoint-postseries-serial-number"</span> type<span>="text"</span> value<span>="<span><?php echo get_post_meta($object->ID, "sitepoint-postseries-serial-number", true); ?></span>"</span>></span> </span> <span><span><span><br</span>></span> </span> <span><span><span><label</span> for<span>="sitepoint-postseries-id"</span>></span>Name<span><span></label</span>></span> </span> <span><span><span><br</span>></span> </span> <span><span><span><select</span> name<span>="sitepoint-postseries-id"</span>></span> </span> <span><span><span><option</span> value<span>=""</span>></span>-<span><span></option</span>></span> </span> <span><span><?php </span></span><span> <span>$posts = get_posts("post_type=sitepoint-postseries"); </span></span><span> <span>$selected_series = get_post_meta($object->ID, "sitepoint-postseries-id", true); </span></span><span> <span>foreach($posts as $post) </span></span><span> <span>{ </span></span><span> <span>$id_post = $post->ID; </span></span><span> <span>if($id_post == $selected_series) </span></span><span> <span>{ </span></span><span> <span>?></span> </span> <span><span><span><option</span> selected value<span>="<span><?php echo $post->ID; ?></span>"</span>></span><span><?php echo $post->post_title; ?></span><span><span></option</span>></span> </span> <span><span><?php </span></span><span> <span>} </span></span><span> <span>else </span></span><span> <span>{ </span></span><span> <span>?></span> </span> <span><span><span><option</span> value<span>="<span><?php echo $post->ID; ?></span>"</span>></span><span><?php echo $post->post_title; ?></span><span><span></option</span>></span> </span> <span><span><?php </span></span><span> <span>} </span></span><span> <span>} </span></span><span> <span>?></span> </span> <span><span><span></select</span>></span> </span> <span><span><span></div</span>></span> </span> <span><span><?php </span></span><span><span>} </span></span><span> </span><span><span>function sitepoint_post_series_custom_meta_box() </span></span><span><span>{ </span></span><span> <span>add_meta_box("sitepoint-postseries", "Post Series", "sitepoint_post_series_meta_box_markup", "post", "side", "low", null); </span></span><span><span>} </span></span><span> </span><span><span>add_action("add_meta_boxes", "sitepoint_post_series_custom_meta_box");</span></span>
此函數創建一個字符串,該字符串存儲屬於特定係列的WordPress Post ID。然後將字符串作為WordPress設置存儲。
>現在我們完成了所有管理區域代碼。您現在應該能夠創建帖子並將其分配給系列。並且還為每個系列分配類別和標籤。
<span>/* Callback to Save Meta Data */ </span> <span>function sitepoint_post_series_save_custom_meta_box($post_id, $post, $update) </span><span>{ </span> <span>if(!isset($_POST["sitepoint-postseries"]) || !wp_verify_nonce($_POST["sitepoint-postseries"], basename(__FILE__))) </span> <span>return $post_id; </span> <span>if(!current_user_can("edit_post", $post_id)) </span> <span>return $post_id; </span> <span>if(defined("DOING_AUTOSAVE") && DOING_AUTOSAVE) </span> <span>return $post_id; </span> <span>$slug = "post"; </span> <span>if($slug != $post->post_type) </span> <span>return; </span> <span>$serial_number = null; </span> <span>if(isset($_POST["sitepoint-postseries-serial-number"])) </span> <span>{ </span> <span>$serial_number = $_POST["sitepoint-postseries-serial-number"]; </span> <span>} </span> <span>else </span> <span>{ </span> <span>$serial_number = ""; </span> <span>} </span> <span>update_post_meta($post_id, "sitepoint-postseries-serial-number", $serial_number); </span> <span>$series_id = null; </span> <span>if(isset($_POST["sitepoint-postseries-id"])) </span> <span>{ </span> <span>$series_id = $_POST["sitepoint-postseries-id"]; </span> <span>} </span> <span>else </span> <span>{ </span> <span>$series_id = ""; </span> <span>} </span> <span>$previous_series_id = get_post_meta($post_id, "sitepoint-postseries-id", true); </span> <span>update_post_meta($post_id, "sitepoint-postseries-id", $series_id); </span> <span>//no series, removing series, adding new series or changing series </span> <span>if($previous_series_id == "" && $series_id == "") </span> <span>{ </span> <span>sitepoint_post_series_save_settings($series_id, $serial_number, $post_id); </span> <span>} </span> <span>else if($previous_series_id != "" && $series_id == "") </span> <span>{ </span> <span>sitepoint_post_series_save_settings($previous_series_id, "", $post_id); </span> <span>} </span> <span>else if($previous_series_id == "" && $series_id != "") </span> <span>{ </span> <span>sitepoint_post_series_save_settings($series_id, $serial_number, $post_id); </span> <span>} </span> <span>else if($previous_series_id != "" && $series_id != "") </span> <span>{ </span> <span>sitepoint_post_series_save_settings($previous_series_id, "", $post_id); </span> <span>sitepoint_post_series_save_settings($series_id, $serial_number, $post_id); </span> <span>} </span><span>} </span> <span>add_action("save_post", "sitepoint_post_series_save_custom_meta_box", 10, 3);</span>
現在,讓我們編碼前端以顯示帖子系列。
索引類型在索引和存檔頁面中尚不可見。為了使其在這些頁面上可見,您只需要添加以下代碼:
>在這裡,我們使用pre_get_posts掛鉤將帖子系列添加到$ q變量,主循環使用該帖子顯示帖子。
顯示帖子系列的帖子
我們需要過濾帖子類型的內容,並添加屬於該系列的帖子。這是在帖子系列頁面中添加帖子系列的帖子的代碼。
<span>/* Store WordPress posts and Post Series CTY relations as WordPress Settings. */ </span> <span>function sitepoint_post_series_save_settings($series_id, $serial_number, $post_id) </span><span>{ </span> <span>if($series_id != "" && $serial_number != "") </span> <span>{ </span> <span>$post_series_list = get_option("post_series_" . $series_id . "_ids", ""); </span> <span>if($post_series_list == "") </span> <span>{ </span> <span>$post_series_list_array = array($post_id); </span> <span>$post_series_list = implode (", ", $post_series_list_array); </span> <span>update_option("post_series_" . $series_id . "_ids", $post_series_list); </span> <span>} </span> <span>else </span> <span>{ </span> <span>$post_series_list_array = explode(',', $post_series_list); </span> <span>if(in_array($post_id, $post_series_list_array)) </span> <span>{ </span> <span>//do nothing </span> <span>} </span> <span>else </span> <span>{ </span> <span>$post_series_list_array[] = $post_id; </span> <span>$post_series_list = implode (", ", $post_series_list_array); </span> <span>update_option("post_series_" . $series_id . "_ids", $post_series_list); </span> <span>} </span> <span>} </span> <span>} </span> <span>else if($series_id == "" || $serial_number == "") </span> <span>{ </span> <span>$post_series_list = get_option("post_series_" . $series_id . "_ids", ""); </span> <span>if($post_series_list == "") </span> <span>{ </span> <span>} </span> <span>else </span> <span>{ </span> <span>$post_series_list_array = explode(',', $post_series_list); </span> <span>if(in_array($post_id, $post_series_list_array)) </span> <span>{ </span> <span>//here remove the post id from array. </span> <span>if(($key = array_search($post_id, $post_series_list_array)) !== false) { </span> <span>unset($post_series_list_array[$key]); </span> <span>} </span> <span>$post_series_list = implode (", ", $post_series_list_array); </span> <span>update_option("post_series_" . $series_id . "_ids", $post_series_list); </span> <span>} </span> <span>else </span> <span>{ </span> <span>} </span> <span>} </span> <span>} </span><span>}</span>
>我們正在從設置字符串中檢索文章系列的帖子,我們在節省元數據時保存了帖子。
>將帖子系列信息添加到帖子>我們還可以在屬於帖子系列的帖子上添加一個帖子系列框,以向用戶表明該帖子屬於特定的帖子系列。這是執行此操作的代碼:
<span><span><?php </span></span><span> </span><span><span>/* </span></span><span><span>Plugin Name: SitePoint Post Series </span></span><span><span>Plugin URI: https://www.sitepoint.com/ </span></span><span><span>Description: This used is used to create a post series. </span></span><span><span>Version: 1.0 </span></span><span><span>Author: Narayan Prusty </span></span><span><span>*/</span></span>
>您還可以使用以下實現sitepoint_post_series_post_content_filter函數添加該系列的下一篇和上一篇文章:
>這是WordPress.org上的一些插件,使您可以創建一個帖子系列。我已經將每個插件與上面創建的插件進行了比較。
如果您擁有開發博客,則可以使用此插件來創建自己的帖子系列,從而提高您的參與度和轉化率。您甚至可以使用它將大型帖子分為多個帖子。 經常詢問有關為WordPress創建帖子插件的問題
> 我可以自定義我的文章的外觀和感覺網站? >創建帖子系列可以顯著改善您的網站SEO。通過將相關帖子分組在一起,您可以創建一個搜索引擎喜歡的內部鏈接網絡。它還增加了您網站上的停留時間,因為讀者更有可能閱讀系列中的多個帖子。 可以在發布之後將帖子添加到系列中?隨時隨地的新帖子。大多數帖子系列插件都允許您輕鬆管理和更新系列,確保您的內容保持相關和最新。 > <span>function sitepoint_post_series_custom_post_type()
</span><span>{
</span> <span>register_post_type("sitepoint-postseries", array(
</span> <span>"labels" => array("name" => __("Post Series"), "singular_name" => __("Post Series")),
</span> <span>"public" => true,
</span> <span>"has_archive" => true,
</span> <span>"rewrite" => array("slug"=> "post-series"),
</span> <span>"supports" => array("editor", "title", "excerpt", "thumbnail", "comments"),
</span> <span>"capability_type" => "post",
</span> <span>"publicly_queryable" => true,
</span> <span>"taxonomies" => array("category", "post_tag"),
</span> <span>)
</span> <span>);
</span><span>}
</span>
<span>add_action("init", "sitepoint_post_series_custom_post_type", 2);
</span>
<span>/* Flush Rewrite Rules */
</span>
<span>function sitepoint_post_series_activation()
</span><span>{
</span> <span>sitepoint_post_series_custom_post_type();
</span> <span>flush_rewrite_rules();
</span><span>}
</span>
<span>register_activation_hook( __FILE__, "sitepoint_post_series_activation");
</span><span>register_deactivation_hook( __FILE__, "sitepoint_post_series_activation");</span>
組織系列:組織系列為WordPress帖子添加了自定義分類法。當您查看自定義分類法時,它會添加到存檔頁面的標題,這似乎是郵政系列的標題。帖子系列中的帖子像分類法一樣顯示,從用戶角度來看,這可能不是很好。相比之下,我們的插件使用自定義帖子類型顯示單個帖子系列,以便您可以將特色圖像,文本或標記內容(以及更多)添加到帖子系列中。與我們的插件中的存檔頁面相比,帖子系列的帖子看起來不同。 >
可以隨時評論您對下面插件的經歷。
>
>
> POST系列插件與標準WordPress類別和標籤有何不同?
,而WordPress類別和標籤確實允許您將相關的帖子分組在一起,但它們缺乏帖子系列插件提供的順序結構。使用Post系列插件,您可以以特定的順序訂購帖子,從而使讀者更容易遵循故事情節或結構化的學習路徑。
> 是的,大多數帖子系列插件都提供自定義選項。您可以更改佈局,顏色,字體和其他設計元素,以匹配您網站的整體美學。一些插件還允許您添加自定義CSS以進行更高級的自定義。
創建帖子系列如何影響我的網站的SEO? 我可以在WordPress網站上創建多個帖子系列嗎?您可以根據需要創建盡可能多的帖子系列。這對於涵蓋多個主題或具有不同類型的序列化內容的網站特別有用。
我可以在多作者WordPress網站上使用帖子系列插件嗎? >
是的,可以在多作者站點上使用後插件。它可以是管理和組織來自多個作者的內容的絕佳工具,確保所有帖子的一致性和連貫性。 是的,有幾個免費的帖子系列可用於WordPress的插件。但是,請記住,免費插件可能不會提供像高級插件一樣多的功能或支持。始終選擇一個最適合您需求和預算的插件。
>
以上是為WordPress創建帖子插件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱門文章

熱門文章

熱門文章標籤

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)