首页 > CMS教程 > &#&按 > 为WordPress创建帖子插件

为WordPress创建帖子插件

尊渡假赌尊渡假赌尊渡假赌
发布: 2025-02-18 12:09:10
原创
580 人浏览过

为WordPress创建帖子插件

> WordPress Post系列插件使您能够串行组织帖子以创建书籍或课程。它为用户提供了学习的途径。帖子系列插件也可以用来将长帖子分为多个部分。

> 在本教程中,我将向您展示如何创建一个用于显示一系列帖子的插件。您还可以将相同的代码集成到主题功能中。

>

钥匙要点

    >利用自定义帖子类型,而不是自定义分类法来有效地创建和管理WordPress的帖子系列,增强用户体验和内容组织。
  • >实现具有PHP文件和可选CSS的插件结构,可确保WordPress识别并正确安装您的自定义插件。
  • 在WordPress管理中包括元框,以允许作者将帖子分配给特定的系列并串行订购,从而改善该系列的结构完整性。
  • >通过使用“ Pre_get_posts”操作修改主查询循环,在您的网站上扩展了Post系列的可见性,确保串联的索引和存档页面包括。
  • >通过将导航链接添加到上一个和下一个帖子,提高用户参与度和每个访问者的页面视图,来增强系列中的单个帖子。
  • >分类学与帖子系列
在WordPress中,分类法用于将类似的帖子分组或组织类似的帖子。但是WordPress并没有提供一种以定制的序列方式显示特定分类法的所有帖子。 WordPress分类法是使用Archive.php文件显示的,因此我们不能创建一个帖子系列作为单个,可索引的帖子。

因此,我们需要一个文章系列,这实际上是一个以串行方式包含其他帖子的帖子。

>

如何创建帖子系列

>创建帖子系列有许多不同的方法。在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创建帖子插件>在帖子中添加一个帖子元盒

现在,我们需要将元框添加到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>
登录后复制
登录后复制
这是在管理邮政屏幕上的外观:

现在,我们需要在保存表单时保存元框字段。这是这样做的代码:

为WordPress创建帖子插件

>在这里我们保存元框内容,然后调用函数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>
登录后复制
这将使用HTML无序列表标签显示帖子。对于没有图像的帖子,我们正在加载Lorempixel Cloud Service的图像来生成随机纹理图像。

>我们正在从设置字符串中检索文章系列的帖子,我们在节省元数据时保存了帖子。

>将帖子系列信息添加到帖子

>我们还可以在属于帖子系列的帖子上添加一个帖子系列框,以向用户表明该帖子属于特定的帖子系列。这是执行此操作的代码:

<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函数添加该系列的下一篇和上一篇文章:

此实现的问题是,该代码击中了MySQL的次数,等于系列中的帖子数量。如果您有很多特定文章系列的帖子,则存在性能问题,但我出于教育目的包​​括了它。
<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.org上的一些插件,使您可以创建一个帖子系列。我已经将每个插件与上面创建的插件进行了比较。

>

组织系列:组织系列为WordPress帖子添加了自定义分类法。当您查看自定义分类法时,它会添加到存档页面的标题,这似乎是邮政系列的标题。帖子系列中的帖子像分类法一样显示,从用户角度来看,这可能不是很好。相比之下,我们的插件使用自定义帖子类型显示单个帖子系列,以便您可以将特色图像,文本或标记内容(以及更多)添加到帖子系列中。与我们的插件中的存档页面相比,帖子系列的帖子看起来不同。

> WP Post系列:这也像组织系列插件一样。一个区别是,它没有为邮政系列页面提供任何自定义。
    >
  1. 我们的插件高度可自定义,不包含任何WordPress黑客攻击。因此,它更加兼容。
  2. >
  3. 结论

如果您拥有开发博客,则可以使用此插件来创建自己的帖子系列,从而提高您的参与度和转化率。您甚至可以使用它将大型帖子分为多个帖子。

可以随时评论您对下面插件的经历。

>

经常询问有关为WordPress创建帖子插件的问题

什么是帖子系列插件,为什么我需要它的WordPress网站?

> post系列插件是一种允许您将相关帖子分组为系列的工具。这对于以序列化格式发布内容的博客或网站特别有用。它通过使读者更容易浏览相关内容来增强用户体验。它还有助于改善网站的SEO,因为搜索引擎偏爱结构良好的结构链接内容。

>

> POST系列插件与标准WordPress类别和标签有何不同?

>

,而WordPress类别和标签确实允许您将相关的帖子分组在一起,但它们缺乏帖子系列插件提供的顺序结构。使用Post系列插件,您可以以特定的顺序订购帖子,从而使读者更容易遵循故事情节或结构化的学习路径。

>

我可以自定义我的文章的外观和感觉网站?

是的,大多数帖子系列插件都提供自定义选项。您可以更改布局,颜色,字体和其他设计元素,以匹配您网站的整体美学。一些插件还允许您添加自定义CSS以进行更高级的自定义。

创建帖子系列如何影响我的网站的SEO?

>创建帖子系列可以显着改善您的网站SEO。通过将相关帖子分组在一起,您可以创建一个搜索引擎喜欢的内部链接网络。它还增加了您网站上的停留时间,因为读者更有可能阅读系列中的多个帖子。

我可以在WordPress网站上创建多个帖子系列吗?您可以根据需要创建尽可能多的帖子系列。这对于涵盖多个主题或具有不同类型的序列化内容的网站特别有用。

可以在发布之后将帖子添加到系列中?随时随地的新帖子。大多数帖子系列插件都允许您轻松管理和更新系列,确保您的内容保持相关和最新。

我可以在多作者WordPress网站上使用帖子系列插件吗? >

是的,可以在多作者站点上使用后插件。它可以是管理和组织来自多个作者的内容的绝佳工具,确保所有帖子的一致性和连贯性。

我是否需要编码技能来在WordPress上创建帖子系列?您不需要任何编码技能就可以在WordPress上创建帖子系列。大多数帖子系列插件都带有一个用户友好的界面,可以轻松创建和管理您的系列。

我可以使用我现有的WordPress主题的Post系列插件吗? Post Series插件旨在与任何WordPress主题无缝合作。但是,最好检查插件的文档或与开发人员联系以确认。

>

是否有免费的帖子系列插件可用于WordPress?

是的,有几个免费的帖子系列可用于WordPress的插件。但是,请记住,免费插件可能不会提供像高级插件一样多的功能或支持。始终选择一个最适合您需求和预算的插件。

>

以上是为WordPress创建帖子插件的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板