这节课,我们来学习wordpress插件开发的原理。
如何让wordpress认识一个插件
wordpress中做插件的方式和做主题开发的方式是非常类似的。就像我们做主题时必须要有index.php和style.css一样。
wordpress插件里面也必须要编写固定格式的代码才能够被识别。
首先,我们来到本地的开发环境中,看下插件目录的位置:
这里实际上是有5个插件,插件有2种不同的形式,一种是直接以一个“文件”的形式存在,就像上图的“hello.php”,另外一种是以“文件夹”的形式存在,就像上图的“akismet”。
为什么会以文件夹存在呢?是因为有些插件里面的内容写的非常复杂,有些插件里还包括样式和图片,所以需要以文件夹的形式呈现。而有些插件很简单,一个文件就能够实现插件的功能。
以上就是插件存放的位置以及2种不同的形式。
那到底怎样才能让wordpress认识一个插件呢?
我们看看官网是如何解释的:wordpress官方文档
名字,文件和位置
名字
首先你需要想好这个插件是用来做什么的,然后你就可以为它起一个独一无二的名字。如果你不确定这个名字是否被使用过,你可以通过Google或者其他的方式来搜索一下。大多数插件开发者为插件起的名字都能很直观地描述它的功能,例如,一个与天气有关的插件的名字中就应当包含“天气”两个字。插件的名字可以由多个字词组成。
文件
下一步就是根据你插件的名字,创建一个PHP主文件。举个例子,如果插件的名字叫做 "Fabulous Functionality",那么PHP主文件的名字就可以是 "functionality.php",当然,还要注意重名的问题。因为用户在安装你的插件的时候,会默认把你的插件安装到一个叫wp-content/plugins/的目录下,如果两个插件的文件名冲突了,那就杯具了。
你的插件中至少应当包含一个PHP主文件(当然你也可以把它拆分成多个文件),还可以包含Javascript文件、CSS文件、图片文件以及语言文件等。如果你的插件中包含多个文件,你还需要建立一个文件夹,并把插件包含的所有文件放到这个文件夹中,这样你只要让其他人把整个文件夹放到wp-content/plugins/目录下就可以了。插件文件夹的名称通常和插件PHP文件的名称相同,例如PHP文件的名称叫做functionality.php的话,文件夹的名称就可以叫做functionality。
需要注意的是,由于在WordPress中可以配置wp-content/plugins/目录的位置,所以你必须使用plugin_dir_path()和plugins_url()两个函数来获取插件的路径。
插件如何被认识:
文件头
现在开始吧,首先让我们向PHP主文件中加入一些信息
标准插件信息
插件的主文件顶部必须包括一个标准插件信息头。WordPress通过标准信息头识别插件的存在,并把它加入到控制面板的插件管理页面,这样插件才能激活,载入插件,并运行里面的函数;如果没有信息头,插件将无法激活和使用。标准信息插件头的格式为:
<?php /* Plugin Name: 插件名称 Plugin URI: http://URI_Of_Page_Describing_Plugin_and_Updates Description: 插件的简单描述 Version: 插件版本号, 例如: 1.0 Author: 插件作者 Author URI: http://URI_Of_The_Plugin_Author作者地址 */ ?>标准信息头至少要包括插件名称,这样WordPress才能识别你的插件。其他信息将显示在控制面板插件管理页面中。标准插件信息对各行顺序没有要求。
这就是让wordpress认识一个插件的方法。
官方开发插件的文档
在我们打开的这个官方文档中,详细介绍了插件开发知识和链接,你都可以不断的去深入,点击这些链接去找到对应的内容。
这里提供三个链接供大家参考学习:
插件 API
这里主要讲解插件开发的原理,插件是如何运行的。
这里涉及到插件的动作(Action),过滤器(Filter)。
我们所有的插件开发都是基于这两个“执行挂钩的机制”来进行操作的。
关于动作(Action),过滤器(Filter)我会在后面和大家详细的解释。
这里当然也有详细的介绍,大家有兴趣的话可以深入的了解。
你可以看到:
目前提供的动作类钩子
参看 Plugin API/Action Reference 以查找WordPress目前提供的动作类挂钩列表
目前为过滤器提供的钩子
参看 Plugin API/Filter Reference 查找目前为WordPress过滤器提供的钩子, 以及过去版本WordPress钩子的链接。
以上是两个“挂钩的机制”对应的标签。
如何真正的实现一个插件
回到插件文件夹,在这里我已经准备好了一个叫做“plugin_1.php”:plugin_1
打开它,可以看到,最外面是php代码,接下来是插件的标识代码,只有写上这些信息才能被wordpress所识别/
<?php
/*
Plugin Name: 我的第一个插件
Plugin URI: https://www.xuhss.com
Version:V1.01
Author: MrBang
Author URI:http:// www.xuhss.com
Description:这是我开发的第一个WP插件哦
*/
function showName(){
echo "菜单<br/>";
echo date('Y-m-d h:m:s');
echo "插件原理";
}
//add_action('adminmenu','showName');
//add_filter('adminmenu','showName');
?>
把这个文件放到wordpress的插件目录下,然后来到wordpress后台-插件-已安装插件:
我们可以看到“插件的名称”“描述”“作者”“插件主页”。
这说明插件识别成功,点击“启用”
这个插件是没有任何功能实现的。相当于是一个空的插件。
动作(Action),过滤器(Filter)的机制
接着,我们来学习:动作(Action),过滤器(Filter)的机制:
在这个插件里,我们只写了一个函数,这个函数输出了“菜单”,“日期”,“插件原理”。
function showName(){
echo "菜单<br/>";
echo date('Y-m-d h:m:s');
echo "插件原理";
}
我们并没有注释掉这个函数,但是在插件的页面没有任何的效果。
怎么能够看到这个函数的下效果呢?先去除action的注释,保存文件。
add_action('adminmenu','showName');
然后,再来到wordpress的后台插件页面,启用插件。
启用之后,在管理员菜单中输出了一些文字:
我们看一下这是什么原理:
首先定义了一个叫做showName的函数。函数里分别输出了3句话。那么怎么样让这个函数执行呢?
在这里就使用了Action机制,Action的第一个参数是“adminmenu”,这个参数是wordpress预先提供的。到Action或Filter的文档中可以找到。
它是wordpress已经提供好的内容。
所以Action机制确定函数执行的时机。你现在某个动作发生的时候,执行你定义的操作,这时,就使用Action机制/
我们注释Action,打开Filter:
add_filter('adminmenu','showName');
来到网站后台,可以看到同样的结果。
那Filter的原理是什么呢?前面的Action的原理是执行动作的时候调用函数,Filter是调用这些内容之前做的处理,在你调用adminmenu之前,运行这个函数,然后再和adminmenu一起输出,它是在之前做的处理,而Action是在动作的过程中做的处理。
根据你想实现的功能来采用不同的机制,那么这就是插件的原理介绍和文档介绍。
转载请注明:xuhss » wordpress插件开发01-原理讲解