> WordPress Post系列插件使您能够串行组织帖子以创建书籍或课程。它为用户提供了学习的途径。帖子系列插件也可以用来将长帖子分为多个部分。
> 在本教程中,我将向您展示如何创建一个用于显示一系列帖子的插件。您还可以将相同的代码集成到主题功能中。>
钥匙要点如何创建帖子系列
>创建帖子系列有许多不同的方法。在WordPress.org上找到的流行帖子系列插件使用WordPress帖子上的自定义分类法来创建帖子系列,但是在本教程中,我将使用自定义帖子类型。
插件文件结构>在sitepoint-post series.php文件中,将代码放在下面,以便WordPress识别目录为插件,并让您安装它。
首先,我们需要创建一个自定义帖子类型,其中每个自定义帖子类型代表帖子系列。
>将下面的代码放在名为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帖子使用的相同分类法。这样您也可以创建一个类别帖子系列。
>>我们还添加了激活和停用钩子以齐平的重写规则。这是为了使帖子系列可以在前端查看。
>这是我们的自定义帖子类型在管理屏幕上的外观:
这是在帖子系列中添加元框的代码:
在这里,我们在元框中添加了两个字段。作者使用文本字段输入序列号,并使用下拉列表来选择帖子所属的帖子名称。如果您不想将帖子添加到帖子系列中,则应将一个或两个字段留为空白。
<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中文网其他相关文章!