首页 > 主题开发 > wordpress插件开发 > wordpress插件开发01-原理讲解
2018
07-15

wordpress插件开发01-原理讲解

这节课,我们来学习wordpress插件开发的原理。

如何让wordpress认识一个插件

wordpress中做插件的方式和做主题开发的方式是非常类似的。就像我们做主题时必须要有index.php和style.css一样。

wordpress插件里面也必须要编写固定格式的代码才能够被识别。

首先,我们来到本地的开发环境中,看下插件目录的位置:

You must be logged in to view the hidden contents.

 

这里实际上是有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: http://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后台-插件-已安装插件:

You must be logged in to view the hidden contents.

我们可以看到“插件的名称”“描述”“作者”“插件主页”。

这说明插件识别成功,点击“启用”

这个插件是没有任何功能实现的。相当于是一个空的插件。

动作(Action),过滤器(Filter)的机制

接着,我们来学习:动作(Action),过滤器(Filter)的机制:

在这个插件里,我们只写了一个函数,这个函数输出了“菜单”,“日期”,“插件原理”。

function showName(){
    echo "菜单<br/>";
    echo date('Y-m-d h:m:s');
    echo "插件原理";
}

我们并没有注释掉这个函数,但是在插件的页面没有任何的效果。

怎么能够看到这个函数的下效果呢?先去除action的注释,保存文件。

add_action('adminmenu','showName');

然后,再来到wordpress的后台插件页面,启用插件。

启用之后,在管理员菜单中输出了一些文字:

You must be logged in to view the hidden contents.

我们看一下这是什么原理:

首先定义了一个叫做showName的函数。函数里分别输出了3句话。那么怎么样让这个函数执行呢?

在这里就使用了Action机制,Action的第一个参数是“adminmenu”,这个参数是wordpress预先提供的。到Action或Filter的文档中可以找到。

它是wordpress已经提供好的内容。

所以Action机制确定函数执行的时机。你现在某个动作发生的时候,执行你定义的操作,这时,就使用Action机制/

我们注释Action,打开Filter:

add_filter('adminmenu','showName');

来到网站后台,可以看到同样的结果。

那Filter的原理是什么呢?前面的Action的原理是执行动作的时候调用函数,Filter是调用这些内容之前做的处理,在你调用adminmenu之前,运行这个函数,然后再和adminmenu一起输出,它是在之前做的处理,而Action是在动作的过程中做的处理。

根据你想实现的功能来采用不同的机制,那么这就是插件的原理介绍和文档介绍。

最后编辑:
作者:MrBang
WordPress迷

留下一个回复